DeltaProcessor deltaProcessor = state.getDeltaProcessor();
IClasspathEntry[] newResolvedClasspath = null;
IPath newOutputLocation = null;
int result = NO_DELTA;
try {
PerProjectInfo perProjectInfo = this.project.getPerProjectInfo();
// get new info
this.project.resolveClasspath(perProjectInfo, false/*don't use previous session values*/, addClasspathChange);
IClasspathEntry[] newRawClasspath;
// use synchronized block to ensure consistency
synchronized (perProjectInfo) {
newRawClasspath = perProjectInfo.rawClasspath;
newResolvedClasspath = perProjectInfo.getResolvedClasspath();
newOutputLocation = perProjectInfo.outputLocation;
}
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*/, addClasspathChange);
newRawClasspath = temporaryInfo.rawClasspath;
newResolvedClasspath = temporaryInfo.getResolvedClasspath();
newOutputLocation = temporaryInfo.outputLocation;
}
// check if raw classpath has changed
if (this.oldRawClasspath != null && !JavaProject.areClasspathsEqual(this.oldRawClasspath, newRawClasspath, this.oldOutputLocation, newOutputLocation)) {