[205841] Innerclasses not resolving properly
diff --git a/plugins/org.eclipse.jst.j2ee.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.j2ee.core/META-INF/MANIFEST.MF
index ac4420e..6dc914b 100644
--- a/plugins/org.eclipse.jst.j2ee.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.j2ee.core/META-INF/MANIFEST.MF
@@ -107,6 +107,8 @@
com.ibm.icu;bundle-version="[3.4.4,4.0.0)",
org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
org.eclipse.wst.xml.core;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.modulecore
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.jdt.core,
+ org.eclipse.wst.common.emfworkbench.integration
Eclipse-LazyStart: true
Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/EnterpriseBeanImpl.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/EnterpriseBeanImpl.java
index d875425..0f5c914 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/EnterpriseBeanImpl.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/EnterpriseBeanImpl.java
@@ -146,9 +146,9 @@
for (int i = 0; i < size; i++) {
signature = (String) signatures.get(i);
me = (MethodElement) getEjbFactory().create((EClass)getEjbPackage().getEClassifier(meTypeName));
- me.initializeFromSignature(signature);
me.setEnterpriseBean(this);
me.setType((MethodElementKind)aType);
+ me.initializeFromSignature(signature);
methodElements.add(me);
}
return methodElements;
diff --git a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/MethodElementImpl.java b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/MethodElementImpl.java
index e85627d..5618a9a 100644
--- a/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/MethodElementImpl.java
+++ b/plugins/org.eclipse.jst.j2ee.core/mofj2ee/org/eclipse/jst/j2ee/ejb/internal/impl/MethodElementImpl.java
@@ -16,6 +16,7 @@
import java.util.Iterator;
import java.util.List;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.common.util.EList;
@@ -25,10 +26,20 @@
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
import org.eclipse.emf.ecore.util.InternalEList;
import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.search.IJavaSearchConstants;
+import org.eclipse.jdt.core.search.IJavaSearchScope;
+import org.eclipse.jdt.core.search.SearchEngine;
+import org.eclipse.jdt.core.search.SearchPattern;
+import org.eclipse.jdt.core.search.TypeNameRequestor;
import org.eclipse.jem.java.JavaClass;
import org.eclipse.jem.java.JavaHelpers;
import org.eclipse.jem.java.JavaParameter;
import org.eclipse.jem.java.Method;
+import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.jst.j2ee.common.Description;
import org.eclipse.jst.j2ee.common.internal.impl.J2EEEObjectImpl;
import org.eclipse.jst.j2ee.ejb.EjbPackage;
@@ -37,6 +48,7 @@
import org.eclipse.jst.j2ee.ejb.MethodElementKind;
import org.eclipse.jst.j2ee.ejb.Session;
import org.eclipse.jst.j2ee.ejb.internal.util.MethodElementHelper;
+import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
import com.ibm.icu.util.StringTokenizer;
@@ -635,46 +647,92 @@
}
return true;
}
-/**
- * Parse @aSignature setting the name and the params.
- * A signature example: setTwoParamMethod(java.lang.String, java.lang.String)
- */
-protected void parseSignature(String aSignature) {
- int index = aSignature.indexOf(RIGHT_PAREN);
+ /**
+ * Parse @aSignature setting the name and the params.
+ * A signature example: setTwoParamMethod(java.lang.String, java.lang.String)
+ */
+ protected void parseSignature(String aSignature) {
+ int index = aSignature.indexOf(RIGHT_PAREN);
- int endIndex = aSignature.indexOf(LEFT_PAREN);
- if (endIndex < 0)
- {
- endIndex = aSignature.length() - 1;
- }
+ int endIndex = aSignature.indexOf(LEFT_PAREN);
+ if (endIndex < 0) {
+ endIndex = aSignature.length() - 1;
+ }
- if (index < 0){
- setName(aSignature);
- setParms(null); //There are no parameters in the sig so set to null
- }
- else {
- String sigName = aSignature.substring(0, index);
+ if (index < 0) {
+ setName(aSignature);
+ setParms(null); // There are no parameters in the sig so set to null
+ } else {
+ String sigName = aSignature.substring(0, index);
- setName(sigName);
- String sigParms = aSignature.substring(index + 1, endIndex);
+ setName(sigName);
+ String sigParms = aSignature.substring(index + 1, endIndex);
- if (sigParms.length() > 0) {
- char commaChar = COMMA.charAt(0);
- char[] sigParmsChars = sigParms.toCharArray();
- StringBuffer buf = new StringBuffer();
- for (int i = 0; i < sigParmsChars.length; i++) {
- if (sigParmsChars[i] != commaChar) {
- buf.append(sigParmsChars[i]);
- } else {
- addMethodParams(buf.toString());
- buf = new StringBuffer();
+ if (sigParms.lastIndexOf(".") != -1) { //$NON-NLS-1$
+ String testParent = sigParms.substring(0, sigParms.lastIndexOf(".")); //$NON-NLS-1$
+ if (!Character.isLowerCase(testParent.substring(testParent.lastIndexOf(".") + 1, testParent.length()).charAt(0))) { //$NON-NLS-1$
+ class MyTypeNameRequestor extends TypeNameRequestor {
+ boolean isNested = false;
+
+ public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
+ isNested = true;
+ }
+
+ public boolean isNested() {
+ return isNested;
+ }
+ }
+ IJavaProject javaProject = JavaCore.create(WorkbenchResourceHelper.getProject(getEnterpriseBean().eResource()));
+ IJavaElement javaElements[] = new IJavaElement[] { javaProject };
+ final IJavaSearchScope scope = SearchEngine.createJavaSearchScope(javaElements, true);
+
+ String newString = sigParms.substring(sigParms.lastIndexOf(".") + 1, sigParms.length()); //$NON-NLS-1$
+
+ while (testParent.length() > 0) {
+ String temp = null;
+ temp = testParent.substring(testParent.lastIndexOf(".") + 1, testParent.length()); //$NON-NLS-1$
+
+ MyTypeNameRequestor requestor = new MyTypeNameRequestor();
+ int matchMode = SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE;
+ try {
+ new SearchEngine().searchAllTypeNames(null, matchMode, temp.toCharArray(), matchMode, IJavaSearchConstants.TYPE, scope, requestor,
+ IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor());
+ if (requestor.isNested()) {
+ newString = temp + "$" + newString; //$NON-NLS-1$
+ } else {
+ newString = temp + "." + newString; //$NON-NLS-1$
+ }
+ if (testParent.lastIndexOf(".") != -1) //$NON-NLS-1$
+ testParent = testParent.substring(0, testParent.lastIndexOf(".")); //$NON-NLS-1$
+ else
+ testParent = ""; //$NON-NLS-1$
+
+ } catch (JavaModelException e) {
+ Logger.getLogger().logError(e);
+ }
+ }
+ sigParms = newString;
}
+
}
- addMethodParams(buf.toString());
- } else
- applyZeroParams();
+
+ if (sigParms.length() > 0) {
+ char commaChar = COMMA.charAt(0);
+ char[] sigParmsChars = sigParms.toCharArray();
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < sigParmsChars.length; i++) {
+ if (sigParmsChars[i] != commaChar) {
+ buf.append(sigParmsChars[i]);
+ } else {
+ addMethodParams(buf.toString());
+ buf = new StringBuffer();
+ }
+ }
+ addMethodParams(buf.toString());
+ } else
+ applyZeroParams();
+ }
}
-}
public void removeMethodParams(String param) {
String myParams = getParms();
if (myParams == null || myParams.length() == 0) {