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 104326 Details for
Bug 190840
SourceMapper#computeAllRootPaths(IType) factorisation suggestion
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix and performance test
190840.txt (text/plain), 10.58 KB, created by
Jerome Lanneluc
on 2008-06-10 11:06:13 EDT
(
hide
)
Description:
Proposed fix and performance test
Filename:
MIME Type:
Creator:
Jerome Lanneluc
Created:
2008-06-10 11:06:13 EDT
Size:
10.58 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core.tests.performance >Index: src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceModelTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceModelTests.java,v >retrieving revision 1.39 >diff -u -r1.39 FullSourceWorkspaceModelTests.java >--- src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceModelTests.java 28 May 2008 00:00:21 -0000 1.39 >+++ src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceModelTests.java 10 Jun 2008 15:04:53 -0000 >@@ -1074,6 +1074,54 @@ > } > } > >+/* >+ * Performance test for the first time we get the source of a class file in a bug jar with no source attached >+ * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=190840 ) >+ */ >+public void testGetSourceBigJarNoAttachment() throws CoreException { >+ >+ IJavaProject project = null; >+ try { >+ project = createJavaProject("HugeJarProject"); >+ IFile bigJar1 = BIG_PROJECT.getProject().getFile(BIG_JAR1_NAME); >+ project.setRawClasspath( >+ new IClasspathEntry[] { >+ JavaCore.newLibraryEntry(bigJar1.getFullPath(), null, null), >+ }, null); >+ AbstractJavaModelTests.waitUntilIndexesReady(); >+ AbstractJavaModelTests.waitForAutoBuild(); >+ IPackageFragmentRoot root = project.getPackageFragmentRoot(bigJar1); >+ IClassFile classFile = root.getPackageFragment("p0").getClassFile("X0.class"); >+ >+ // warm up >+ int max = 20; >+ int warmup = WARMUP_COUNT / 10; >+ for (int i = 0; i < warmup; i++) { >+ for (int j = 0; j < max; j++) { >+ root.close(); >+ classFile.getSource(); >+ } >+ } >+ >+ // measure performance >+ for (int i = 0; i < MEASURES_COUNT; i++) { >+ runGc(); >+ startMeasuring(); >+ for (int j = 0; j < max; j++) { >+ root.close(); >+ classFile.getSource(); >+ } >+ stopMeasuring(); >+ } >+ >+ commitMeasurements(); >+ assertPerformance(); >+ } finally { >+ if (project != null) >+ project.getProject().delete(false, null); >+ } >+} >+ > protected void resetCounters() { > // do nothing > } >#P org.eclipse.jdt.core >Index: model/org/eclipse/jdt/internal/core/SourceMapper.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMapper.java,v >retrieving revision 1.136 >diff -u -r1.136 SourceMapper.java >--- model/org/eclipse/jdt/internal/core/SourceMapper.java 27 May 2008 23:40:18 -0000 1.136 >+++ model/org/eclipse/jdt/internal/core/SourceMapper.java 10 Jun 2008 15:04:54 -0000 >@@ -345,6 +345,7 @@ > return; > } > IPackageFragmentRoot root = (IPackageFragmentRoot) type.getPackageFragment().getParent(); >+ IPath pkgFragmentRootPath = root.getPath(); > final HashSet tempRoots = new HashSet(); > long time = 0; > if (VERBOSE) { >@@ -353,36 +354,40 @@ > } > final HashSet firstLevelPackageNames = new HashSet(); > boolean containsADefaultPackage = false; >+ boolean containsJavaSource = !pkgFragmentRootPath.equals(this.sourcePath); // used to optimize zip file reading only if source path and root path are equals, otherwise assume that attachment contains Java source > > String sourceLevel = null; > String complianceLevel = null; > if (root.isArchive()) { >- JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) root; > JavaModelManager manager = JavaModelManager.getJavaModelManager(); > ZipFile zip = null; > try { >- zip = manager.getZipFile(jarPackageFragmentRoot.getPath()); >+ zip = manager.getZipFile(pkgFragmentRootPath); > for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { > ZipEntry entry = (ZipEntry) entries.nextElement(); > String entryName = entry.getName(); > if (!entry.isDirectory()) { >- int index = entryName.indexOf('/'); >- if (index != -1 && Util.isClassFileName(entryName)) { >- String firstLevelPackageName = entryName.substring(0, index); >- if (!firstLevelPackageNames.contains(firstLevelPackageName)) { >- if (sourceLevel == null) { >- IJavaProject project = root.getJavaProject(); >- sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); >- complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); >- } >- IStatus status = JavaConventions.validatePackageName(firstLevelPackageName, sourceLevel, complianceLevel); >- if (status.isOK() || status.getSeverity() == IStatus.WARNING) { >- firstLevelPackageNames.add(firstLevelPackageName); >+ if (Util.isClassFileName(entryName)) { >+ int index = entryName.indexOf('/'); >+ if (index != -1) { >+ String firstLevelPackageName = entryName.substring(0, index); >+ if (!firstLevelPackageNames.contains(firstLevelPackageName)) { >+ if (sourceLevel == null) { >+ IJavaProject project = root.getJavaProject(); >+ sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); >+ complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); >+ } >+ IStatus status = JavaConventions.validatePackageName(firstLevelPackageName, sourceLevel, complianceLevel); >+ if (status.isOK() || status.getSeverity() == IStatus.WARNING) { >+ firstLevelPackageNames.add(firstLevelPackageName); >+ } > } >+ } else { >+ containsADefaultPackage = true; > } >- } else if (Util.isClassFileName(entryName)) { >- containsADefaultPackage = true; >- } >+ } else if (!containsJavaSource && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(entryName)) { >+ containsJavaSource = true; >+ } > } > } > } catch (CoreException e) { >@@ -399,19 +404,21 @@ > IResource[] members = ((IContainer) resource).members(); > for (int i = 0, max = members.length; i < max; i++) { > IResource member = members[i]; >+ String resourceName = member.getName(); > if (member.getType() == IResource.FOLDER) { > if (sourceLevel == null) { > IJavaProject project = root.getJavaProject(); > sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true); > complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true); > } >- String firstLevelPackageName = member.getName(); >- IStatus status = JavaConventions.validatePackageName(firstLevelPackageName, sourceLevel, complianceLevel); >+ IStatus status = JavaConventions.validatePackageName(resourceName, sourceLevel, complianceLevel); > if (status.isOK() || status.getSeverity() == IStatus.WARNING) { >- firstLevelPackageNames.add(firstLevelPackageName); >+ firstLevelPackageNames.add(resourceName); > } >- } else if (Util.isClassFileName(member.getName())) { >+ } else if (Util.isClassFileName(resourceName)) { > containsADefaultPackage = true; >+ } else if (!containsJavaSource && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(resourceName)) { >+ containsJavaSource = true; > } > } > } catch (CoreException e) { >@@ -421,40 +428,42 @@ > } > } > >- Object target = JavaModel.getTarget(this.sourcePath, true); >- if (target instanceof IContainer) { >- IContainer folder = (IContainer)target; >- computeRootPath(folder, firstLevelPackageNames, containsADefaultPackage, tempRoots, folder.getFullPath().segmentCount()/*if external folder, this is the linked folder path*/); >- } else { >- JavaModelManager manager = JavaModelManager.getJavaModelManager(); >- ZipFile zip = null; >- try { >- zip = manager.getZipFile(this.sourcePath); >- for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { >- ZipEntry entry = (ZipEntry) entries.nextElement(); >- String entryName; >- if (!entry.isDirectory() && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(entryName = entry.getName())) { >- IPath path = new Path(entryName); >- int segmentCount = path.segmentCount(); >- if (segmentCount > 1) { >- for (int i = 0, max = path.segmentCount() - 1; i < max; i++) { >- if (firstLevelPackageNames.contains(path.segment(i))) { >- tempRoots.add(path.uptoSegment(i)); >- // don't break here as this path could contain other first level package names (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=74014) >- } >- if (i == max - 1 && containsADefaultPackage) { >- tempRoots.add(path.uptoSegment(max)); >+ if (containsJavaSource) { // no need to read source attachment if it contains no Java source (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=190840 ) >+ Object target = JavaModel.getTarget(this.sourcePath, true); >+ if (target instanceof IContainer) { >+ IContainer folder = (IContainer)target; >+ computeRootPath(folder, firstLevelPackageNames, containsADefaultPackage, tempRoots, folder.getFullPath().segmentCount()/*if external folder, this is the linked folder path*/); >+ } else { >+ JavaModelManager manager = JavaModelManager.getJavaModelManager(); >+ ZipFile zip = null; >+ try { >+ zip = manager.getZipFile(this.sourcePath); >+ for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { >+ ZipEntry entry = (ZipEntry) entries.nextElement(); >+ String entryName; >+ if (!entry.isDirectory() && org.eclipse.jdt.internal.core.util.Util.isJavaLikeFileName(entryName = entry.getName())) { >+ IPath path = new Path(entryName); >+ int segmentCount = path.segmentCount(); >+ if (segmentCount > 1) { >+ for (int i = 0, max = path.segmentCount() - 1; i < max; i++) { >+ if (firstLevelPackageNames.contains(path.segment(i))) { >+ tempRoots.add(path.uptoSegment(i)); >+ // don't break here as this path could contain other first level package names (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=74014) >+ } >+ if (i == max - 1 && containsADefaultPackage) { >+ tempRoots.add(path.uptoSegment(max)); >+ } > } >+ } else if (containsADefaultPackage) { >+ tempRoots.add(new Path("")); //$NON-NLS-1$ > } >- } else if (containsADefaultPackage) { >- tempRoots.add(new Path("")); //$NON-NLS-1$ > } > } >+ } catch (CoreException e) { >+ // ignore >+ } finally { >+ manager.closeZipFile(zip); // handle null case > } >- } catch (CoreException e) { >- // ignore >- } finally { >- manager.closeZipFile(zip); // handle null case > } > } > int size = tempRoots.size();
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 190840
: 104326