/** * 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