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