68175 - Prevent reflection when flushing the cache - fix from Dan Berg's group
diff --git a/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaClassJDOMAdaptor.java b/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaClassJDOMAdaptor.java
index 2bceb0f..d3952f3 100644
--- a/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaClassJDOMAdaptor.java
+++ b/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaClassJDOMAdaptor.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaClassJDOMAdaptor.java,v $
- *  $Revision: 1.7 $  $Date: 2004/06/16 20:49:23 $ 
+ *  $Revision: 1.8 $  $Date: 2004/06/22 17:55:17 $ 
  */
 
 import java.util.*;
@@ -318,6 +318,13 @@
 	public Object getReflectionSource() {
 		return getSourceType();
 	}
+	
+    /* (non-Javadoc)
+     * @see org.eclipse.jem.internal.java.adapters.JavaReflectionAdaptor#hasReflectionSource()
+     */
+    public boolean hasCachedReflectionSource() {
+        return sourceType != null;
+    }
 	/**
 	 * getSourceType - return the IType which describes our existing Java class or source file
 	 */
diff --git a/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaFieldJDOMAdaptor.java b/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaFieldJDOMAdaptor.java
index c68c085..681aeae 100644
--- a/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaFieldJDOMAdaptor.java
+++ b/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaFieldJDOMAdaptor.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaFieldJDOMAdaptor.java,v $
- *  $Revision: 1.3 $  $Date: 2004/06/16 20:49:23 $ 
+ *  $Revision: 1.4 $  $Date: 2004/06/22 17:55:17 $ 
  */
 import java.util.Map;
 
@@ -170,6 +170,13 @@
 		return getSourceField();
 	}
 	
+    /* (non-Javadoc)
+     * @see org.eclipse.jem.internal.java.adapters.JavaReflectionAdaptor#hasReflectionSource()
+     */
+    public boolean hasCachedReflectionSource() {
+        return sourceField != null;
+    }
+	
 	/*
 	 * Used by Java Class JDOM adapter to create and set with a source field
 	 */	
diff --git a/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaMethodJDOMAdaptor.java b/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaMethodJDOMAdaptor.java
index 3f8b6ee..c2ab2f5 100644
--- a/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaMethodJDOMAdaptor.java
+++ b/plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaMethodJDOMAdaptor.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaMethodJDOMAdaptor.java,v $
- *  $Revision: 1.3 $  $Date: 2004/06/16 20:49:23 $ 
+ *  $Revision: 1.4 $  $Date: 2004/06/22 17:55:17 $ 
  */
 package org.eclipse.jem.internal.adapters.jdom;
 
@@ -155,6 +155,13 @@
 	public Object getReflectionSource() {
 		return getSourceMethod();
 	}
+	
+    /* (non-Javadoc)
+     * @see org.eclipse.jem.internal.java.adapters.JavaReflectionAdaptor#hasReflectionSource()
+     */
+    public boolean hasCachedReflectionSource() {
+        return sourceMethod != null;
+    }
 
 	/*
 	 * Used by Java Class JDOM adapter to create and set with a source method/
diff --git a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaArrayTypeReflectionAdapter.java b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaArrayTypeReflectionAdapter.java
index 7adf6db..55a6f74 100644
--- a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaArrayTypeReflectionAdapter.java
+++ b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaArrayTypeReflectionAdapter.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaArrayTypeReflectionAdapter.java,v $
- *  $Revision: 1.2 $  $Date: 2004/06/16 20:49:21 $ 
+ *  $Revision: 1.3 $  $Date: 2004/06/22 17:55:19 $ 
  */
 package org.eclipse.jem.internal.java.adapters;
 
@@ -18,8 +18,12 @@
 
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.jem.java.*;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jem.java.ArrayType;
+import org.eclipse.jem.java.InheritanceCycleException;
+import org.eclipse.jem.java.JavaClass;
+import org.eclipse.jem.java.JavaHelpers;
+import org.eclipse.jem.java.JavaRefFactory;
 import org.eclipse.jem.java.impl.ArrayTypeImpl;
 
 /**
@@ -54,6 +58,17 @@
 		JavaHelpers fc = jh.getFinalComponentType();
 		return (fc.isPrimitive() || ((JavaClass) fc).isExistingType());
 	}
+	
+	public boolean hasCachedReflectionSource() {
+		ArrayType jh = (ArrayType) getTarget();
+		JavaHelpers fc = jh.getFinalComponentType();
+		if(fc.isPrimitive())
+		    return true;
+		else {
+		    JavaReflectionAdaptor reflectionAdaptor = (JavaReflectionAdaptor) EcoreUtil.getExistingAdapter(((JavaClass)fc), ReflectionAdaptor.TYPE_KEY);
+		    return (reflectionAdaptor != null) ? reflectionAdaptor.hasCachedReflectionSource() : false;		    
+		} 
+	}
 
 	/*
 	 * (non-Javadoc)
diff --git a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaReflectionAdaptor.java b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaReflectionAdaptor.java
index 1cf0176..eda3a88 100644
--- a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaReflectionAdaptor.java
+++ b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaReflectionAdaptor.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaReflectionAdaptor.java,v $
- *  $Revision: 1.5 $  $Date: 2004/06/16 20:49:21 $ 
+ *  $Revision: 1.6 $  $Date: 2004/06/22 17:55:19 $ 
  */
 import java.util.List;
 
