Class CElementPropertyInfo
- java.lang.Object
-
- com.sun.tools.xjc.model.CPropertyInfo
-
- com.sun.tools.xjc.model.CElementPropertyInfo
-
- All Implemented Interfaces:
CCustomizable
,AnnotationSource
,ElementPropertyInfo<NType,NClass>
,PropertyInfo<NType,NClass>
public final class CElementPropertyInfo extends CPropertyInfo implements ElementPropertyInfo<NType,NClass>
ElementPropertyInfo
for the compiler.- Author:
- Kohsuke Kawaguchi
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CElementPropertyInfo.CollectionMode
-
Field Summary
-
Fields inherited from class com.sun.tools.xjc.model.CPropertyInfo
baseType, defaultValue, inlineBinaryData, javadoc, locator, realization
-
-
Constructor Summary
Constructors Constructor Description CElementPropertyInfo(String name, CElementPropertyInfo.CollectionMode collection, ID id, MimeType expectedMimeType, XSComponent source, CCustomizations customizations, Locator locator, boolean required)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description <V> V
accept(CPropertyVisitor<V> visitor)
<R,P>
Raccept(CPropertyVisitor2<R,P> visitor, P p)
QName
collectElementNames(Map<QName,CPropertyInfo> table)
Puts the element names that this property possesses to the map, so that we can find two properties that own the same element name, which is an error.CAdapter
getAdapter()
MimeType
getExpectedMimeType()
Expected MIME type, if any.QName
getSchemaType()
The effective value ofXmlSchemaType
annotation, if any.List<CTypeRef>
getTypes()
Returns the information about the types allowed in this property.QName
getXmlName()
Deprecated.ID
id()
Returns the IDness of the value of this element.boolean
isCollectionNillable()
Returns true if this property is nillable (meaning the absence of the value is treated as nil='true')boolean
isCollectionRequired()
Checks if the wrapper element is required.boolean
isOptionalPrimitive()
Returns true if this property needs to represent null just for the purpose of representing an absence of the property.boolean
isRequired()
Returns true if this element is mandatory.boolean
isUnboxable()
Returns true if this property is "unboxable".boolean
isValueList()
Returns true if this property is a collection but its XML representation is a list of values, not repeated elements.PropertyKind
kind()
Gets the kind of this property.List<CNonElement>
ref()
List ofTypeInfo
s that this property references.void
setAdapter(CAdapter a)
-
Methods inherited from class com.sun.tools.xjc.model.CPropertyInfo
displayName, getCustomizations, getLocator, getName, getName, getSchemaComponent, hasAnnotation, inlineBinaryData, isCollection, needsExplicitTypeName, parent, readAnnotation, setName
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.sun.xml.bind.v2.model.annotation.AnnotationSource
hasAnnotation, readAnnotation
-
Methods inherited from interface com.sun.xml.bind.v2.model.core.PropertyInfo
displayName, getName, inlineBinaryData, isCollection, parent
-
-
-
-
Constructor Detail
-
CElementPropertyInfo
public CElementPropertyInfo(String name, CElementPropertyInfo.CollectionMode collection, ID id, MimeType expectedMimeType, XSComponent source, CCustomizations customizations, Locator locator, boolean required)
-
-
Method Detail
-
id
public ID id()
Description copied from interface:PropertyInfo
Returns the IDness of the value of this element.
-
getTypes
public List<CTypeRef> getTypes()
Description copied from interface:ElementPropertyInfo
Returns the information about the types allowed in this property.In a simple case like the following, an element property only has one
TypeRef
that points toString
and tag name "foo".@XmlElement String abc;
However, in a general case an element property can be heterogeneous, meaning you can put different types in it, each with a different tag name (and a few other settings.)
// list can contain String or Integer. @XmlElements({ @XmlElement(name="a",type=String.class), @XmlElement(name="b",type=Integer.class), }) List<Object> abc;
In this case this method returns a list of two
TypeRef
s.- Specified by:
getTypes
in interfaceElementPropertyInfo<NType,NClass>
- Returns:
- Always non-null. Contains at least one entry.
If
ElementPropertyInfo.isValueList()
==true, there's always exactly one type.
-
ref
public List<CNonElement> ref()
Description copied from interface:PropertyInfo
List ofTypeInfo
s that this property references. This allows the caller to traverse the reference graph without getting into the details of each different property type.- Specified by:
ref
in interfacePropertyInfo<NType,NClass>
- Specified by:
ref
in classCPropertyInfo
- Returns:
- non-null read-only collection.
-
getSchemaType
public QName getSchemaType()
Description copied from interface:PropertyInfo
The effective value ofXmlSchemaType
annotation, if any.If the property doesn't have
XmlSchemaType
annotation, this method returns null.Since a type name is a property of a Java type, not a Java property, A schema type name of a Java type should be primarily obtained by using
NonElement.getTypeName()
. This method is to correctly implement the ugly semantics ofXmlSchemaType
(namely when this returns non-null, it overrides the type names of all types that are in this property.)- Specified by:
getSchemaType
in interfacePropertyInfo<NType,NClass>
-
getXmlName
@Deprecated public QName getXmlName()
Deprecated.XJC never uses the wrapper element. Always return null.- Specified by:
getXmlName
in interfaceElementPropertyInfo<NType,NClass>
- Returns:
- must be null if
PropertyInfo.isCollection()
==false or ifElementPropertyInfo.isValueList()
==true. Otherwise, this can be null (in which case there'll be no wrapper), or it can be non-null (in which case there'll be a wrapper)
-
isCollectionRequired
public boolean isCollectionRequired()
Description copied from interface:ElementPropertyInfo
Checks if the wrapper element is required.- Specified by:
isCollectionRequired
in interfaceElementPropertyInfo<NType,NClass>
- Returns:
- Always false if
ElementPropertyInfo.getXmlName()
==null.
-
isCollectionNillable
public boolean isCollectionNillable()
Description copied from interface:ElementPropertyInfo
Returns true if this property is nillable (meaning the absence of the value is treated as nil='true')This method is only used when this property is a collection.
- Specified by:
isCollectionNillable
in interfaceElementPropertyInfo<NType,NClass>
-
isRequired
public boolean isRequired()
Description copied from interface:ElementPropertyInfo
Returns true if this element is mandatory. For collections, this property isn't used. TODO: define the semantics when this is a collection- Specified by:
isRequired
in interfaceElementPropertyInfo<NType,NClass>
-
isValueList
public boolean isValueList()
Description copied from interface:ElementPropertyInfo
Returns true if this property is a collection but its XML representation is a list of values, not repeated elements.If
PropertyInfo.isCollection()
==false, this property is always false.When this flag is true,
getTypes().size()==1
always holds.- Specified by:
isValueList
in interfaceElementPropertyInfo<NType,NClass>
-
isUnboxable
public boolean isUnboxable()
Description copied from class:CPropertyInfo
Returns true if this property is "unboxable".In general, a property often has to be capable of representing null to indicate the absence of the value. This requires properties to be generated as
@XmlElement Float f
, not as@XmlElement float f;
. But this is slow.Fortunately, there are cases where we know that the property can never legally be absent. When this condition holds we can generate the optimized "unboxed form".
The exact such conditions depend on the kind of properties, so refer to the implementation code for the details.
This method returns true when the property can be generated as "unboxed form", false otherwise.
When this property is a collection, this method returns true if items in the collection is unboxable. Obviously, the collection itself is always a reference type.
- Overrides:
isUnboxable
in classCPropertyInfo
-
isOptionalPrimitive
public boolean isOptionalPrimitive()
Description copied from class:CPropertyInfo
Returns true if this property needs to represent null just for the purpose of representing an absence of the property.- Overrides:
isOptionalPrimitive
in classCPropertyInfo
-
accept
public <V> V accept(CPropertyVisitor<V> visitor)
- Specified by:
accept
in classCPropertyInfo
-
accept
public <R,P> R accept(CPropertyVisitor2<R,P> visitor, P p)
- Specified by:
accept
in classCPropertyInfo
-
getAdapter
public CAdapter getAdapter()
- Specified by:
getAdapter
in interfaceElementPropertyInfo<NType,NClass>
- Specified by:
getAdapter
in interfacePropertyInfo<NType,NClass>
- Specified by:
getAdapter
in classCPropertyInfo
- Returns:
- null if the property is not adapted.
-
setAdapter
public void setAdapter(CAdapter a)
-
kind
public final PropertyKind kind()
Description copied from interface:PropertyInfo
Gets the kind of this property.- Specified by:
kind
in interfacePropertyInfo<NType,NClass>
- Returns:
- always non-null.
-
getExpectedMimeType
public MimeType getExpectedMimeType()
Description copied from interface:PropertyInfo
Expected MIME type, if any.- Specified by:
getExpectedMimeType
in interfacePropertyInfo<NType,NClass>
-
collectElementNames
public QName collectElementNames(Map<QName,CPropertyInfo> table)
Description copied from class:CPropertyInfo
Puts the element names that this property possesses to the map, so that we can find two properties that own the same element name, which is an error.- Overrides:
collectElementNames
in classCPropertyInfo
- Returns:
- null if no conflict was found. Otherwise return the QName that has the collision.
-
-