in packages/stunner-editors/kie-wb-common-stunner/kie-wb-common-stunner-sets/kie-wb-common-stunner-bpmn/kie-wb-common-stunner-bpmn-emf/src/main/java/org/eclipse/emf/ecore/xmi/resource/xml/XMLSave.java [2270:2395]
protected int featureKind(EStructuralFeature f) {
if (f.isTransient()) {
return TRANSIENT;
}
boolean isMany = f.isMany();
boolean isUnsettable = f.isUnsettable();
if (f instanceof EReference) {
EReference r = (EReference) f;
if (r.isContainment()) {
return
isMany ?
isUnsettable ? OBJECT_CONTAIN_MANY_UNSETTABLE : OBJECT_CONTAIN_MANY :
isUnsettable ? OBJECT_CONTAIN_SINGLE_UNSETTABLE : OBJECT_CONTAIN_SINGLE;
}
EReference opposite = r.getEOpposite();
if (opposite != null && opposite.isContainment()) {
return TRANSIENT;
}
if (map != null) {
XMLInfo info = map.getInfo(f);
if (info != null && info.getXMLRepresentation() == XMLInfo.ELEMENT) {
return
isMany ?
OBJECT_ELEMENT_MANY :
r.isUnsettable() ?
OBJECT_ELEMENT_SINGLE_UNSETTABLE :
OBJECT_ELEMENT_SINGLE;
}
}
if (extendedMetaData != null) {
switch (extendedMetaData.getFeatureKind(f)) {
case ExtendedMetaData.ATTRIBUTE_FEATURE: {
return
r.isResolveProxies() ?
isMany ?
OBJECT_ATTRIBUTE_MANY :
OBJECT_ATTRIBUTE_SINGLE :
isMany ?
OBJECT_ATTRIBUTE_IDREF_MANY :
OBJECT_ATTRIBUTE_IDREF_SINGLE;
}
case ExtendedMetaData.SIMPLE_FEATURE: {
if (f == XMLTypePackage.Literals.SIMPLE_ANY_TYPE__INSTANCE_TYPE) {
return TRANSIENT;
}
}
case ExtendedMetaData.ELEMENT_FEATURE: {
return
r.isResolveProxies() ?
isMany ?
OBJECT_ELEMENT_MANY :
r.isUnsettable() ?
OBJECT_ELEMENT_SINGLE_UNSETTABLE :
OBJECT_ELEMENT_SINGLE :
isMany ?
OBJECT_ELEMENT_IDREF_MANY :
r.isUnsettable() ?
OBJECT_ELEMENT_IDREF_SINGLE_UNSETTABLE :
OBJECT_ELEMENT_IDREF_SINGLE;
}
}
}
return
isMany ?
isUnsettable ? OBJECT_HREF_MANY_UNSETTABLE : OBJECT_HREF_MANY :
isUnsettable ? OBJECT_HREF_SINGLE_UNSETTABLE : OBJECT_HREF_SINGLE;
} else {
// Attribute
EDataType d = (EDataType) f.getEType();
if (!d.isSerializable() && d != EcorePackage.Literals.EFEATURE_MAP_ENTRY) {
return TRANSIENT;
}
if (d.getInstanceClass() == FeatureMap.Entry.class) {
return
extendedMetaData != null && extendedMetaData.getFeatureKind(f) == ExtendedMetaData.ATTRIBUTE_WILDCARD_FEATURE ?
ATTRIBUTE_FEATURE_MAP :
ELEMENT_FEATURE_MAP;
}
if (extendedMetaData != null) {
switch (extendedMetaData.getFeatureKind(f)) {
case ExtendedMetaData.SIMPLE_FEATURE: {
return DATATYPE_ELEMENT_SINGLE;
}
case ExtendedMetaData.ELEMENT_FEATURE: {
return f.isMany() ? DATATYPE_MANY : DATATYPE_ELEMENT_SINGLE;
}
case ExtendedMetaData.ATTRIBUTE_FEATURE: {
return f.isMany() ? DATATYPE_ATTRIBUTE_MANY : DATATYPE_SINGLE;
}
}
}
if (isMany) {
return DATATYPE_MANY;
}
if (isUnsettable && map == null) {
return DATATYPE_SINGLE_NILLABLE;
}
if (map == null) {
return DATATYPE_SINGLE;
} else {
XMLInfo info = map.getInfo(f);
if (info != null && info.getXMLRepresentation() == XMLInfo.ELEMENT) {
return DATATYPE_ELEMENT_SINGLE;
} else if (info != null && info.getXMLRepresentation() == XMLInfo.CONTENT) {
return DATATYPE_CONTENT_SINGLE;
} else {
if (isUnsettable) {
return DATATYPE_SINGLE_NILLABLE;
} else {
return DATATYPE_SINGLE;
}
}
}
}
}