diff options
Diffstat (limited to 'org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java')
-rw-r--r-- | org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java index 5d00b8130..7c3fd11b2 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/JavaBuilder.java @@ -652,11 +652,20 @@ private int initializeBuilder(int kind, boolean forBuild) throws CoreException { return kind; } -private boolean isClasspathBroken(IClasspathEntry[] classpath, IProject p) throws CoreException { - IMarker[] markers = p.findMarkers(IJavaModelMarker.BUILDPATH_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); - for (int i = 0, l = markers.length; i < l; i++) - if (markers[i].getAttribute(IMarker.SEVERITY, -1) == IMarker.SEVERITY_ERROR) +private boolean isClasspathBroken(JavaProject jProj, boolean tryRepair) throws CoreException { + IMarker[] markers = jProj.getProject().findMarkers(IJavaModelMarker.BUILDPATH_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); + for (int i = 0, l = markers.length; i < l; i++) { + if (markers[i].getAttribute(IMarker.SEVERITY, -1) == IMarker.SEVERITY_ERROR) { + if (tryRepair) { + Object code = markers[i].getAttribute(IJavaModelMarker.ID); + if (code instanceof Integer && ((Integer)code) == IJavaModelStatusConstants.CP_INVALID_EXTERNAL_ANNOTATION_PATH) { + new ClasspathValidation(jProj).validate(); + return isClasspathBroken(jProj, false); + } + } return true; + } + } return false; } @@ -670,7 +679,7 @@ private boolean isWorthBuilding() throws CoreException { } // Abort build only if there are classpath errors - if (isClasspathBroken(this.javaProject.getRawClasspath(), this.currentProject)) { + if (isClasspathBroken(this.javaProject, true)) { if (DEBUG) System.out.println("JavaBuilder: Aborted build because project has classpath errors (incomplete or involved in cycle)"); //$NON-NLS-1$ @@ -721,7 +730,7 @@ private boolean isWorthBuilding() throws CoreException { marker.setAttributes( new String[] {IMarker.MESSAGE, IMarker.SEVERITY, IJavaModelMarker.CATEGORY_ID, IMarker.SOURCE_ID}, new Object[] { - isClasspathBroken(prereq.getRawClasspath(), p) + isClasspathBroken(prereq, true) ? Messages.bind(Messages.build_prereqProjectHasClasspathProblems, p.getName()) : Messages.bind(Messages.build_prereqProjectMustBeRebuilt, p.getName()), new Integer(IMarker.SEVERITY_ERROR), |