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 132915 Details for
Bug 273308
[perfs] Save very slow because DeltaProcessor#resourceChanged(..) resolves classpath
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix
273308.txt (text/plain), 11.72 KB, created by
Jerome Lanneluc
on 2009-04-23 06:46:58 EDT
(
hide
)
Description:
Proposed fix
Filename:
MIME Type:
Creator:
Jerome Lanneluc
Created:
2009-04-23 06:46:58 EDT
Size:
11.72 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: model/org/eclipse/jdt/internal/core/ChangeClasspathOperation.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ChangeClasspathOperation.java,v >retrieving revision 1.13 >diff -u -r1.13 ChangeClasspathOperation.java >--- model/org/eclipse/jdt/internal/core/ChangeClasspathOperation.java 19 Aug 2008 12:48:20 -0000 1.13 >+++ model/org/eclipse/jdt/internal/core/ChangeClasspathOperation.java 23 Apr 2009 09:57:58 -0000 >@@ -64,7 +64,7 @@ > } else { > DeltaProcessingState state = JavaModelManager.getDeltaState(); > JavaElementDelta delta = new JavaElementDelta(getJavaModel()); >- int result = change.generateDelta(delta); >+ int result = change.generateDelta(delta, true/*add classpath change*/); > if ((result & ClasspathChange.HAS_DELTA) != 0) { > // create delta > addDelta(delta); >Index: model/org/eclipse/jdt/internal/core/JavaModelManager.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java,v >retrieving revision 1.432 >diff -u -r1.432 JavaModelManager.java >--- model/org/eclipse/jdt/internal/core/JavaModelManager.java 20 Apr 2009 15:11:05 -0000 1.432 >+++ model/org/eclipse/jdt/internal/core/JavaModelManager.java 23 Apr 2009 09:58:00 -0000 >@@ -1130,11 +1130,11 @@ > JavaModelManager.getJavaModelManager().resetNonChainingJarsCache(); > > // null out resolved information >- return setResolvedClasspath(null, null, null, null, this.rawTimeStamp); >+ return setResolvedClasspath(null, null, null, null, this.rawTimeStamp, true/*add classpath change*/); > } > >- private ClasspathChange setClasspath(IClasspathEntry[] newRawClasspath, IPath newOutputLocation, IJavaModelStatus newRawClasspathStatus, IClasspathEntry[] newResolvedClasspath, Map newRootPathToRawEntries, Map newRootPathToResolvedEntries, IJavaModelStatus newUnresolvedEntryStatus) { >- ClasspathChange classpathChange = addClasspathChange(); >+ private ClasspathChange setClasspath(IClasspathEntry[] newRawClasspath, IPath newOutputLocation, IJavaModelStatus newRawClasspathStatus, IClasspathEntry[] newResolvedClasspath, Map newRootPathToRawEntries, Map newRootPathToResolvedEntries, IJavaModelStatus newUnresolvedEntryStatus, boolean addClasspathChange) { >+ ClasspathChange classpathChange = addClasspathChange ? addClasspathChange() : null; > > this.rawClasspath = newRawClasspath; > this.outputLocation = newOutputLocation; >@@ -1157,13 +1157,13 @@ > > public synchronized ClasspathChange setRawClasspath(IClasspathEntry[] newRawClasspath, IPath newOutputLocation, IJavaModelStatus newRawClasspathStatus) { > this.rawTimeStamp++; >- return setClasspath(newRawClasspath, newOutputLocation, newRawClasspathStatus, null/*resolved classpath*/, null/*root to raw map*/, null/*root to resolved map*/, null/*unresolved status*/); >+ return setClasspath(newRawClasspath, newOutputLocation, newRawClasspathStatus, null/*resolved classpath*/, null/*root to raw map*/, null/*root to resolved map*/, null/*unresolved status*/, true/*add classpath change*/); > } > >- public synchronized ClasspathChange setResolvedClasspath(IClasspathEntry[] newResolvedClasspath, Map newRootPathToRawEntries, Map newRootPathToResolvedEntries, IJavaModelStatus newUnresolvedEntryStatus, int timeStamp) { >+ public synchronized ClasspathChange setResolvedClasspath(IClasspathEntry[] newResolvedClasspath, Map newRootPathToRawEntries, Map newRootPathToResolvedEntries, IJavaModelStatus newUnresolvedEntryStatus, int timeStamp, boolean addClasspathChange) { > if (this.rawTimeStamp != timeStamp) > return null; >- return setClasspath(this.rawClasspath, this.outputLocation, this.rawClasspathStatus, newResolvedClasspath, newRootPathToRawEntries, newRootPathToResolvedEntries, newUnresolvedEntryStatus); >+ return setClasspath(this.rawClasspath, this.outputLocation, this.rawClasspathStatus, newResolvedClasspath, newRootPathToRawEntries, newRootPathToResolvedEntries, newUnresolvedEntryStatus, addClasspathChange); > } > > public synchronized IClasspathEntry[] readAndCacheClasspath(JavaProject javaProject) { >Index: model/org/eclipse/jdt/internal/core/DeltaProcessingState.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessingState.java,v >retrieving revision 1.53 >diff -u -r1.53 DeltaProcessingState.java >--- model/org/eclipse/jdt/internal/core/DeltaProcessingState.java 20 Apr 2009 15:11:05 -0000 1.53 >+++ model/org/eclipse/jdt/internal/core/DeltaProcessingState.java 23 Apr 2009 09:57:58 -0000 >@@ -298,7 +298,7 @@ > try { > if (usePreviousSession) { > PerProjectInfo perProjectInfo = project.getPerProjectInfo(); >- project.resolveClasspath(perProjectInfo, true/*use previous session values*/); >+ project.resolveClasspath(perProjectInfo, true/*use previous session values*/, false/*don't add classpath change*/); > classpath = perProjectInfo.resolvedClasspath; > } else { > classpath = project.getResolvedClasspath(); >Index: model/org/eclipse/jdt/internal/core/ClasspathChange.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathChange.java,v >retrieving revision 1.22 >diff -u -r1.22 ClasspathChange.java >--- model/org/eclipse/jdt/internal/core/ClasspathChange.java 9 Oct 2008 08:13:07 -0000 1.22 >+++ model/org/eclipse/jdt/internal/core/ClasspathChange.java 23 Apr 2009 09:57:58 -0000 >@@ -197,7 +197,7 @@ > * Generates a classpath change delta for this classpath change. > * Returns whether a delta was generated, and whether project reference have changed. > */ >- public int generateDelta(JavaElementDelta delta) { >+ public int generateDelta(JavaElementDelta delta, boolean addClasspathChange) { > JavaModelManager manager = JavaModelManager.getJavaModelManager(); > DeltaProcessingState state = manager.deltaState; > if (state.findJavaProject(this.project.getElementName()) == null) >@@ -214,7 +214,7 @@ > PerProjectInfo perProjectInfo = this.project.getPerProjectInfo(); > > // get new info >- this.project.resolveClasspath(perProjectInfo, false/*don't use previous session values*/); >+ this.project.resolveClasspath(perProjectInfo, false/*don't use previous session values*/, addClasspathChange); > IClasspathEntry[] newRawClasspath; > > // use synchronized block to ensure consistency >@@ -227,7 +227,7 @@ > if (newResolvedClasspath == null) { > // another thread reset the resolved classpath, use a temporary PerProjectInfo > PerProjectInfo temporaryInfo = this.project.newTemporaryInfo(); >- this.project.resolveClasspath(temporaryInfo, false/*don't use previous session values*/); >+ this.project.resolveClasspath(temporaryInfo, false/*don't use previous session values*/, addClasspathChange); > newRawClasspath = temporaryInfo.rawClasspath; > newResolvedClasspath = temporaryInfo.getResolvedClasspath(); > newOutputLocation = temporaryInfo.outputLocation; >Index: model/org/eclipse/jdt/internal/core/JavaProject.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java,v >retrieving revision 1.423 >diff -u -r1.423 JavaProject.java >--- model/org/eclipse/jdt/internal/core/JavaProject.java 23 Mar 2009 10:11:52 -0000 1.423 >+++ model/org/eclipse/jdt/internal/core/JavaProject.java 23 Apr 2009 09:58:00 -0000 >@@ -1858,12 +1858,12 @@ > PerProjectInfo perProjectInfo = getPerProjectInfo(); > IClasspathEntry[] resolvedClasspath = perProjectInfo.getResolvedClasspath(); > if (resolvedClasspath == null) { >- resolveClasspath(perProjectInfo, false/*don't use previous session values*/); >+ resolveClasspath(perProjectInfo, false/*don't use previous session values*/, true/*add classpath change*/); > resolvedClasspath = perProjectInfo.getResolvedClasspath(); > if (resolvedClasspath == null) { > // another thread reset the resolved classpath, use a temporary PerProjectInfo > PerProjectInfo temporaryInfo = newTemporaryInfo(); >- resolveClasspath(temporaryInfo, false/*don't use previous session values*/); >+ resolveClasspath(temporaryInfo, false/*don't use previous session values*/, true/*add classpath change*/); > resolvedClasspath = temporaryInfo.getResolvedClasspath(); > } > } >@@ -1891,7 +1891,7 @@ > > if (resolvedClasspath == null > || (unresolvedEntryStatus != null && !unresolvedEntryStatus.isOK())) { // force resolution to ensure initializers are run again >- resolveClasspath(perProjectInfo, false/*don't use previous session values*/); >+ resolveClasspath(perProjectInfo, false/*don't use previous session values*/, true/*add classpath change*/); > synchronized (perProjectInfo) { > resolvedClasspath = perProjectInfo.getResolvedClasspath(); > unresolvedEntryStatus = perProjectInfo.unresolvedEntryStatus; >@@ -1899,7 +1899,7 @@ > if (resolvedClasspath == null) { > // another thread reset the resolved classpath, use a temporary PerProjectInfo > PerProjectInfo temporaryInfo = newTemporaryInfo(); >- resolveClasspath(temporaryInfo, false/*don't use previous session values*/); >+ resolveClasspath(temporaryInfo, false/*don't use previous session values*/, true/*add classpath change*/); > resolvedClasspath = temporaryInfo.getResolvedClasspath(); > unresolvedEntryStatus = temporaryInfo.unresolvedEntryStatus; > } >@@ -2639,7 +2639,7 @@ > /* > * Resolve the given perProjectInfo's raw classpath and store the resolved classpath in the perProjectInfo. > */ >- public void resolveClasspath(PerProjectInfo perProjectInfo, boolean usePreviousSession) throws JavaModelException { >+ public void resolveClasspath(PerProjectInfo perProjectInfo, boolean usePreviousSession, boolean addClasspathChange) throws JavaModelException { > if (CP_RESOLUTION_BP_LISTENERS != null) > breakpoint(1, this); > JavaModelManager manager = JavaModelManager.getJavaModelManager(); >@@ -2665,7 +2665,7 @@ > breakpoint(2, this); > > // store resolved info along with the raw info to ensure consistency >- perProjectInfo.setResolvedClasspath(result.resolvedClasspath, result.rawReverseMap, result.rootPathToResolvedEntries, usePreviousSession ? PerProjectInfo.NEED_RESOLUTION : result.unresolvedEntryStatus, timeStamp); >+ perProjectInfo.setResolvedClasspath(result.resolvedClasspath, result.rawReverseMap, result.rootPathToResolvedEntries, usePreviousSession ? PerProjectInfo.NEED_RESOLUTION : result.unresolvedEntryStatus, timeStamp, addClasspathChange); > } finally { > if (!isClasspathBeingResolved) { > manager.setClasspathBeingResolved(this, false); >Index: model/org/eclipse/jdt/internal/core/DeltaProcessor.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java,v >retrieving revision 1.334 >diff -u -r1.334 DeltaProcessor.java >--- model/org/eclipse/jdt/internal/core/DeltaProcessor.java 20 Apr 2009 15:11:05 -0000 1.334 >+++ model/org/eclipse/jdt/internal/core/DeltaProcessor.java 23 Apr 2009 09:57:59 -0000 >@@ -1913,7 +1913,7 @@ > Iterator changes = classpathChanges.values().iterator(); > while (changes.hasNext()) { > ClasspathChange change = (ClasspathChange) changes.next(); >- int result = change.generateDelta(javaDelta); >+ int result = change.generateDelta(javaDelta, false/*don't add classpath change*/); > if ((result & ClasspathChange.HAS_DELTA) != 0) { > hasDelta = true; >
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 273308
:
132815
| 132915