diff options
author | Eike Stepper | 2008-07-19 18:27:45 +0000 |
---|---|---|
committer | Eike Stepper | 2008-07-19 18:27:45 +0000 |
commit | aee8018368b33588062d596152fb7e7088ff17a9 (patch) | |
tree | d3d912db525d83ca654394ac1c7631a86fdf2f2c /plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util | |
parent | 0de3fe1ad1f75fcb990c764d8c3b25ae1f08e300 (diff) | |
download | cdo-aee8018368b33588062d596152fb7e7088ff17a9.tar.gz cdo-aee8018368b33588062d596152fb7e7088ff17a9.tar.xz cdo-aee8018368b33588062d596152fb7e7088ff17a9.zip |
Added null guards and optional ecore exclusion
Diffstat (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util')
-rw-r--r-- | plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CompletePackageClosure.java | 151 |
1 files changed, 99 insertions, 52 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CompletePackageClosure.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CompletePackageClosure.java index 865f0be639..d93fec4edc 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CompletePackageClosure.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/util/CompletePackageClosure.java @@ -23,6 +23,7 @@ import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EParameter; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.ETypeParameter; +import org.eclipse.emf.ecore.EcorePackage; import java.util.HashSet; import java.util.List; @@ -35,45 +36,63 @@ public class CompletePackageClosure extends PackageClosure { private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG_MODEL, CompletePackageClosure.class); + private boolean excludeEcore; + public CompletePackageClosure() { } + public CompletePackageClosure(boolean excludeEcore) + { + this.excludeEcore = excludeEcore; + } + @Override protected void collectContents(EPackage ePackage, Set<EPackage> visited) { - Set<EClass> classes = new HashSet<EClass>(); - List<EClassifier> classifiers = ePackage.getEClassifiers(); - for (EClassifier classifier : classifiers) + if (ePackage != null) { - handleEClassifier(classifier, classes); - } + if (excludeEcore && ePackage == EcorePackage.eINSTANCE) + { + return; + } - for (EClass eClass : classes) - { - final EPackage p = eClass.getEPackage(); - if (p != null) + Set<EClass> classes = new HashSet<EClass>(); + List<EClassifier> classifiers = ePackage.getEClassifiers(); + for (EClassifier classifier : classifiers) + { + handleEClassifier(classifier, classes); + } + + for (EClass eClass : classes) { - if (visited.add(p)) + final EPackage p = eClass.getEPackage(); + if (p != null) { - if (TRACER.isEnabled()) + if (visited.add(p)) { - TRACER.trace("Found package " + p.getNsURI()); + if (TRACER.isEnabled()) + { + TRACER.trace("Found package " + p.getNsURI()); + } } } - } - else - { - OM.LOG.warn("Package == null for " + eClass.getName()); + else + { + OM.LOG.warn("Package == null for " + eClass.getName()); + } } } } protected void handleEClassifiers(List<EClassifier> classifiers, Set<EClass> visited) { - for (EClassifier classifier : classifiers) + if (classifiers != null) { - handleEClassifier(classifier, visited); + for (EClassifier classifier : classifiers) + { + handleEClassifier(classifier, visited); + } } } @@ -87,87 +106,115 @@ public class CompletePackageClosure extends PackageClosure protected void handleEClasses(List<EClass> classes, Set<EClass> visited) { - for (EClass eClass : classes) + if (classes != null) { - handleEClass(eClass, visited); + for (EClass eClass : classes) + { + handleEClass(eClass, visited); + } } } protected void handleEClass(EClass eClass, Set<EClass> visited) { - if (visited.add(eClass)) + if (eClass != null) { - if (TRACER.isEnabled()) + if (visited.add(eClass)) { - TRACER.trace("Found class " + eClass.getName()); + if (TRACER.isEnabled()) + { + TRACER.trace("Found class " + eClass.getName()); + } + + handleEStructuralFeatures(eClass.getEStructuralFeatures(), visited); + handleEOperations(eClass.getEOperations(), visited); + handleEClasses(eClass.getESuperTypes(), visited); + handleEGenericTypes(eClass.getEGenericSuperTypes(), visited); + handleETypeParameters(eClass.getETypeParameters(), visited); } - handleEStructuralFeatures(eClass.getEStructuralFeatures(), visited); - handleEOperations(eClass.getEOperations(), visited); - handleEClasses(eClass.getESuperTypes(), visited); - handleEGenericTypes(eClass.getEGenericSuperTypes(), visited); - handleETypeParameters(eClass.getETypeParameters(), visited); } } protected void handleEStructuralFeatures(List<EStructuralFeature> structuralFeatures, Set<EClass> visited) { - for (EStructuralFeature structuralFeature : structuralFeatures) + if (structuralFeatures != null) { - handleEClassifier(structuralFeature.getEType(), visited); - handleEGenericType(structuralFeature.getEGenericType(), visited); + for (EStructuralFeature structuralFeature : structuralFeatures) + { + handleEClassifier(structuralFeature.getEType(), visited); + handleEGenericType(structuralFeature.getEGenericType(), visited); + } } } protected void handleEOperations(List<EOperation> operations, Set<EClass> visited) { - for (EOperation operation : operations) + if (operations != null) { - handleEClassifier(operation.getEType(), visited); - handleEGenericType(operation.getEGenericType(), visited); - handleETypeParameters(operation.getETypeParameters(), visited); - handleEParameters(operation.getEParameters(), visited); - handleEClassifiers(operation.getEExceptions(), visited); - handleEGenericTypes(operation.getEGenericExceptions(), visited); + for (EOperation operation : operations) + { + handleEClassifier(operation.getEType(), visited); + handleEGenericType(operation.getEGenericType(), visited); + handleETypeParameters(operation.getETypeParameters(), visited); + handleEParameters(operation.getEParameters(), visited); + handleEClassifiers(operation.getEExceptions(), visited); + handleEGenericTypes(operation.getEGenericExceptions(), visited); + } } } protected void handleEParameters(List<EParameter> parameters, Set<EClass> visited) { - for (EParameter parameter : parameters) + if (parameters != null) { - handleEClassifier(parameter.getEType(), visited); - handleEGenericType(parameter.getEGenericType(), visited); + for (EParameter parameter : parameters) + { + handleEClassifier(parameter.getEType(), visited); + handleEGenericType(parameter.getEGenericType(), visited); + } } } protected void handleEGenericTypes(EList<EGenericType> genericTypes, Set<EClass> visited) { - for (EGenericType genericType : genericTypes) + if (genericTypes != null) { - handleEGenericType(genericType, visited); + for (EGenericType genericType : genericTypes) + { + handleEGenericType(genericType, visited); + } } } protected void handleEGenericType(EGenericType genericType, Set<EClass> visited) { - handleEClassifier(genericType.getEClassifier(), visited); - handleEClassifier(genericType.getERawType(), visited); - handleEGenericType(genericType.getELowerBound(), visited); - handleEGenericType(genericType.getEUpperBound(), visited); - handleEGenericTypes(genericType.getETypeArguments(), visited); - handleETypeParameter(genericType.getETypeParameter(), visited); + if (genericType != null) + { + handleEClassifier(genericType.getEClassifier(), visited); + handleEClassifier(genericType.getERawType(), visited); + handleEGenericType(genericType.getELowerBound(), visited); + handleEGenericType(genericType.getEUpperBound(), visited); + handleEGenericTypes(genericType.getETypeArguments(), visited); + handleETypeParameter(genericType.getETypeParameter(), visited); + } } protected void handleETypeParameters(EList<ETypeParameter> typeParameters, Set<EClass> visited) { - for (ETypeParameter typeParameter : typeParameters) + if (typeParameters != null) { - handleETypeParameter(typeParameter, visited); + for (ETypeParameter typeParameter : typeParameters) + { + handleETypeParameter(typeParameter, visited); + } } } protected void handleETypeParameter(ETypeParameter typeParameter, Set<EClass> visited) { - handleEGenericTypes(typeParameter.getEBounds(), visited); + if (typeParameter != null) + { + handleEGenericTypes(typeParameter.getEBounds(), visited); + } } } |