Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 114643 Details for
Bug 232880
[select] Navigate to classes in workspace even if not on classpath
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix
bug232880_005.txt (text/plain), 40.05 KB, created by
David Audel
on 2008-10-09 04:38:44 EDT
(
hide
)
Description:
Proposed fix
Filename:
MIME Type:
Creator:
David Audel
Created:
2008-10-09 04:38:44 EDT
Size:
40.05 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: model/org/eclipse/jdt/internal/core/SelectionRequestor.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SelectionRequestor.java,v >retrieving revision 1.77 >diff -u -r1.77 SelectionRequestor.java >--- model/org/eclipse/jdt/internal/core/SelectionRequestor.java 27 Jun 2008 16:03:51 -0000 1.77 >+++ model/org/eclipse/jdt/internal/core/SelectionRequestor.java 9 Oct 2008 08:30:12 -0000 >@@ -211,6 +211,28 @@ > } > } > /** >+ * Resolve the type. >+ */ >+public void acceptType(IType type) { >+ String key = type.getKey(); >+ if(type.isBinary()) { >+ ResolvedBinaryType resolvedType = new ResolvedBinaryType((JavaElement)type.getParent(), type.getElementName(), key); >+ resolvedType.occurrenceCount = type.getOccurrenceCount(); >+ type = resolvedType; >+ } else { >+ ResolvedSourceType resolvedType = new ResolvedSourceType((JavaElement)type.getParent(), type.getElementName(), key); >+ resolvedType.occurrenceCount = type.getOccurrenceCount(); >+ type = resolvedType; >+ } >+ >+ addElement(type); >+ if(SelectionEngine.DEBUG){ >+ System.out.print("SELECTION - accept type("); //$NON-NLS-1$ >+ System.out.print(type.toString()); >+ System.out.println(")"); //$NON-NLS-1$ >+ } >+} >+/** > * @see ISelectionRequestor#acceptError > */ > public void acceptError(CategorizedProblem error) { >Index: model/org/eclipse/jdt/internal/core/Openable.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Openable.java,v >retrieving revision 1.118 >diff -u -r1.118 Openable.java >--- model/org/eclipse/jdt/internal/core/Openable.java 27 Jun 2008 16:03:51 -0000 1.118 >+++ model/org/eclipse/jdt/internal/core/Openable.java 9 Oct 2008 08:30:12 -0000 >@@ -157,7 +157,7 @@ > } > > // fix for 1FVXGDK >- SelectionEngine engine = new SelectionEngine(environment, requestor, project.getOptions(true)); >+ SelectionEngine engine = new SelectionEngine(environment, requestor, project.getOptions(true), owner); > engine.select(cu, offset, offset + length - 1); > > if(performanceStats != null) { >Index: model/org/eclipse/jdt/internal/core/NamedMember.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NamedMember.java,v >retrieving revision 1.21 >diff -u -r1.21 NamedMember.java >--- model/org/eclipse/jdt/internal/core/NamedMember.java 27 Jun 2008 16:03:51 -0000 1.21 >+++ model/org/eclipse/jdt/internal/core/NamedMember.java 9 Oct 2008 08:30:12 -0000 >@@ -287,7 +287,7 @@ > } > TypeResolveRequestor requestor = new TypeResolveRequestor(); > SelectionEngine engine = >- new SelectionEngine(environment, requestor, project.getOptions(true)); >+ new SelectionEngine(environment, requestor, project.getOptions(true), owner); > > engine.selectType(typeName.toCharArray(), (IType) this); > if (NameLookup.VERBOSE) { >Index: model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java,v >retrieving revision 1.59 >diff -u -r1.59 EvaluationContextWrapper.java >--- model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java 27 Jun 2008 16:04:14 -0000 1.59 >+++ model/org/eclipse/jdt/internal/core/eval/EvaluationContextWrapper.java 9 Oct 2008 08:30:12 -0000 >@@ -132,7 +132,8 @@ > offset + length - 1, > environment, > requestor, >- this.project.getOptions(true) >+ this.project.getOptions(true), >+ owner > ); > return requestor.getElements(); > } >Index: codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java,v >retrieving revision 1.148 >diff -u -r1.148 SelectionEngine.java >--- codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java 27 Jun 2008 16:04:05 -0000 1.148 >+++ codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java 9 Oct 2008 08:30:11 -0000 >@@ -14,11 +14,18 @@ > import java.util.Map; > > import org.eclipse.core.resources.IFile; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.OperationCanceledException; > import org.eclipse.jdt.core.IType; > import org.eclipse.jdt.core.JavaModelException; > import org.eclipse.jdt.core.Signature; >+import org.eclipse.jdt.core.WorkingCopyOwner; > import org.eclipse.jdt.core.compiler.*; > import org.eclipse.jdt.core.search.IJavaSearchConstants; >+import org.eclipse.jdt.core.search.IJavaSearchScope; >+import org.eclipse.jdt.core.search.SearchPattern; >+import org.eclipse.jdt.core.search.TypeNameMatch; >+import org.eclipse.jdt.core.search.TypeNameMatchRequestor; > import org.eclipse.jdt.internal.codeassist.impl.*; > import org.eclipse.jdt.internal.codeassist.select.*; > import org.eclipse.jdt.internal.compiler.*; >@@ -29,12 +36,17 @@ > import org.eclipse.jdt.internal.compiler.lookup.*; > import org.eclipse.jdt.internal.compiler.parser.*; > import org.eclipse.jdt.internal.compiler.problem.*; >+import org.eclipse.jdt.internal.compiler.util.HashtableOfObject; >+import org.eclipse.jdt.internal.compiler.util.ObjectVector; > import org.eclipse.jdt.internal.core.BinaryTypeConverter; > import org.eclipse.jdt.internal.core.ClassFile; >+import org.eclipse.jdt.internal.core.JavaModelManager; > import org.eclipse.jdt.internal.core.SearchableEnvironment; > import org.eclipse.jdt.internal.core.SelectionRequestor; > import org.eclipse.jdt.internal.core.SourceType; > import org.eclipse.jdt.internal.core.SourceTypeElementInfo; >+import org.eclipse.jdt.internal.core.search.BasicSearchEngine; >+import org.eclipse.jdt.internal.core.search.TypeNameMatchRequestorWrapper; > import org.eclipse.jdt.internal.core.util.ASTNodeFinder; > import org.eclipse.jdt.internal.core.util.HashSetOfCharArrayArray; > >@@ -48,12 +60,126 @@ > * performed instead. > */ > public final class SelectionEngine extends Engine implements ISearchRequestor { >+ >+ private class SelectionTypeNameMatchRequestorWrapper extends TypeNameMatchRequestorWrapper { >+ >+ class AcceptedType { >+ public int modifiers; >+ public char[] packageName; >+ public char[] simpleTypeName; >+ public String path; >+ public AccessRestriction access; >+ >+ public AcceptedType(int modifiers, char[] packageName, char[] simpleTypeName, String path, AccessRestriction access) { >+ this.modifiers = modifiers; >+ this.packageName = packageName; >+ this.simpleTypeName = simpleTypeName; >+ this.path = path; >+ this.access = access; >+ } >+ } >+ >+ private ImportReference[] importReferences; >+ >+ private boolean importCachesNodeInitialized = false; >+ private ImportReference[] onDemandImportsNodeCache; >+ private int onDemandImportsNodeCacheCount; >+ private char[][][] importsNodeCache; >+ private int importsNodeCacheCount; >+ >+ private HashtableOfObject onDemandFound = new HashtableOfObject(); >+ private ObjectVector notImportedFound = new ObjectVector(); >+ >+ public SelectionTypeNameMatchRequestorWrapper(TypeNameMatchRequestor requestor, IJavaSearchScope scope, ImportReference[] importReferences) { >+ super(requestor, scope); >+ this.importReferences = importReferences; >+ } >+ >+ public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) { >+ if (enclosingTypeNames != null && enclosingTypeNames.length > 0) return; >+ >+ if (!this.importCachesNodeInitialized) initializeImportNodeCaches(); >+ >+ char[] fullyQualifiedTypeName = CharOperation.concat(packageName, simpleTypeName, '.'); >+ >+ for (int i = 0; i < this.importsNodeCacheCount; i++) { >+ char[][] importName = this.importsNodeCache[i]; >+ if (CharOperation.equals(importName[0], simpleTypeName)) { >+ >+ if(CharOperation.equals(importName[1], fullyQualifiedTypeName)) { >+ super.acceptType(modifiers, packageName, simpleTypeName, enclosingTypeNames, path, access); >+ } >+ return; >+ } >+ } >+ >+ for (int i = 0; i < this.onDemandImportsNodeCacheCount; i++) { >+ char[][] importName = this.onDemandImportsNodeCache[i].tokens; >+ char[] importFlatName = CharOperation.concatWith(importName, '.'); >+ >+ if (CharOperation.equals(importFlatName, packageName)) { >+ >+ this.onDemandFound.put(simpleTypeName, simpleTypeName); >+ super.acceptType(modifiers, packageName, simpleTypeName, enclosingTypeNames, path, access); >+ return; >+ } >+ } >+ >+ >+ this.notImportedFound.add(new AcceptedType(modifiers, packageName, simpleTypeName, path, access)); >+ } >+ >+ public void acceptNotImported() { >+ int size = this.notImportedFound.size(); >+ for (int i = 0; i < size; i++) { >+ AcceptedType acceptedType = (AcceptedType)this.notImportedFound.elementAt(i); >+ >+ if (this.onDemandFound.get(acceptedType.simpleTypeName) == null) { >+ super.acceptType( >+ acceptedType.modifiers, >+ acceptedType.packageName, >+ acceptedType.simpleTypeName, >+ null, >+ acceptedType.path, >+ acceptedType.access); >+ } >+ } >+ } >+ >+ public void initializeImportNodeCaches() { >+ int length = this.importReferences == null ? 0 : this.importReferences.length; >+ >+ for (int i = 0; i < length; i++) { >+ ImportReference importReference = this.importReferences[i]; >+ if((importReference.bits & ASTNode.OnDemand) != 0) { >+ if(this.onDemandImportsNodeCache == null) { >+ this.onDemandImportsNodeCache = new ImportReference[length - i]; >+ } >+ this.onDemandImportsNodeCache[this.onDemandImportsNodeCacheCount++] = >+ importReference; >+ } else { >+ if(this.importsNodeCache == null) { >+ this.importsNodeCache = new char[length - i][][]; >+ } >+ >+ >+ this.importsNodeCache[this.importsNodeCacheCount++] = new char[][]{ >+ importReference.tokens[importReference.tokens.length - 1], >+ CharOperation.concatWith(importReference.tokens, '.') >+ }; >+ } >+ } >+ >+ this.importCachesNodeInitialized = true; >+ } >+ } > > public static boolean DEBUG = false; > public static boolean PERF = false; > > SelectionParser parser; > ISelectionRequestor requestor; >+ WorkingCopyOwner owner; > > boolean acceptedAnswer; > >@@ -97,7 +223,8 @@ > public SelectionEngine( > SearchableEnvironment nameEnvironment, > ISelectionRequestor requestor, >- Map settings) { >+ Map settings, >+ WorkingCopyOwner owner) { > > super(settings); > >@@ -140,6 +267,7 @@ > this.lookupEnvironment = > new LookupEnvironment(this, this.compilerOptions, problemReporter, nameEnvironment); > this.parser = new SelectionParser(problemReporter); >+ this.owner = owner; > } > > public void acceptType(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, int modifiers, AccessRestriction accessRestriction) { >@@ -557,6 +685,74 @@ > > return false; > } >+ >+ /* >+ * find all types outside the project scope >+ */ >+ private void findAllTypes(char[] prefix) { >+ try { >+ IProgressMonitor progressMonitor = new IProgressMonitor() { >+ boolean isCanceled = false; >+ public void beginTask(String name, int totalWork) { >+ // implements interface method >+ } >+ public void done() { >+ // implements interface method >+ } >+ public void internalWorked(double work) { >+ // implements interface method >+ } >+ public boolean isCanceled() { >+ return this.isCanceled; >+ } >+ public void setCanceled(boolean value) { >+ this.isCanceled = value; >+ } >+ public void setTaskName(String name) { >+ // implements interface method >+ } >+ public void subTask(String name) { >+ // implements interface method >+ } >+ public void worked(int work) { >+ // implements interface method >+ } >+ }; >+ >+ TypeNameMatchRequestor typeNameMatchRequestor = new TypeNameMatchRequestor() { >+ public void acceptTypeNameMatch(TypeNameMatch match) { >+ if (SelectionEngine.this.requestor instanceof SelectionRequestor) { >+ SelectionEngine.this.noProposal = false; >+ ((SelectionRequestor)SelectionEngine.this.requestor).acceptType(match.getType()); >+ } >+ } >+ }; >+ >+ IJavaSearchScope scope = BasicSearchEngine.createWorkspaceScope(); >+ >+ SelectionTypeNameMatchRequestorWrapper requestorWrapper = new SelectionTypeNameMatchRequestorWrapper(typeNameMatchRequestor, scope, this.unitScope.referenceContext.imports); >+ >+ org.eclipse.jdt.core.ICompilationUnit[] workingCopies = this.owner == null ? null : JavaModelManager.getJavaModelManager().getWorkingCopies(this.owner, true/*add primary WCs*/); >+ >+ try { >+ new BasicSearchEngine(workingCopies).searchAllTypeNames( >+ null, >+ SearchPattern.R_EXACT_MATCH, >+ CharOperation.toLowerCase(prefix), >+ SearchPattern.R_EXACT_MATCH, >+ IJavaSearchConstants.TYPE, >+ scope, >+ requestorWrapper, >+ IJavaSearchConstants.CANCEL_IF_NOT_READY_TO_SEARCH, >+ progressMonitor); >+ } catch (OperationCanceledException e) { >+ // do nothing >+ } >+ requestorWrapper.acceptNotImported(); >+ } catch (JavaModelException e) { >+ // do nothing >+ } >+ } > > public AssistParser getParser() { > return this.parser; >@@ -688,7 +884,11 @@ > if ((this.unitScope = parsedUnit.scope) != null) { > try { > this.lookupEnvironment.completeTypeBindings(parsedUnit, true); >+ >+ CompilationUnitDeclaration previousUnitBeingCompleted = this.lookupEnvironment.unitBeingCompleted; >+ this.lookupEnvironment.unitBeingCompleted = parsedUnit; > parsedUnit.scope.faultInTypes(); >+ this.lookupEnvironment.unitBeingCompleted = previousUnitBeingCompleted; > ASTNode node = null; > if (parsedUnit.types != null) > node = parseBlockStatements(parsedUnit, selectionSourceStart); >@@ -721,6 +921,11 @@ > // accept qualified types only if no unqualified type was accepted > if(!this.acceptedAnswer) { > acceptQualifiedTypes(); >+ >+ // accept types from all the workspace only if no type was found in the project scope >+ if (this.noProposal) { >+ findAllTypes(this.selectedIdentifier); >+ } > } > } > if(this.noProposal && this.problem != null) { >Index: eval/org/eclipse/jdt/internal/eval/EvaluationContext.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/eval/org/eclipse/jdt/internal/eval/EvaluationContext.java,v >retrieving revision 1.61 >diff -u -r1.61 EvaluationContext.java >--- eval/org/eclipse/jdt/internal/eval/EvaluationContext.java 25 Sep 2008 10:58:38 -0000 1.61 >+++ eval/org/eclipse/jdt/internal/eval/EvaluationContext.java 9 Oct 2008 08:30:11 -0000 >@@ -566,7 +566,8 @@ > int selectionSourceEnd, > SearchableEnvironment environment, > ISelectionRequestor requestor, >- Map options) { >+ Map options, >+ WorkingCopyOwner owner) { > > final char[] className = "CodeSnippetSelection".toCharArray(); //$NON-NLS-1$ > final CodeSnippetToCuMapper mapper = new CodeSnippetToCuMapper( >@@ -595,7 +596,7 @@ > return null; > } > }; >- SelectionEngine engine = new SelectionEngine(environment, mapper.getSelectionRequestor(requestor), options); >+ SelectionEngine engine = new SelectionEngine(environment, mapper.getSelectionRequestor(requestor), options, owner); > engine.select(sourceUnit, mapper.startPosOffset + selectionSourceStart, mapper.startPosOffset + selectionSourceEnd); > } > /** >#P org.eclipse.jdt.core.tests.model >Index: src/org/eclipse/jdt/core/tests/model/ResolveTests2.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests2.java,v >retrieving revision 1.2 >diff -u -r1.2 ResolveTests2.java >--- src/org/eclipse/jdt/core/tests/model/ResolveTests2.java 27 Jun 2008 16:02:40 -0000 1.2 >+++ src/org/eclipse/jdt/core/tests/model/ResolveTests2.java 9 Oct 2008 08:30:13 -0000 >@@ -10,8 +10,11 @@ > *******************************************************************************/ > package org.eclipse.jdt.core.tests.model; > >-import org.eclipse.jdt.core.*; >+import java.io.File; >+import java.util.HashMap; > >+import org.eclipse.jdt.core.*; >+import org.eclipse.jdt.core.tests.util.Util; > import junit.framework.*; > > public class ResolveTests2 extends ModifyingResourceTests { >@@ -68,7 +71,7 @@ > > assertElementsEqual( > "Unexpected elements", >- "", >+ "Object [in Object.class [in java.lang [in "+ getExternalJCLPathString() + "]]]", // Object is found in another project with Object on his classpath > elements > ); > } finally { >@@ -192,4 +195,745 @@ > this.deleteProject("P1"); > } > } >+ >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880a() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}" //$NON-NLS-1$ >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test2;\n" + //$NON-NLS-1$ >+ "import test1.IResource;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test2/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar1, externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test2"); >+ this.createFile( >+ "/PS1/attachment/test2/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test2", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.class [in test1 [in "+outputDirectory + File.separator+"bug232880a.jar]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ } >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880b() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}" //$NON-NLS-1$ >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test2;\n" + //$NON-NLS-1$ >+ "import test1.IResource;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test2/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test2"); >+ this.createFile( >+ "/PS1/attachment/test2/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test2", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ } >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880c() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}" //$NON-NLS-1$ >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test2;\n" + //$NON-NLS-1$ >+ "import test1.IResource;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test2/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test2"); >+ this.createFile( >+ "/PS1/attachment/test2/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ // create P2 >+ this.createJavaProject( >+ "PS2", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar1}, >+ "bin"); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test2", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.class [in test1 [in "+outputDirectory+File.separator+"bug232880a.jar]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ refreshExternalArchives(getJavaProject("PS2")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ this.deleteProject("PS2"); >+ } >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880d() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ String source1 = >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ source1 >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test2;\n" + //$NON-NLS-1$ >+ "import test1.IResource;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test2/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test2"); >+ this.createFile( >+ "/PS1/attachment/test2/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ // create P2 >+ this.createJavaProject( >+ "PS2", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB"}, >+ "bin"); >+ >+ this.createFolder("/PS2/src/test1"); >+ this.createFile( >+ "/PS2/src/test1/IResource.java", >+ source1); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test2", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.java [in test1 [in src [in PS2]]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ refreshExternalArchives(getJavaProject("PS2")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ this.deleteProject("PS2"); >+ } >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880e() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ String source1_1 = >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class CoreException extends Exception {\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ String source1_2 = >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test1/CoreException.java", //$NON-NLS-1$ >+ source1_1, >+ "test1/IResource.java", //$NON-NLS-1$ >+ source1_2 >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2_1 = >+ "package test2;\n" + //$NON-NLS-1$ >+ "import test1.CoreException;\n" + //$NON-NLS-1$ >+ "public class JavaModelException extends CoreException {\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ String source2_2 = >+ "package test2;\n" + //$NON-NLS-1$ >+ "import test1.IResource;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " void foo1() throws JavaModelException {}\n" + //$NON-NLS-1$ >+ " IResource foo2() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test2/JavaModelException.java", //$NON-NLS-1$ >+ source2_1, >+ "test2/IJavaElement.java", //$NON-NLS-1$ >+ source2_2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test2"); >+ this.createFile( >+ "/PS1/attachment/test2/IJavaElement.java", >+ source2_2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ // create P2 >+ this.createJavaProject( >+ "PS2", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB"}, >+ "bin"); >+ >+ this.createFolder("/PS2/src/test1"); >+ this.createFile( >+ "/PS2/src/test1/IResource.java", >+ source1_2); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test2", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.java [in test1 [in src [in PS2]]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ refreshExternalArchives(getJavaProject("PS2")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ this.deleteProject("PS2"); >+ } >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880f() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}", //$NON-NLS-1$ >+ "test2/IResource.java", //$NON-NLS-1$ >+ "package test2;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}" //$NON-NLS-1$ >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test3;\n" + //$NON-NLS-1$ >+ "import test2.IResource;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test3/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test3"); >+ this.createFile( >+ "/PS1/attachment/test3/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ // create P2 >+ this.createJavaProject( >+ "PS2", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar1}, >+ "bin"); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test3", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.class [in test2 [in "+outputDirectory+File.separator+"bug232880a.jar]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ refreshExternalArchives(getJavaProject("PS2")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ this.deleteProject("PS2"); >+ } >+} >+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880g() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}", //$NON-NLS-1$ >+ "test2/IResource.java", //$NON-NLS-1$ >+ "package test2;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}" //$NON-NLS-1$ >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test3;\n" + //$NON-NLS-1$ >+ "import test2.*;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test3/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test3"); >+ this.createFile( >+ "/PS1/attachment/test3/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ // create P2 >+ this.createJavaProject( >+ "PS2", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar1}, >+ "bin"); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test3", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.class [in test2 [in "+outputDirectory+File.separator+"bug232880a.jar]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ refreshExternalArchives(getJavaProject("PS2")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ this.deleteProject("PS2"); >+ } >+}//https://bugs.eclipse.org/bugs/show_bug.cgi?id=232880 >+public void testBug232880h() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}", //$NON-NLS-1$ >+ "test2/IResource.java", //$NON-NLS-1$ >+ "package test2;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}" //$NON-NLS-1$ >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test3;\n" + //$NON-NLS-1$ >+ "import test1.*;\n" + //$NON-NLS-1$ >+ "import test2.IResource;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test3/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test3"); >+ this.createFile( >+ "/PS1/attachment/test3/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ // create P2 >+ this.createJavaProject( >+ "PS2", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar1}, >+ "bin"); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test3", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.class [in test2 [in "+outputDirectory+File.separator+"bug232880a.jar]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ refreshExternalArchives(getJavaProject("PS2")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ this.deleteProject("PS2"); >+ } >+} >+public void testBug232880i() throws Exception { >+ String outputDirectory = Util.getOutputDirectory(); >+ String externalJar1 = outputDirectory + File.separator + "bug232880a.jar"; //$NON-NLS-1$ >+ String externalJar2 = outputDirectory + File.separator + "bug232880b.jar"; //$NON-NLS-1$ >+ try { >+ >+ // create external jar 1 >+ Util.createJar( >+ new String[] { >+ "test1/IResource.java", //$NON-NLS-1$ >+ "package test1;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}", //$NON-NLS-1$ >+ "test2/IResource.java", //$NON-NLS-1$ >+ "package test2;\n" + //$NON-NLS-1$ >+ "public class IResource {\n" + //$NON-NLS-1$ >+ "}" //$NON-NLS-1$ >+ }, >+ new HashMap(), >+ externalJar1); >+ >+ // create external jar 2 >+ String source2 = >+ "package test3;\n" + //$NON-NLS-1$ >+ "public class IJavaElement {\n" + //$NON-NLS-1$ >+ " test2.IResource foo() {return null;}\n" + //$NON-NLS-1$ >+ "}"; //$NON-NLS-1$ >+ >+ Util.createJar( >+ new String[] { >+ "test3/IJavaElement.java", //$NON-NLS-1$ >+ source2 >+ }, >+ null, >+ new HashMap(), >+ new String[]{externalJar1}, >+ externalJar2); >+ >+ // create P1 >+ IJavaProject project1 = this.createJavaProject( >+ "PS1", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar2}, >+ "bin"); >+ >+ this.createFolder("/PS1/attachment/test3"); >+ this.createFile( >+ "/PS1/attachment/test3/IJavaElement.java", >+ source2); >+ >+ IPackageFragmentRoot root = project1.getPackageFragmentRoot(externalJar2); >+ attachSource(root, "/PS1/attachment/", ""); >+ >+ // create P2 >+ this.createJavaProject( >+ "PS2", >+ new String[]{"src"}, >+ new String[]{"JCL_LIB", externalJar1}, >+ "bin"); >+ >+ waitUntilIndexesReady(); >+ >+ // do code select >+ IClassFile cf = getClassFile("PS1", externalJar2, "test3", "IJavaElement.class"); >+ >+ IJavaElement[] elements = codeSelect(cf, "IResource foo", "IResource"); >+ >+ assertElementsEqual( >+ "Unexpected elements", >+ "IResource [in IResource.class [in test1 [in "+outputDirectory+File.separator+"bug232880a.jar]]]\n" + >+ "IResource [in IResource.class [in test2 [in "+outputDirectory+File.separator+"bug232880a.jar]]]", >+ elements >+ ); >+ } finally { >+ this.deleteExternalFile(externalJar1); >+ this.deleteExternalFile(externalJar2); >+ refreshExternalArchives(getJavaProject("PS1")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ refreshExternalArchives(getJavaProject("PS2")); // workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=250083 >+ this.deleteProject("PS1"); >+ this.deleteProject("PS2"); >+ } >+} > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 232880
: 114643 |
114672