Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java21
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),

Back to the top