Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgmendel2005-02-09 19:04:05 +0000
committergmendel2005-02-09 19:04:05 +0000
commit912f2831e82aca732a26b218ed49890b88245be0 (patch)
treeb3ee6ca3ae704018020d4ac9186bc92eda4bc967 /plugins
parentdaf0ac822d5823b3b40f0cacaab31c9ef7546044 (diff)
downloadwebtools.javaee-912f2831e82aca732a26b218ed49890b88245be0.tar.gz
webtools.javaee-912f2831e82aca732a26b218ed49890b88245be0.tar.xz
webtools.javaee-912f2831e82aca732a26b218ed49890b88245be0.zip
84728 [perf] JavaMethodJDOMAdaptor.addParameters triggers massive reads of JRE's src.zip
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.jem.workbench/workbench/org/eclipse/jem/internal/adapters/jdom/JavaMethodJDOMAdaptor.java36
-rw-r--r--plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/IJavaMethodAdapter.java10
-rw-r--r--plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/JavaReflectionAdaptor.java5
-rw-r--r--plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/jdk/JavaMethodJDKAdaptor.java6
-rw-r--r--plugins/org.eclipse.jem/mofjava/org/eclipse/jem/java/impl/JavaParameterImpl.java52
5 files changed, 95 insertions, 14 deletions
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 2fb3ad118..221813beb 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.8 $ $Date: 2005/02/08 23:20:27 $
+ * $Revision: 1.9 $ $Date: 2005/02/09 19:04:05 $
*/
package org.eclipse.jem.internal.adapters.jdom;
@@ -89,11 +89,9 @@ public class JavaMethodJDOMAdaptor extends JDOMAdaptor implements IJavaMethodAda
// name stays null and we carry on
}
}
-
- /**
- * addParameters - reflect our parms
- */
- protected void addParameters() {
+
+
+ protected String[] getParameterNames() {
String[] parmNames = new String[0], parmTypeNames = getSourceMethod().getParameterTypes();
try {
parmNames = getSourceMethod().getParameterNames();
@@ -106,11 +104,19 @@ public class JavaMethodJDOMAdaptor extends JDOMAdaptor implements IJavaMethodAda
for (int i = 0; i < parmTypeNames.length; i++) {
parmNames[i] = "arg" + i;//$NON-NLS-1$
}
- }
+ }
+ return parmNames;
+ }
+
+ /**
+ * addParameters - reflect our parms
+ */
+ protected void addParameters() {
+ String[] parmTypeNames = getSourceMethod().getParameterTypes();
MethodImpl javaMethodTarget = (MethodImpl) getTarget();
List params = javaMethodTarget.getParametersGen();
- for (int i = 0; i < parmNames.length; i++) {
- params.add(createJavaParameter(javaMethodTarget, parmNames[i], typeNameFromSignature(parmTypeNames[i])));
+ for (int i = 0; i < parmTypeNames.length; i++) {
+ params.add(createJavaParameter(javaMethodTarget, null, typeNameFromSignature(parmTypeNames[i])));
}
}
@@ -272,6 +278,18 @@ public class JavaMethodJDOMAdaptor extends JDOMAdaptor implements IJavaMethodAda
}
return false;
}
+
+ public boolean reflectParamNamesIfNecessary() {
+ if (reflectValuesIfNecessary()) {
+ String [] paramNames = getParameterNames();
+ List param = ((MethodImpl)getTarget()).getParameters();
+ for (int i = 0; i < paramNames.length; i++) {
+ ((JavaParameter)param.get(i)).setName(paramNames[i]);
+ }
+ return true;
+ }
+ return false;
+ }
/**
* setModifiers - set the attribute values related to modifiers here
*/
diff --git a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/IJavaMethodAdapter.java b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/IJavaMethodAdapter.java
index 99c01edc3..2d8a1c97f 100644
--- a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/IJavaMethodAdapter.java
+++ b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/internal/java/adapters/IJavaMethodAdapter.java
@@ -10,7 +10,7 @@
*******************************************************************************/
/*
* $RCSfile: IJavaMethodAdapter.java,v $
- * $Revision: 1.1 $ $Date: 2005/02/03 21:19:40 $
+ * $Revision: 1.2 $ $Date: 2005/02/09 19:04:04 $
*/
package org.eclipse.jem.internal.java.adapters;
@@ -28,4 +28,12 @@ public interface IJavaMethodAdapter {
* @since 1.0.0
*/
public boolean reflectGeneratedIfNecessary();
+
+ /**
+ * Reflect the names of the method parameters if necessary.
+ * @return <code>true</code> if reflection occurred.
+ *
+ * @since 1.0.0
+ */
+ public boolean reflectParamNamesIfNecessary();
}
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 81164ad8a..10ae526ef 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 @@
package org.eclipse.jem.internal.java.adapters;
/*
* $RCSfile: JavaReflectionAdaptor.java,v $
- * $Revision: 1.9 $ $Date: 2005/02/04 23:11:33 $
+ * $Revision: 1.10 $ $Date: 2005/02/09 19:04:04 $
*/
import java.util.List;
@@ -94,7 +94,8 @@ public JavaClass createJavaClassRef(String targetName) {
*/
public JavaParameter createJavaParameter(Method parentMethod, String parmName, String parmTypeName) {
JavaParameter newParm = getJavaFactory().createJavaParameter();
- newParm.setName(parmName);
+ if (parmName!=null)
+ newParm.setName(parmName);
// ((InternalEObject)newParm).eSetID(parentMethod.eID() + C_METHODID_PARMID_DELIMITER + parmName);
String classRefString = parmTypeName;
newParm.setEType(createJavaClassRef(classRefString));
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 9a8f5b547..2be991c3b 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 @@
package org.eclipse.jem.internal.java.adapters.jdk;
/*
* $RCSfile: JavaMethodJDKAdaptor.java,v $
- * $Revision: 1.5 $ $Date: 2005/02/03 21:19:40 $
+ * $Revision: 1.6 $ $Date: 2005/02/09 19:04:04 $
*/
import java.util.List;
@@ -184,6 +184,10 @@ public class JavaMethodJDKAdaptor extends JDKAdaptor implements IJavaMethodAdapt
return reflectValuesIfNecessary();
}
+ public boolean reflectParamNamesIfNecessary() {
+ return reflectValuesIfNecessary();
+ }
+
/**
* setModifiers - set the attribute values related to modifiers here
*/
diff --git a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/java/impl/JavaParameterImpl.java b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/java/impl/JavaParameterImpl.java
index 956d37796..a54d0a4f4 100644
--- a/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/java/impl/JavaParameterImpl.java
+++ b/plugins/org.eclipse.jem/mofjava/org/eclipse/jem/java/impl/JavaParameterImpl.java
@@ -12,7 +12,7 @@ package org.eclipse.jem.java.impl;
/*
* $RCSfile: JavaParameterImpl.java,v $
- * $Revision: 1.4 $ $Date: 2004/08/27 15:33:17 $
+ * $Revision: 1.5 $ $Date: 2005/02/09 19:04:04 $
*/
import java.util.Collection;
@@ -26,9 +26,12 @@ import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EParameterImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.jem.internal.java.adapters.IJavaMethodAdapter;
+import org.eclipse.jem.internal.java.adapters.ReadAdaptor;
import org.eclipse.jem.java.JavaHelpers;
import org.eclipse.jem.java.JavaParameter;
import org.eclipse.jem.java.JavaParameterKind;
@@ -141,6 +144,53 @@ public class JavaParameterImpl extends EParameterImpl implements JavaParameter{
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JavaRefPackage.JAVA_PARAMETER__PARAMETER_KIND, oldParameterKind, parameterKind));
}
+
+ /*
+ * This is not meant to be used outside of the reflection adapters.
+ */
+ public synchronized ReadAdaptor getReadAdapter() {
+ return (ReadAdaptor) EcoreUtil.getRegisteredAdapter(eContainer(), ReadAdaptor.TYPE_KEY);
+ }
+
+ private static final int REFLECTED_BASE = 0x1, REFLECTED_PARAM_NAME = 0x2;
+
+ protected int reflectionStatus = REFLECTED_BASE; // At this time base reflection
+ // is performed at creation.
+
+ protected void reflectParamName() {
+ // We only want the testing of the hasReflected and get readadapter to be sync(this) so that
+ // it is short and no deadlock possibility (this is because the the method reflection adapter may go
+ // back to the containing java class to get its reflection adapter, which would lock on itself. So
+ // we need to keep the sections that are sync(this) to not be deadlockable by not doing significant work
+ // during the sync.
+ ReadAdaptor readAdaptor = null;
+ synchronized (this) {
+ if ((reflectionStatus & REFLECTED_PARAM_NAME) == 0) {
+ readAdaptor = getReadAdapter();
+ }
+ }
+ if (readAdaptor != null) {
+ boolean setReflected = ((IJavaMethodAdapter) readAdaptor).reflectParamNamesIfNecessary();
+ synchronized (this) {
+ // Don't want to set it false. That is job of reflection adapter. Otherwise we could have a race.
+ if (setReflected)
+ reflectionStatus |= (REFLECTED_PARAM_NAME); // We can be certain base will be done by reflect generated if not already
+ // done.
+ }
+ }
+ }
+
+ public String getName() {
+ reflectParamName();
+ return super.getName();
+ }
+
+ public void setName(String name) {
+ super.setName(name);
+ synchronized (this) {
+ reflectionStatus |= (REFLECTED_PARAM_NAME);
+ }
+ }
/**
* @generated This field/method will be replaced during code generation.

Back to the top