blob: bf90f6fe33b70457bf879cba6c1d7621d47632a2 [file] [log] [blame]
/**
* Copyright (c) 2002-2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.codegen.ecore.genmodel.impl;
import org.eclipse.emf.codegen.ecore.genmodel.GenClass;
import org.eclipse.emf.codegen.ecore.genmodel.GenClassifier;
import org.eclipse.emf.codegen.ecore.genmodel.GenDataType;
import org.eclipse.emf.codegen.ecore.genmodel.GenEnum;
import org.eclipse.emf.codegen.ecore.genmodel.GenFeature;
import org.eclipse.emf.codegen.ecore.genmodel.GenJDKLevel;
import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.codegen.ecore.genmodel.GenTypedElement;
import org.eclipse.emf.codegen.util.CodeGenUtil;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EGenericType;
import org.eclipse.emf.ecore.EModelElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.ETypeParameter;
import org.eclipse.emf.ecore.ETypedElement;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.EcoreValidator;
import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Gen Typed Element</b></em>'.
* <!-- end-user-doc -->
*
* @generated
*/
public abstract class GenTypedElementImpl extends GenBaseImpl implements GenTypedElement
{
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected GenTypedElementImpl()
{
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass()
{
return GenModelPackage.Literals.GEN_TYPED_ELEMENT;
}
public abstract ETypedElement getEcoreTypedElement();
@Override
public EModelElement getEcoreModelElement()
{
return getEcoreTypedElement();
}
public GenPackage getTypeGenPackage()
{
return findGenPackage(getEcoreTypedElement().getEType().getEPackage());
}
public String getTypeClassifierAccessorName()
{
return findGenClassifier(getEcoreTypedElement().getEType()).getClassifierAccessorName();
}
/**
* @deprecated As of EMF 2.1, replaced by {@link #getTypeClassifierAccessorName}.
*/
@Deprecated
public String getTypeClassifier()
{
return getTypeClassifierAccessorName();
}
protected GenClass getContext()
{
for (EObject context = eContainer(); context != null; context = context.eContainer())
{
if (context instanceof GenClass)
{
return (GenClass)context;
}
}
return null;
}
public boolean hasGenericType()
{
if (getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
EGenericType eGenericType = getEcoreTypedElement().getEGenericType();
return eGenericType != null && (eGenericType.getETypeParameter() != null || !eGenericType.getETypeArguments().isEmpty());
}
return false;
}
public String getRawType()
{
if (isFeatureMapType()) return getEffectiveFeatureMapWrapperInterface();
if (isMapType()) return getEffectiveMapType();
if (isListType()) return getEffectiveListType();
if (isMapEntryType()) return getEffectiveMapType();
if (isEObjectType()) return getEffectiveEObjectType();
return getType(getContext(), getEcoreTypedElement().getEType(), false, true);
}
public String getRawBoundType()
{
if (isFeatureMapType()) return getEffectiveFeatureMapWrapperInterface();
if (isMapType()) return getEffectiveMapType();
if (isListType()) return getEffectiveListType();
if (isMapEntryType()) return getEffectiveMapEntryType();
if (isEObjectType()) return getEffectiveEObjectType();
return getType(getContext(), getBoundType(getEcoreTypedElement().getEGenericType()), false, true);
}
@Deprecated
public String getType()
{
return getType(getContext());
}
public String getType(GenClass context)
{
if (isFeatureMapType()) return getEffectiveFeatureMapWrapperInterface();
if (isMapType()) return getEffectiveMapType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass());
if (isMapEntryType())
if (isListType())
if (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50) return getEffectiveListType();
else return getEffectiveListType() + "<" + getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()) + ">";
else return getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass());
if (isListType()) return getEffectiveListType(context, getEcoreTypedElement().getEGenericType());
if (isEObjectType()) return getEffectiveEObjectType();
if (isListDataType() && getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
return "java.util.List<" + getType(context, getListDataType().getEcoreDataType(), true) + ">";
}
return getType(context, getEcoreTypedElement().getEGenericType(), false);
}
public String getRawImportedType()
{
if (isFeatureMapType()) return getGenModel().getImportedName(getEffectiveFeatureMapWrapperInterface());
if (isMapType()) return getGenModel().getImportedName(getEffectiveMapType());
if (isListType()) return getGenModel().getImportedName(getEffectiveListType());
if (isMapEntryType()) return getGenModel().getImportedName(getEffectiveMapEntryType());
if (isEObjectType()) return getGenModel().getImportedName(getEffectiveEObjectType());
return getImportedType(null, getEcoreTypedElement().getEType(), false);
}
public String getRawImportedBoundType()
{
if (isFeatureMapType()) return getGenModel().getImportedName(getEffectiveFeatureMapWrapperInterface());
if (isMapType()) return getGenModel().getImportedName(getEffectiveMapType());
if (isListType()) return getGenModel().getImportedName(getEffectiveListType());
if (isMapEntryType()) return getGenModel().getImportedName(getEffectiveMapEntryType());
if (isEObjectType()) return getGenModel().getImportedName(getEffectiveEObjectType());
return getImportedType(null, getBoundType(getEcoreTypedElement().getEGenericType()), false, true);
}
@Deprecated
public String getImportedType()
{
return getImportedType(getContext());
}
public String getImportedType(GenClass context)
{
if (isFeatureMapType()) return getGenModel().getImportedName(getEffectiveFeatureMapWrapperInterface());
if (isMapType()) return getGenModel().getImportedName(getEffectiveMapType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()));
if (isMapEntryType())
if (isListType())
if (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50) return getGenModel().getImportedName(getEffectiveListType());
else return getGenModel().getImportedName(getEffectiveListType() + "<" + getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()) + ">");
else return getGenModel().getImportedName(getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()));
if (isListType()) return getGenModel().getImportedName(getEffectiveListType(context, getEcoreTypedElement().getEGenericType()));
if (isEObjectType()) return getGenModel().getImportedName(getEffectiveEObjectType());
if (isListDataType() && getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
return getGenModel().getImportedName("java.util.List") + "<" + getImportedType(context, getListDataType().getEcoreDataType(), true) + ">";
}
return getImportedType(context, getEcoreTypedElement().getEGenericType(), false);
}
@Deprecated
public String getObjectType()
{
return getObjectType(getContext());
}
public String getObjectType(GenClass context)
{
if (isFeatureMapType()) return getGenModel().getImportedName(getEffectiveFeatureMapWrapperInterface());
if (isMapType()) return getGenModel().getImportedName(getEffectiveMapType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()));
if (isMapEntryType())
if (isListType())
if (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50) return getGenModel().getImportedName(getEffectiveListType());
else return getGenModel().getImportedName(getEffectiveListType() + "<" + getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()) + ">");
else return getGenModel().getImportedName(getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()));
if (isListType()) return getGenModel().getImportedName(getEffectiveListType(context, getEcoreTypedElement().getEGenericType()));
if (isEObjectType()) return getGenModel().getImportedName(getEffectiveEObjectType());
if (isListDataType() && getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
return getGenModel().getImportedName("java.util.List") + "<" + getImportedType(context, getListDataType().getEcoreDataType(), true) + ">";
}
return getImportedType(context, getEcoreTypedElement().getEGenericType(), true);
}
public String getQualifiedObjectType(GenClass context)
{
if (isFeatureMapType()) return getEffectiveFeatureMapWrapperInterface();
if (isMapType()) return getEffectiveMapType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass());
if (isMapEntryType())
if (isListType())
if (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50) return getEffectiveListType();
else return getEffectiveListType() + "<" + /*x*/getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()) + ">";
else return getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass());
if (isListType()) return getEffectiveListType(context, getEcoreTypedElement().getEGenericType());
if (isEObjectType()) return getEffectiveEObjectType();
if (isListDataType() && getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
return "java.util.List<" + getType(context, getListDataType().getEcoreDataType(), true) + ">";
}
return getType(context, getEcoreTypedElement().getEGenericType(), true);
}
@Deprecated
public String getImportedInternalType()
{
return getImportedInternalType(getContext());
}
public String getImportedInternalType(GenClass context)
{
if (isFeatureMapType())
return
isBlank(getGenModel().getFeatureMapWrapperInternalInterface()) ?
getImportedEffectiveFeatureMapWrapperClass() :
getImportedEffectiveFeatureMapWrapperInternalInterface();
if (isMapType()) return getGenModel().getImportedName("org.eclipse.emf.common.util.EMap") + getImportedMapTemplateArguments(context);
if (isMapEntryType())
if (isListType())
if (getEffectiveComplianceLevel().getValue() < GenJDKLevel.JDK50) return getGenModel().getImportedName("org.eclipse.emf.common.util.EList");
else return getGenModel().getImportedName("org.eclipse.emf.common.util.EList") + "<" + getGenModel().getImportedName("java.util.Map$Entry") + getImportedMapTemplateArguments(context) + ">";
else return getGenModel().getImportedName("java.util.Map$Entry") + getImportedMapTemplateArguments(context);
if (isListType()) return getGenModel().getImportedName("org.eclipse.emf.common.util.EList") + getListTemplateArguments(context);
if (isListDataType() && getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
return getGenModel().getImportedName("java.util.List") + "<" + getImportedType(context, getListDataType().getEcoreDataType(), true) + ">";
}
return getImportedType(context, getEcoreTypedElement().getEGenericType(), false);
}
public boolean isFeatureMapType()
{
EClassifier type = getEcoreTypedElement().getEType();
return type != null && isFeatureMapEntry(getEcoreTypedElement().getEType().getInstanceClassName());
}
protected static boolean isFeatureMapEntry(String name)
{
return "org.eclipse.emf.ecore.util.FeatureMap.Entry".equals(name) || "org.eclipse.emf.ecore.util.FeatureMap$Entry".equals(name);
}
public boolean isWrappedFeatureMapType()
{
return
isFeatureMapType() &&
!isBlank(getGenModel().getFeatureMapWrapperInterface()) &&
!isBlank(getGenModel().getFeatureMapWrapperClass());
}
/**
* @deprecated As of EMF 2.1, replaced by {@link #isWrappedFeatureMapType}.
*/
@Deprecated
public boolean isFeatureMapWrapped()
{
return isWrappedFeatureMapType();
}
@Override
public GenJDKLevel getEffectiveComplianceLevel()
{
return super.getEffectiveComplianceLevel();
}
@Override
public boolean isEffectiveSuppressEMFTypes()
{
return super.isEffectiveSuppressEMFTypes();
}
@Override
public String getImportedEffectiveFeatureMapWrapperInternalInterface()
{
return super.getImportedEffectiveFeatureMapWrapperInternalInterface();
}
@Override
public String getImportedEffectiveFeatureMapWrapperClass()
{
return super.getImportedEffectiveFeatureMapWrapperClass();
}
public boolean isListType()
{
ETypedElement eTypedElement = getEcoreTypedElement();
return
eTypedElement != null &&
(eTypedElement.isMany() ||
isFeatureMapType() ||
eTypedElement.getUpperBound() == ETypedElement.UNSPECIFIED_MULTIPLICITY &&
eTypedElement instanceof EStructuralFeature &&
XMLTypePackage.eNS_URI.equals(getExtendedMetaData().getNamespace((EStructuralFeature)eTypedElement)));
}
public boolean isListDataType()
{
GenDataType genDataType = getTypeGenDataType();
return genDataType != null && ((GenDataTypeImpl)genDataType).getEffectiveItemType() != null;
}
public GenDataType getListDataType()
{
GenDataType genDataType = getTypeGenDataType();
return genDataType == null ? null : ((GenDataTypeImpl)genDataType).getEffectiveItemType();
}
public String getListTemplateArguments(GenClass context)
{
return getEffectiveComplianceLevel().getValue() <= GenJDKLevel.JDK14 ? "" : "<" + getListItemType(context) + ">";
}
@Deprecated
public String getListItemType()
{
return getListItemType(getContext());
}
public String getListItemType(GenClass context)
{
if (isMapEntryType()) return getGenModel().getImportedName(getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()));
return getImportedType(context, getEcoreTypedElement().getEGenericType(), true);
}
public String getRawListItemType()
{
return getImportedType(getContext(), getEcoreTypedElement().getEType(), true, true);
}
public String getRawListItemType(GenClass context)
{
return getGenModel().useGenerics() ? getTypeArgument(context, getEcoreTypedElement().getEGenericType(), true, true) : getImportedType(context, getEcoreTypedElement().getEType(), true, true);
}
public String getArrayItemType(GenClass context)
{
if (getGenModel().useGenerics())
{
EGenericType eGenericType = getEcoreTypedElement().getEGenericType();
eGenericType = EcoreUtil.getReifiedType(context.getEcoreClass(), eGenericType);
ETypeParameter eTypeParameter = eGenericType.getETypeParameter();
if (eTypeParameter != null)
{
EList<EGenericType> eBounds = eTypeParameter.getEBounds();
if (eBounds.isEmpty())
{
return getImportedType(context, eGenericType.getERawType(), true, true);
}
else
{
return getTypeArgument(context, eBounds.get(0), true, false);
}
}
else
{
return getTypeArgument(context, eGenericType, true, false);
}
}
else
{
return getRawListItemType(null);
}
}
@Deprecated
public String getQualifiedListItemType()
{
return getQualifiedListItemType(getContext());
}
public String getQualifiedListItemType(GenClass context)
{
if (isMapEntryType()) return getEffectiveMapEntryType(context, getEcoreTypedElement().getEGenericType(), getMapEntryTypeGenClass()).replace('$', '.');
return getType(context, getEcoreTypedElement().getEGenericType(), true).replace('$', '.');
}
public boolean isMapType()
{
return isListType() && getMapGenClass() != null;
}
public boolean isMapEntryType()
{
return getMapEntryTypeGenClass() != null;
}
public GenClass getMapEntryTypeGenClass()
{
EClassifier eType = getEcoreTypedElement().getEType();
if (eType instanceof EClass && isJavaUtilMapEntry(eType.getInstanceClassName()))
{
GenClass genClass = findGenClass((EClass)eType);
if (genClass.isMapEntry())
{
return genClass;
}
}
return null;
}
public String getImportedMapEntryType()
{
GenClass genClass = getMapEntryTypeGenClass();
return genClass == null ? null : genClass.getImportedClassName();
}
public String getImportedMapKeyType(GenClass context)
{
EGenericType eGenericType = getEcoreTypedElement().getEGenericType();
if (eGenericType.getETypeArguments().size() == 2)
{
return getTypeArgument(context,eGenericType.getETypeArguments().get(0), true, false);
}
else
{
GenClass genClass = getMapEntryTypeGenClass();
return genClass == null ? null : genClass.getMapEntryKeyFeature().getImportedType(context);
}
}
public String getImportedMapValueType(GenClass context)
{
EGenericType eGenericType = getEcoreTypedElement().getEGenericType();
if (eGenericType.getETypeArguments().size() == 2)
{
return getTypeArgument(context,eGenericType.getETypeArguments().get(1), true, false);
}
else
{
GenClass genClass = getMapEntryTypeGenClass();
return genClass == null ? null : genClass.getMapEntryValueFeature().getImportedType(context);
}
}
public String getImportedMapTemplateArguments(GenClass context)
{
return
getEffectiveComplianceLevel().getValue() <= GenJDKLevel.JDK14 ?
"" :
"<" + getImportedMapKeyType(context) + ", " + getImportedMapValueType(context) + ">";
}
/**
* @deprecated As of EMF 2.1, replaced by {@link #getMapEntryTypeGenClass}.
*/
@Deprecated
public GenClass getMapGenClass()
{
return getMapEntryTypeGenClass();
}
/**
* @deprecated As of EMF 2.1, replaced by {@link #getImportedMapEntryType}.
*/
@Deprecated
public String getMapItemType()
{
return getImportedMapEntryType();
}
protected boolean isEObjectType()
{
if (getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
EGenericType eGenericType = getEcoreTypedElement().getEGenericType();
if (eGenericType.getETypeParameter() != null)
{
return false;
}
}
EClassifier type = getEcoreTypedElement().getEType();
GenClassifier genClassifier = findGenClassifier(type);
return genClassifier instanceof GenClass && ((GenClass)genClassifier).isEObject();
}
protected boolean hasEObjectBound(ETypeParameter eTypeParameter)
{
for (EGenericType eBound : eTypeParameter.getEBounds())
{
if (eBound.getETypeParameter() != null && hasEObjectExtensionBound(eBound.getETypeParameter()) ||
eBound.getEClassifier() instanceof EClass && findGenClass((EClass)eBound.getEClassifier()).isEObject())
{
return true;
}
}
return false;
}
protected boolean isEObjectExtensionType()
{
if (getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50)
{
EGenericType eGenericType = getEcoreTypedElement().getEGenericType();
if (eGenericType.getETypeParameter() != null)
{
return hasEObjectExtensionBound(eGenericType.getETypeParameter());
}
}
EClassifier type = getEcoreTypedElement().getEType();
return type instanceof EClass && findGenClass((EClass)type).isEObjectExtension();
}
protected boolean hasEObjectExtensionBound(ETypeParameter eTypeParameter)
{
for (EGenericType eBound : eTypeParameter.getEBounds())
{
if (eBound.getETypeParameter() != null ?
hasEObjectExtensionBound(eBound.getETypeParameter()) :
eBound.getEClassifier() instanceof EClass && findGenClass((EClass)eBound.getEClassifier()).isEObjectExtension())
{
return true;
}
}
return false;
}
public boolean isUncheckedCast()
{
return isUncheckedCast(getContext());
}
public boolean isUncheckedCast(GenClass context)
{
GenClassifier type = getTypeGenClassifier();
if (type != null && type.isUncheckedCast())
{
return true;
}
if (isListType() || isListDataType() || isMapEntryType())
{
return true;
}
EGenericType actualEGenericType = getEcoreTypedElement().getEGenericType();
if (actualEGenericType == null)
{
return false;
}
String substitutedType = getTypeArgument(context, actualEGenericType, false, false);
Diagnostic diagnostic = EcoreValidator.EGenericTypeBuilder.INSTANCE.parseInstanceTypeName(substitutedType);
EGenericType eGenericType = (EGenericType)diagnostic.getData().get(0);
if (eGenericType != null)
{
// Type parameter casts can't be checked.
//
if (eGenericType.getETypeParameter() != null)
{
return true;
}
else
{
EClassifier eClassifier = eGenericType.getEClassifier();
if (eClassifier != null)
{
String instanceTypeName = eClassifier.getInstanceTypeName();
if (instanceTypeName != null)
{
int index = instanceTypeName.indexOf('[');
if (index != -1)
{
instanceTypeName = instanceTypeName.substring(0, index);
}
if (instanceTypeName.indexOf('.') == -1 && !CodeGenUtil.isJavaPrimitiveType(instanceTypeName))
{
return true;
}
}
// If there are any arguments and they are not unbounded wildcards, casts can't be checked.
//
for (EGenericType eTypeArgument : eGenericType.getETypeArguments())
{
if (eTypeArgument.getETypeParameter() != null ||
eTypeArgument.getEClassifier() != null ||
eTypeArgument.getEUpperBound() != null ||
eTypeArgument.getELowerBound() != null)
{
return true;
}
}
}
}
}
return false;
}
public String getEObjectCast()
{
return !isEObjectExtensionType() || (isEObjectType() && isEffectiveSuppressEMFTypes()) ?
"(" + getGenModel().getImportedName("org.eclipse.emf.ecore.EObject") + ")" : "";
}
public String getInternalTypeCast()
{
return isEObjectType() && isEffectiveSuppressEMFTypes() ?
"(" + getGenModel().getImportedName("org.eclipse.emf.ecore.EObject") + ")" : "";
}
@Deprecated
public String getNonEObjectInternalTypeCast()
{
return getNonEObjectInternalTypeCast(getContext());
}
public String getNonEObjectInternalTypeCast(GenClass context)
{
return isEObjectType() ? "" : "(" + getImportedInternalType(context) + ")";
}
public String getRawTypeCast()
{
return getType(null).equals(getRawType()) ? "" : "(" + getImportedType(null) + ")";
}
public boolean isPrimitiveType()
{
return !isListType() && isPrimitiveType(getEcoreTypedElement().getEType());
}
public String getPrimitiveValueFunction()
{
Class<?> instanceClass = getInstanceClass(getEcoreTypedElement().getEType());
if (instanceClass == java.lang.Boolean.TYPE)
return "booleanValue";
if (instanceClass == java.lang.Byte.TYPE)
return "byteValue";
if (instanceClass == java.lang.Character.TYPE)
return "charValue";
if (instanceClass == java.lang.Double.TYPE)
return "doubleValue";
if (instanceClass == java.lang.Float.TYPE)
return "floatValue";
if (instanceClass == java.lang.Integer.TYPE)
return "intValue";
if (instanceClass == java.lang.Long.TYPE)
return "longValue";
if (instanceClass == java.lang.Short.TYPE)
return "shortValue";
return null;
}
public boolean isBooleanType()
{
return isPrimitiveType() && getInstanceClass(getEcoreTypedElement().getEType()) == java.lang.Boolean.TYPE;
}
public boolean isStringType()
{
return !isListType() && getInstanceClass(getEcoreTypedElement().getEType()) == java.lang.String.class;
}
// Like isStringType(), but still returns true even if multiplicity-many.
//
public boolean isStringBasedType()
{
return getInstanceClass(getEcoreTypedElement().getEType()) == java.lang.String.class;
}
public boolean isEnumType()
{
return !isListType() && getEcoreTypedElement().getEType() instanceof EEnum;
}
public boolean isEnumBasedType()
{
return getEcoreTypedElement().getEType() instanceof EEnum;
}
public GenEnum getTypeGenEnum()
{
EClassifier eType = getEcoreTypedElement().getEType();
return eType instanceof EEnum ? findGenEnum((EEnum)eType) : null;
}
public GenDataType getTypeGenDataType()
{
EClassifier eType = getEcoreTypedElement().getEType();
return eType instanceof EDataType ? findGenDataType((EDataType)eType) : null;
}
public GenClass getTypeGenClass()
{
EClassifier eType = getEcoreTypedElement().getEType();
return eType instanceof EClass ? findGenClass((EClass)eType) : null;
}
public GenClassifier getTypeGenClassifier()
{
EClassifier eType = getEcoreTypedElement().getEType();
return eType == null ? null : findGenClassifier(eType);
}
/**
* @deprecated As of EMF 2.1, replaced by {@link #getTypeGenEnum}.
*/
@Deprecated
public GenEnum getGenEnumType()
{
return getTypeGenEnum();
}
/**
* @deprecated As of EMF 2.1, replaced by {@link #getTypeGenDataType}.
*/
@Deprecated
public GenDataType getGenDataTypeType()
{
return getTypeGenDataType();
}
/**
* @deprecated As of EMF 2.1, replaced by {@link #getTypeGenClass}.
*/
@Deprecated
public GenClass getGenClassType()
{
return getTypeGenClass();
}
public String getLowerBound()
{
return String.valueOf(getEcoreTypedElement().getLowerBound());
}
public String getUpperBound()
{
return String.valueOf(getEcoreTypedElement().getUpperBound());
}
public boolean isUnique()
{
return getEcoreTypedElement().isUnique();
}
public String getUniqueFlag()
{
String result = !isUnique() ? "!" : "";
return result + "IS_UNIQUE";
}
public String getOrderedFlag()
{
String result = !getEcoreTypedElement().isOrdered() ? "!" : "";
return result + "IS_ORDERED";
}
protected void appendModelSetting(StringBuffer result, boolean qualified, String name, String value)
{
appendModelSetting(result, qualified ? getEcoreTypedElement().getName() : null, name, value);
}
protected String getMapModelInfo(boolean qualified, boolean includeFeatures)
{
GenClass mapGenClass = getMapEntryTypeGenClass();
if (mapGenClass != null)
{
StringBuffer result = new StringBuffer();
GenFeature keyFeature = mapGenClass.getMapEntryKeyFeature();
GenFeature valueFeature = mapGenClass.getMapEntryValueFeature();
String mapType = mapGenClass.getGenPackage().getInterfacePackageName() + '.' + mapGenClass.getEcoreClass().getName();
boolean useGenerics = getEffectiveComplianceLevel().getValue() >= GenJDKLevel.JDK50;
if (useGenerics)
{
mapType +=
'<' +
getEcoreType(keyFeature.getEcoreFeature().getEGenericType()) + ", " +
getEcoreType(valueFeature.getEcoreFeature().getEGenericType()) + '>';
}
appendModelSetting(result, qualified, "mapType", mapType);
if (includeFeatures && !useGenerics)
{
appendModelSetting(result, qualified, "keyType", getType(getContext(), keyFeature.getEcoreFeature().getEType(), false));
appendModelSetting(result, qualified, "valueType", getType(getContext(), valueFeature.getEcoreFeature().getEType(), false));
}
return result.toString();
}
return null;
}
protected String getMultiplicityModelInfo(boolean qualified)
{
ETypedElement eTypedElement = getEcoreTypedElement();
StringBuffer result = new StringBuffer();
int lowerBound = eTypedElement.getLowerBound();
if (lowerBound == 1)
{
appendModelSetting(result, qualified, "required", "true");
}
else if (lowerBound > 1)
{
appendModelSetting(result, qualified, "lower", Integer.toString(lowerBound));
}
int upperBound = eTypedElement.getUpperBound();
if (upperBound > 1 || upperBound < -1)
{
appendModelSetting(result, qualified, "upper", Integer.toString(eTypedElement.getUpperBound()));
}
else if (upperBound == 1)
{
String typeName = getType(getContext(), eTypedElement.getEType(), false);
if ("org.eclipse.emf.common.util.EList".equals(typeName) || "java.util.List".equals(typeName) || "org.eclipse.emf.ecore.util.FeatureMap$Entry".equals(typeName))
{
appendModelSetting(result, qualified, "many", "false");
}
}
else if ((qualified || isFeatureMapType()) && upperBound == -1)
{
appendModelSetting(result, qualified, "many", "true");
}
return result.toString();
}
} //GenTypedElementImpl