diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java index 4781fac..25090fc 100644 --- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java +++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java @@ -154,7 +154,7 @@ if (allowInvalidCP) { return new StatusInfo(IStatus.WARNING, status.getMessage()); } else { - return new StatusInfo(IStatus.ERROR, status.getMessage()); + return new StatusInfo(status.getSeverity(), status.getMessage()); } } @@ -1061,7 +1061,7 @@ IJavaProject javaProject= cpProject.getJavaProject(); IJavaModelStatus status= JavaConventions.validateClasspath(javaProject, entries, outputLocation); - if (!status.isOK()) + if (status.getSeverity() == IStatus.ERROR) throw new JavaModelException(status); BuildPathSupport.setEEComplianceOptions(javaProject, cpListElements); diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java index b2c7eb7..cf46a06 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java @@ -58,6 +58,7 @@ private static final Key PREF_PB_INCOMPLETE_BUILDPATH= getJDTCoreKey(JavaCore.CORE_INCOMPLETE_CLASSPATH); private static final Key PREF_PB_CIRCULAR_BUILDPATH= getJDTCoreKey(JavaCore.CORE_CIRCULAR_CLASSPATH); private static final Key PREF_PB_INCOMPATIBLE_JDK_LEVEL= getJDTCoreKey(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL); + private static final Key PREF_PB_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE= getJDTCoreKey(JavaCore.CORE_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE); private static final Key PREF_PB_DUPLICATE_RESOURCE= getJDTCoreKey(JavaCore.CORE_JAVA_BUILD_DUPLICATE_RESOURCE); private static final Key PREF_RECREATE_MODIFIED_CLASS_FILES= getJDTCoreKey(JavaCore.CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER); @@ -89,8 +90,8 @@ Key[] keys= new Key[] { PREF_PB_MAX_PER_UNIT, PREF_RESOURCE_FILTER, PREF_BUILD_INVALID_CLASSPATH, PREF_PB_INCOMPLETE_BUILDPATH, PREF_PB_CIRCULAR_BUILDPATH, PREF_BUILD_CLEAN_OUTPUT_FOLDER, PREF_PB_DUPLICATE_RESOURCE, - PREF_PB_INCOMPATIBLE_JDK_LEVEL, PREF_ENABLE_EXCLUSION_PATTERNS, PREF_ENABLE_MULTIPLE_OUTPUT_LOCATIONS, PREF_RECREATE_MODIFIED_CLASS_FILES, - PREF_PB_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE + PREF_PB_INCOMPATIBLE_JDK_LEVEL, PREF_PB_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE, PREF_ENABLE_EXCLUSION_PATTERNS, PREF_ENABLE_MULTIPLE_OUTPUT_LOCATIONS, + PREF_RECREATE_MODIFIED_CLASS_FILES, PREF_PB_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE }; return keys; } @@ -192,6 +193,9 @@ label= PreferencesMessages.JavaBuildConfigurationBlock_pb_check_prereq_binary_level_label; addComboBox(othersComposite, label, PREF_PB_INCOMPATIBLE_JDK_LEVEL, errorWarningIgnore, errorWarningIgnoreLabels, 0); + + label = PreferencesMessages.JavaBuildConfigurationBlock_pb_output_overlapping_with_source_label; + addComboBox(othersComposite, label, PREF_PB_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE, errorWarningIgnore, errorWarningIgnoreLabels, 0); label= PreferencesMessages.JavaBuildConfigurationBlock_pb_strictly_compatible_jre_not_available_label; addComboBox(othersComposite, label, PREF_PB_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE, errorWarningIgnore, errorWarningIgnoreLabels, 0); diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java index 9fe2dbf..94f3504 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java @@ -351,6 +351,7 @@ public static String ProblemSeveritiesConfigurationBlock_pb_forbidden_reference_label; public static String JavaBuildConfigurationBlock_pb_max_per_unit_label; public static String JavaBuildConfigurationBlock_pb_check_prereq_binary_level_label; + public static String JavaBuildConfigurationBlock_pb_output_overlapping_with_source_label; public static String JavaBuildConfigurationBlock_pb_strictly_compatible_jre_not_available_label; public static String JavaBuildConfigurationBlock_empty_input; public static String JavaBuildConfigurationBlock_invalid_input; diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties index aead438..c159041 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties @@ -367,6 +367,7 @@ ProblemSeveritiesConfigurationBlock_pb_forbidden_reference_label=&Forbidden reference (access rules): JavaBuildConfigurationBlock_pb_max_per_unit_label=&Maximum number of problems reported per compilation unit: JavaBuildConfigurationBlock_pb_check_prereq_binary_level_label=In&compatible required binaries: +JavaBuildConfigurationBlock_pb_output_overlapping_with_source_label=&Output location overlaps source location: JavaBuildConfigurationBlock_pb_strictly_compatible_jre_not_available_label= No &strictly compatible JRE for execution environment available: JavaBuildConfigurationBlock_empty_input=Number of problems cannot be empty. diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java index 4ffe8ac7a..530af8b 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java @@ -672,11 +672,12 @@ } IJavaModelStatus status= JavaConventions.validateClasspath(fCurrJProject, entries, fOutputLocationPath); - if (!status.isOK()) { + if (status.isOK()) + fBuildPathStatus.setOK(); + else if (status.getSeverity() == IStatus.WARNING) + fBuildPathStatus.setWarning(status.getMessage()); + else fBuildPathStatus.setError(status.getMessage()); - return; - } - fBuildPathStatus.setOK(); } // -------- creation ------------------------------- diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java index 4b64103..5e2f0c9 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java @@ -45,6 +45,7 @@ import org.eclipse.ui.views.navigator.ResourceComparator; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaConventions; import org.eclipse.jdt.internal.corext.buildpath.CPJavaProject; import org.eclipse.jdt.internal.corext.buildpath.ClasspathModifier; @@ -180,6 +181,11 @@ fContainerFieldStatus= StatusInfo.OK_STATUS; if (fUseDefault.isSelected()) { + if (!fAllowInvalidClasspath) { + IStatus jdtCoreStatus= JavaConventions.validateClasspath(fCPJavaProject.getJavaProject(), fCPJavaProject.getClasspathEntries(), fCPJavaProject.getDefaultOutputLocation()); + // Need to create a new status, see https://bugs.eclipse.org/361263 for details. + fContainerFieldStatus= new StatusInfo(jdtCoreStatus.getSeverity(), jdtCoreStatus.getMessage()); + } return; } diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java index 35b3f27..517439b 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java @@ -414,7 +414,7 @@ String key= elem.getKey(); if (key.equals(CPListElement.OUTPUT)) { CPListElement selElement= elem.getParent(); - OutputLocationDialog dialog= new OutputLocationDialog(getShell(), selElement, fClassPathList.getElements(), new Path(fOutputLocationField.getText()).makeAbsolute(), true); + OutputLocationDialog dialog= new OutputLocationDialog(getShell(), selElement, fClassPathList.getElements(), new Path(fOutputLocationField.getText()).makeAbsolute(), false); if (dialog.open() == Window.OK) { selElement.setAttribute(CPListElement.OUTPUT, dialog.getOutputLocation()); fFoldersList.refresh();