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 64600 Details for
Bug 183062
[search] OutOfMemoryError during rename refactoring
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch
v02.txt (text/plain), 18.35 KB, created by
Frederic Fusier
on 2007-04-23 07:52:53 EDT
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Frederic Fusier
Created:
2007-04-23 07:52:53 EDT
Size:
18.35 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core.tests.performance >Index: src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java,v >retrieving revision 1.31 >diff -u -r1.31 FullSourceWorkspaceSearchTests.java >--- src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java 20 Apr 2007 09:18:01 -0000 1.31 >+++ src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java 23 Apr 2007 11:38:59 -0000 >@@ -628,7 +628,7 @@ > /** > * Performance tests for search: Package Declarations. > */ >- public void testSearchPackageDeclarations() throws CoreException { >+ public void testONLY_SearchPackageDeclarations() throws CoreException { > tagAsSummary("Search package declarations", true); // put in fingerprint > > // Wait for indexing end >@@ -650,7 +650,9 @@ > cleanCategoryTableCache(false, scope, resultCollector); > runGc(); > startMeasuring(); >- search(name, PACKAGE, DECLARATIONS, scope, resultCollector); >+ // TODO (frederic) increase time for this test in next version as bug 183062 fix make its time around 2ms! >+// for (int j=0; j<20; j++) >+ search(name, PACKAGE, DECLARATIONS, scope, resultCollector); > stopMeasuring(); > } > >#P org.eclipse.jdt.core.tests.model >Index: src/org/eclipse/jdt/core/tests/model/JavaSearchTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchTests.java,v >retrieving revision 1.159 >diff -u -r1.159 JavaSearchTests.java >--- src/org/eclipse/jdt/core/tests/model/JavaSearchTests.java 6 Mar 2007 04:43:19 -0000 1.159 >+++ src/org/eclipse/jdt/core/tests/model/JavaSearchTests.java 23 Apr 2007 11:39:03 -0000 >@@ -453,10 +453,10 @@ > IPackageFragment pkg = getPackageFragment("JavaSearch", "src", "r7"); > JavaSearchResultCollector result = new JavaSearchResultCollector() { > public void beginReporting() { >- results.append("Starting search..."); >+ addLine("Starting search..."); > } > public void endReporting() { >- results.append("\nDone searching."); >+ addLine("Done searching."); > } > }; > searchDeclarationsOfReferencedTypes( >@@ -478,10 +478,10 @@ > ICompilationUnit cu = getCompilationUnit("JavaSearch15/src/p3/X.java"); > JavaSearchResultCollector result = new JavaSearchResultCollector() { > public void beginReporting() { >- results.append("Starting search..."); >+ addLine("Starting search..."); > } > public void endReporting() { >- results.append("\nDone searching."); >+ addLine("Done searching."); > } > }; > searchDeclarationsOfReferencedTypes( >@@ -1608,18 +1608,18 @@ > * Various package declarations test. > */ > public void testPackageDeclaration2() throws CoreException { // was testVariousPackageDeclarations >- >+ JavaSearchResultCollector packageCollector = new JavaSearchResultCollector(true); > search( > "p3*", > PACKAGE, > DECLARATIONS, > getJavaSearchScope(), >- this.resultCollector); >+ packageCollector); > assertSearchResults( > "src/p3 p3\n" + > "src/p3/p2 p3.p2\n" + > "src/p3/p2/p p3.p2.p", >- this.resultCollector); >+ packageCollector); > } > /** > * Package declaration test. >@@ -1651,10 +1651,7 @@ > System.arraycopy(originalCP, 0, newCP, 0, cpLength); > newCP[cpLength] = JavaCore.newLibraryEntry(new Path("/JavaSearch/corrupt.jar"), null, null); > project.setRawClasspath(newCP, null); >- >- >- search( >- "r9", >+ search("r9", > PACKAGE, > DECLARATIONS, > getJavaSearchScope(), >@@ -1705,6 +1702,84 @@ > } > } > } >+public void testPackageDeclarationBug183062a() throws CoreException { >+ JavaSearchResultCollector packageCollector = new JavaSearchResultCollector(true); >+ search("j?", >+ PACKAGE, >+ DECLARATIONS, >+ getJavaSearchScope(), >+ packageCollector); >+ assertSearchResults( >+ "src/j1 j1\n" + >+ "src/j2 j2\n" + >+ "src/j3 j3\n" + >+ "src/j4 j4\n" + >+ "src/j5 j5\n" + >+ "src/j6 j6\n" + >+ "src/j7 j7\n" + >+ "test47909.jar j3 [No source]", >+ packageCollector); >+} >+public void testPackageDeclarationBug183062b() throws CoreException { >+ JavaSearchResultCollector packageCollector = new JavaSearchResultCollector(true); >+ search("j*", >+ PACKAGE, >+ DECLARATIONS, >+ getJavaSearchScope(), >+ packageCollector); >+ assertSearchResults( >+ ""+ getExternalJCLPathString() + " java\n" + >+ ""+ getExternalJCLPathString() + " java.io\n" + >+ ""+ getExternalJCLPathString() + " java.lang\n" + >+ "src/j1 j1\n" + >+ "src/j2 j2\n" + >+ "src/j3 j3\n" + >+ "src/j4 j4\n" + >+ "src/j5 j5\n" + >+ "src/j6 j6\n" + >+ "src/j7 j7\n" + >+ "src/j7/qua j7.qua\n" + >+ "src/j7/qua/li j7.qua.li\n" + >+ "src/j7/qua/li/fied j7.qua.li.fied\n" + >+ "test47909.jar j3 [No source]", >+ packageCollector); >+} >+public void testPackageDeclarationBug183062c() throws CoreException { >+ JavaSearchResultCollector packageCollector = new JavaSearchResultCollector(true); >+ search("j7.*", >+ PACKAGE, >+ DECLARATIONS, >+ getJavaSearchScope(), >+ packageCollector); >+ assertSearchResults( >+ "src/j7/qua j7.qua\n" + >+ "src/j7/qua/li j7.qua.li\n" + >+ "src/j7/qua/li/fied j7.qua.li.fied", >+ packageCollector); >+} >+public void testPackageDeclarationBug183062d() throws CoreException { >+ JavaSearchResultCollector packageCollector = new JavaSearchResultCollector(true); >+ search("j7.*.*", >+ PACKAGE, >+ DECLARATIONS, >+ getJavaSearchScope(), >+ packageCollector); >+ assertSearchResults( >+ "src/j7/qua/li j7.qua.li\n" + >+ "src/j7/qua/li/fied j7.qua.li.fied", >+ packageCollector); >+} >+public void testPackageDeclarationBug183062e() throws CoreException { >+ JavaSearchResultCollector packageCollector = new JavaSearchResultCollector(true); >+ search("????.????", >+ PACKAGE, >+ DECLARATIONS, >+ getJavaSearchScope(), >+ packageCollector); >+ assertSearchResults( >+ ""+ getExternalJCLPathString() + " java.lang", >+ packageCollector); >+} > /** > * Package reference test. > * (regression test for PR 1GK90H4: ITPJCORE:WIN2000 - search: missing package reference) >Index: src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java,v >retrieving revision 1.104 >diff -u -r1.104 JavaSearchBugsTests.java >--- src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 26 Mar 2007 11:35:31 -0000 1.104 >+++ src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 23 Apr 2007 11:39:03 -0000 >@@ -200,10 +200,10 @@ > public void testBug71279() throws CoreException { > JavaSearchResultCollector result = new JavaSearchResultCollector() { > public void beginReporting() { >- results.append("Starting search..."); >+ addLine("Starting search..."); > } > public void endReporting() { >- results.append("\nDone searching."); >+ addLine("Done searching."); > } > }; > workingCopies = new ICompilationUnit[1]; >Index: src/org/eclipse/jdt/core/tests/model/AbstractJavaSearchTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaSearchTests.java,v >retrieving revision 1.23 >diff -u -r1.23 AbstractJavaSearchTests.java >--- src/org/eclipse/jdt/core/tests/model/AbstractJavaSearchTests.java 26 Mar 2007 11:35:31 -0000 1.23 >+++ src/org/eclipse/jdt/core/tests/model/AbstractJavaSearchTests.java 23 Apr 2007 11:39:01 -0000 >@@ -14,6 +14,8 @@ > import java.io.IOException; > import java.util.ArrayList; > import java.util.Arrays; >+import java.util.Collections; >+import java.util.Comparator; > import java.util.List; > > import org.eclipse.core.resources.*; >@@ -59,19 +61,24 @@ > public boolean showSynthetic; > public int showFlavors = 0; > public int count = 0; >+ List lines = new ArrayList(); >+ boolean sorted; >+ public JavaSearchResultCollector() { >+ this(false); >+ } >+ public JavaSearchResultCollector(boolean sorted) { >+ this.sorted = sorted; >+ } > public void acceptSearchMatch(SearchMatch searchMatch) throws CoreException { >- count++; >+ this.count++; > this.match = searchMatch; > writeLine(); >- if (line != null) { >- writeLineToResult(); >+ if (this.line != null && (match.getAccuracy() == SearchMatch.A_ACCURATE || showPotential)) { >+ this.lines.add(this.line); > } > } >- protected void writeLineToResult() { >- if (match.getAccuracy() == SearchMatch.A_ACCURATE || showPotential) { >- if (results.length() > 0) results.append("\n"); >- results.append(line); >- } >+ protected void addLine(String text) { >+ this.lines.add(text); > } > protected void writeLine() throws CoreException { > try { >@@ -225,8 +232,8 @@ > } > } > } catch (JavaModelException e) { >- results.append("\n"); >- results.append(e.toString()); >+ this.line.append("\n"); >+ this.line.append(e.toString()); > } > } > private boolean showSuperInvocation() { >@@ -384,8 +391,22 @@ > return contents; > } > public String toString() { >- return results.toString(); >- } >+ StringBuffer buffer = new StringBuffer(); >+ List displayedLines = new ArrayList(this.lines); >+ if (this.sorted) { >+ Collections.sort(displayedLines, new Comparator() { >+ public int compare(Object o1, Object o2) { >+ return o1.toString().compareTo(o2.toString()); >+ } >+ }); >+ } >+ int size = displayedLines.size(); >+ for (int i=0; i<size; i++) { >+ if (i > 0) buffer.append('\n'); >+ buffer.append(displayedLines.get(i).toString()); >+ } >+ return buffer.toString(); >+ } > } > > static class TypeNameMatchCollector extends TypeNameMatchRequestor { >#P org.eclipse.jdt.core >Index: search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java,v >retrieving revision 1.289 >diff -u -r1.289 MatchLocator.java >--- search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 26 Mar 2007 11:35:35 -0000 1.289 >+++ search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 23 Apr 2007 11:39:06 -0000 >@@ -1235,42 +1235,37 @@ > return; > } > PackageDeclarationPattern pkgPattern = (PackageDeclarationPattern) searchPattern; >+ IPath[] scopeProjectsAndJars = this.scope.enclosingProjectsAndJars(); >+ int scopeLength = scopeProjectsAndJars.length; > IJavaProject[] projects = JavaModelManager.getJavaModelManager().getJavaModel().getJavaProjects(); > for (int i = 0, length = projects.length; i < length; i++) { > IJavaProject javaProject = projects[i]; >- IPackageFragmentRoot[] roots = null; >- try { >- roots = javaProject.getPackageFragmentRoots(); >- } catch (JavaModelException e) { >- // java project doesn't exist -> continue with next project (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=75561) >- continue; >+ // Verify that project belongs to the scope >+ boolean found = false; >+ for (int j=0; j<scopeLength; j++) { >+ if (projects[i].getPath().equals(scopeProjectsAndJars[j])) { >+ found = true; >+ break; >+ } > } >- for (int j = 0, rootsLength = roots.length; j < rootsLength; j++) { >- IJavaElement[] pkgs = null; >+ if (!found) continue; >+ this.nameLookup = ((JavaProject) projects[i]).newNameLookup(this.workingCopies); >+ IPackageFragment[] packageFragments = this.nameLookup.findPackageFragments(new String(pkgPattern.pkgName), true, true); >+ int pLength = packageFragments == null ? 0 : packageFragments.length; >+ for (int p=0; p<pLength; p++) { >+ IPackageFragment fragment = packageFragments[p]; >+ IResource resource = fragment.getResource(); >+ if (resource == null) // case of a file in an external jar >+ resource = javaProject.getProject(); > try { >- pkgs = roots[j].getChildren(); >- } catch (JavaModelException e) { >- // pkg fragment root doesn't exist -> continue with next root (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=75561) >- continue; >- } >- for (int k = 0, pksLength = pkgs.length; k < pksLength; k++) { >- IPackageFragment pkg = (IPackageFragment) pkgs[k]; >- if (!pkg.exists()) continue; // package doesn't exist -> continue with next package (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=75561) >- if (pkgPattern.matchesName(pkgPattern.pkgName, pkg.getElementName().toCharArray())) { >- IResource resource = pkg.getResource(); >- if (resource == null) // case of a file in an external jar >- resource = javaProject.getProject(); >- try { >- if (encloses(pkg)) { >- SearchMatch match = new PackageDeclarationMatch(pkg, SearchMatch.A_ACCURATE, -1, -1, participant, resource); >- report(match); >- } >- } catch (JavaModelException e) { >- throw e; >- } catch (CoreException e) { >- throw new JavaModelException(e); >- } >+ if (encloses(fragment)) { >+ SearchMatch match = new PackageDeclarationMatch(fragment, SearchMatch.A_ACCURATE, -1, -1, participant, resource); >+ report(match); > } >+ } catch (JavaModelException e) { >+ throw e; >+ } catch (CoreException e) { >+ throw new JavaModelException(e); > } > } > } >Index: model/org/eclipse/jdt/internal/core/util/Util.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java,v >retrieving revision 1.106 >diff -u -r1.106 Util.java >--- model/org/eclipse/jdt/internal/core/util/Util.java 13 Apr 2007 16:02:15 -0000 1.106 >+++ model/org/eclipse/jdt/internal/core/util/Util.java 23 Apr 2007 11:39:06 -0000 >@@ -1945,6 +1945,30 @@ > return compoundName[prefixLength-1].toLowerCase().startsWith(prefix[prefixLength-1].toLowerCase()); > } > >+ /* >+ * Returns whether the given compound name matches the given pattern. >+ */ >+ public static boolean matchesWithIgnoreCase(String[] compoundName, String pattern) { >+ if (pattern.equals("*")) return true; //$NON-NLS-1$ >+ int nameLength = compoundName.length; >+ if (pattern.length() == 0) return nameLength == 0; >+ if (nameLength == 0) return false; >+ int length = nameLength-1; >+ for (int i=0; i<nameLength; i++) { >+ length += compoundName[i].length(); >+ } >+ char[] compoundChars = new char[length]; >+ int pos = 0; >+ for (int i=0; i<nameLength; i++) { >+ if (pos > 0) compoundChars[pos++] = '.'; >+ char[] array = compoundName[i].toCharArray(); >+ int size = array.length; >+ System.arraycopy(array, 0, compoundChars, pos, size); >+ pos += size; >+ } >+ return CharOperation.match(pattern.toCharArray(), compoundChars, false); >+ } >+ > /** > * Converts a String[] to char[][]. > */ >Index: model/org/eclipse/jdt/internal/core/NameLookup.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java,v >retrieving revision 1.113 >diff -u -r1.113 NameLookup.java >--- model/org/eclipse/jdt/internal/core/NameLookup.java 23 Apr 2007 10:52:16 -0000 1.113 >+++ model/org/eclipse/jdt/internal/core/NameLookup.java 23 Apr 2007 11:39:05 -0000 >@@ -460,6 +460,9 @@ > * only exact name matches qualify when <code>false</code> > */ > public IPackageFragment[] findPackageFragments(String name, boolean partialMatch) { >+ return findPackageFragments(name, partialMatch, false); >+ } >+ public IPackageFragment[] findPackageFragments(String name, boolean partialMatch, boolean patternMatch) { > if (partialMatch) { > String[] splittedName = Util.splitOn('.', name, 0, name.length()); > IPackageFragment[] oneFragment = null; >@@ -467,24 +470,17 @@ > Object[][] keys = this.packageFragments.keyTable; > for (int i = 0, length = keys.length; i < length; i++) { > String[] pkgName = (String[]) keys[i]; >- if (pkgName != null && Util.startsWithIgnoreCase(pkgName, splittedName)) { >- Object value = this.packageFragments.valueTable[i]; >- if (value instanceof PackageFragmentRoot) { >- IPackageFragment pkg = ((PackageFragmentRoot) value).getPackageFragment(pkgName); >- if (oneFragment == null) { >- oneFragment = new IPackageFragment[] {pkg}; >- } else { >- if (pkgs == null) { >- pkgs = new ArrayList(); >- pkgs.add(oneFragment[0]); >- } >- pkgs.add(pkg); >- } >+ if (pkgName != null) { >+ boolean match = false; >+ if (patternMatch && (name.indexOf('*') >= 0 || name.indexOf('?') >= 0)) { >+ match = name.equals("*") ? true : Util.matchesWithIgnoreCase(pkgName, name); //$NON-NLS-1$ > } else { >- IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value; >- for (int j = 0, length2 = roots.length; j < length2; j++) { >- PackageFragmentRoot root = (PackageFragmentRoot) roots[j]; >- IPackageFragment pkg = root.getPackageFragment(pkgName); >+ match = Util.startsWithIgnoreCase(pkgName, splittedName); >+ } >+ if (match) { >+ Object value = this.packageFragments.valueTable[i]; >+ if (value instanceof PackageFragmentRoot) { >+ IPackageFragment pkg = ((PackageFragmentRoot) value).getPackageFragment(pkgName); > if (oneFragment == null) { > oneFragment = new IPackageFragment[] {pkg}; > } else { >@@ -494,6 +490,21 @@ > } > pkgs.add(pkg); > } >+ } else { >+ IPackageFragmentRoot[] roots = (IPackageFragmentRoot[]) value; >+ for (int j = 0, length2 = roots.length; j < length2; j++) { >+ PackageFragmentRoot root = (PackageFragmentRoot) roots[j]; >+ IPackageFragment pkg = root.getPackageFragment(pkgName); >+ if (oneFragment == null) { >+ oneFragment = new IPackageFragment[] {pkg}; >+ } else { >+ if (pkgs == null) { >+ pkgs = new ArrayList(); >+ pkgs.add(oneFragment[0]); >+ } >+ pkgs.add(pkg); >+ } >+ } > } > } > }
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 183062
:
64600
|
64696