@@ -148,8 +148,10 @@
 	} while ((pos = methodID.indexOf(C_PARM_PARM_DELIMITER, ++pos)) != -1);
 	return parmTypeNames;
 }
+public abstract boolean hasCachedReflectionSource();
+
 public boolean hasReflectionSource() {
-	return (getReflectionSource() != null);
+    return getReflectionSource() != null;
 }
 
 /**
@@ -198,7 +200,7 @@
 
 public synchronized Notification flushReflectedValuesIfNecessaryNoNotification(boolean clearCachedModelObject) {
 	if (!hasFlushed && !isFlushing) {
-		boolean isExisting = hasReflectionSource();
+		boolean isExisting = hasCachedReflectionSource();
 		try {
 			isFlushing = true;
 			hasReflected = false;
diff --git a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaClassJDKAdaptor.java b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaClassJDKAdaptor.java
index 8d53c3e..24656bc 100644
--- a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaClassJDKAdaptor.java
+++ b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaClassJDKAdaptor.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaClassJDKAdaptor.java,v $
- *  $Revision: 1.6 $  $Date: 2004/06/16 20:49:21 $ 
+ *  $Revision: 1.7 $  $Date: 2004/06/22 17:55:19 $ 
  */
 
 package org.eclipse.jem.internal.java.adapters.jdk;
@@ -181,6 +181,12 @@
 	public Object getReflectionSource() {
 		return getSourceType();
 	}
+    /* (non-Javadoc)
+     * @see org.eclipse.jem.internal.java.adapters.JavaReflectionAdaptor#hasReflectionSource()
+     */
+    public boolean hasCachedReflectionSource() {
+        return sourceType != null;
+    }
 
 	/**
 	 * getSourceType - return the java.lang.Class which describes our existing Java class
diff --git a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaFieldJDKAdaptor.java b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaFieldJDKAdaptor.java
index 16f3188..76c0e4b 100644
--- a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaFieldJDKAdaptor.java
+++ b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaFieldJDKAdaptor.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaFieldJDKAdaptor.java,v $
- *  $Revision: 1.2 $  $Date: 2004/01/13 16:16:21 $ 
+ *  $Revision: 1.3 $  $Date: 2004/06/22 17:55:19 $ 
  */
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.ecore.EObject;
@@ -46,6 +46,13 @@
 	public Object getReflectionSource() {
 		return getSourceField();
 	}
+	
+    /* (non-Javadoc)
+     * @see org.eclipse.jem.internal.java.adapters.JavaReflectionAdaptor#hasReflectionSource()
+     */
+    public boolean hasCachedReflectionSource() {
+        return sourceField != null;
+    }
 	/**
 	 * getSourceField - return the java.lang.reflect.Field which describes our implementing field
 	 */
diff --git a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaMethodJDKAdaptor.java b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaMethodJDKAdaptor.java
index f3af811..7058b8d 100644
--- a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaMethodJDKAdaptor.java
+++ b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaMethodJDKAdaptor.java
@@ -11,7 +11,7 @@
  *******************************************************************************/
 /*
  *  $RCSfile: JavaMethodJDKAdaptor.java,v $
- *  $Revision: 1.2 $  $Date: 2004/01/13 16:16:21 $ 
+ *  $Revision: 1.3 $  $Date: 2004/06/22 17:55:19 $ 
  */
 
 import java.util.List;
@@ -111,6 +111,13 @@
 	public Object getReflectionSource() {
 		return getSourceAccessible();
 	}
+	
+    /* (non-Javadoc)
+     * @see org.eclipse.jem.internal.java.adapters.JavaReflectionAdaptor#hasReflectionSource()
+     */
+    public boolean hasCachedReflectionSource() { 
+        return sourceAccessible != null;
+    }
 	/**
 	 * getsourceMethod - return the java.lang.reflect.Method which describes our implementing method
 	 */