[104715] Need a way to test if ANY feature is set.
diff --git a/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/FeatureValueProvider.java b/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/FeatureValueProvider.java index 65cc224..db48f22 100644 --- a/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/FeatureValueProvider.java +++ b/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/FeatureValueProvider.java
@@ -11,7 +11,7 @@ package org.eclipse.jem.internal.instantiation.base; /* * $RCSfile: FeatureValueProvider.java,v $ - * $Revision: 1.6 $ $Date: 2005/05/20 21:02:33 $ + * $Revision: 1.7 $ $Date: 2005/07/21 19:01:37 $ */ import java.util.Iterator; @@ -66,6 +66,33 @@ } } + /** + * Answers whether any feature is set or not. + * <p> + * <b>Note:</b> This SHOULD NOT be used as a test before deciding whether to do visitSetFeatures or not. It is more efficient to just call + * visitSetFeatures. It should be used only to see if any features are set. + * + * @param eobject + * @return + * + * @since 1.1.0 + */ + public static boolean isAnyFeatureSet(EObject eobject) { + if (eobject instanceof FeatureValueProvider) + return ((FeatureValueProvider)eobject).isAnyFeatureSet(); + else { + // Not a FeatureValueProvider, so do normal. + Iterator features = eobject.eClass().getEAllStructuralFeatures().iterator(); + while(features.hasNext()){ + EStructuralFeature sf = (EStructuralFeature)features.next(); + if(eobject.eIsSet(sf)){ + return true; + } + } + return false; + } + } + private FeatureValueProviderHelper() { } } @@ -94,4 +121,16 @@ * @since 1.1.0 */ public Object visitSetFeatures(Visitor aVisitor); + + /** + * Answers whether any feature is set or not. + * <p> + * <b>Note:</b> This SHOULD NOT be used as a test before deciding whether to do visitSetFeatures or not. It is + * more efficient to just call visitSetFeatures. It should be used only to see if any features are set. + * + * @return <code>true</code> if any features are set. + * + * @since 1.1.0 + */ + public boolean isAnyFeatureSet(); }
diff --git a/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/JavaObjectInstance.java b/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/JavaObjectInstance.java index a61dab2..fa1a01f 100644 --- a/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/JavaObjectInstance.java +++ b/plugins/org.eclipse.jem/javainst/org/eclipse/jem/internal/instantiation/base/JavaObjectInstance.java
@@ -11,7 +11,7 @@ package org.eclipse.jem.internal.instantiation.base; /* * $RCSfile: JavaObjectInstance.java,v $ - * $Revision: 1.16 $ $Date: 2005/06/20 18:48:56 $ + * $Revision: 1.17 $ $Date: 2005/07/21 19:01:37 $ */ import java.util.List; @@ -66,6 +66,23 @@ } return result; } + + public boolean isAnyFeatureSet() { + if (eHasSettings()) { + JavaObjectInstancePropertiesHolder settings = (JavaObjectInstancePropertiesHolder) eProperties(); + + Object[] setPropertyValues = settings.eSettings(); + if (setPropertyValues != null) { + for (int i = 0; i < setPropertyValues.length; i++) { + Object propertyValue = setPropertyValues[i]; + if (propertyValue != null) { + return true; + } + } + } + } + return false; + } public boolean isSetAllocation() { return eIsSet(JavaInstantiation.getAllocationFeature(this));