Bug 540119 - Show quickfixes for error "main-only project with test-only
dependency"
Change-Id: I731ae5433910d4d79c896b0735ea9b173d344cad
diff --git a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
index 941e468..08163ba 100644
--- a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
@@ -41,7 +41,7 @@
org.eclipse.debug.ui;bundle-version="[3.13.100,4.0.0)",
org.eclipse.jdt.debug;bundle-version="[3.11.0,4.0.0)",
org.eclipse.jdt.launching;bundle-version="[3.11.0,4.0.0)",
- org.eclipse.jdt.ui;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.jdt.ui;bundle-version="[3.15.100,4.0.0)",
org.eclipse.core.runtime;bundle-version="[3.11.0,4.0.0)",
org.eclipse.ltk.core.refactoring;bundle-version="[3.5.0,4.0.0)",
org.eclipse.ui.console;bundle-version="[3.4.0,4.0.0)",
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java
index c141620..028cacc 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/JreResolutionGenerator.java
@@ -19,16 +19,25 @@
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.CorrectionEngine;
+import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaModelMarker;
import org.eclipse.jdt.core.IJavaModelStatusConstants;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.debug.ui.jres.ExecutionEnvironmentsPreferencePage;
import org.eclipse.jdt.internal.debug.ui.jres.JREsPreferencePage;
+import org.eclipse.jdt.internal.launching.JREContainerInitializer;
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.text.correction.CorrectionMessages;
+import org.eclipse.jdt.internal.ui.text.java.hover.ConfigureProblemSeverityAction;
+import org.eclipse.jdt.internal.ui.text.java.hover.ConfigureProblemSeverityAction.PreferencePage;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolution2;
import org.eclipse.ui.IMarkerResolutionGenerator2;
+import org.eclipse.ui.IMarkerResolutionRelevance;
/**
* Generates quick fixes for unbound JREs.
@@ -44,15 +53,32 @@
public IMarkerResolution[] getResolutions(IMarker marker) {
try {
if(JavaRuntime.JRE_CONTAINER_MARKER.equals(marker.getType())) {
- return new IMarkerResolution[] {new OpenPreferencePageResolution(ExecutionEnvironmentsPreferencePage.ID,
- new String[] {ExecutionEnvironmentsPreferencePage.ID, JREsPreferencePage.ID},
- LauncherMessages.JreResolutionGenerator_open_ee_prefs,
- LauncherMessages.JreResolutionGenerator_opens_ee_prefs)};
+ OpenPreferencePageResolution openPreferencePageResolution = new OpenPreferencePageResolution(ExecutionEnvironmentsPreferencePage.ID, new String[] {
+ ExecutionEnvironmentsPreferencePage.ID,
+ JREsPreferencePage.ID }, LauncherMessages.JreResolutionGenerator_open_ee_prefs, LauncherMessages.JreResolutionGenerator_opens_ee_prefs);
+ IJavaProject project = getJavaProject(marker);
+ IPath container = null;
+ for (IClasspathEntry entry : project.getRawClasspath()) {
+ if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
+ IPath path = entry.getPath();
+ if (JavaRuntime.JRE_CONTAINER.equals(path.segment(0))) {
+ container = path;
+ }
+ }
+ }
+ boolean noVM = container == null || JREContainerInitializer.resolveVM(container) == null;
+ if (noVM) {
+ return new IMarkerResolution[] { openPreferencePageResolution };
+ }
+ ConfigureSeverityResolution configureSeverityResolution = new ConfigureSeverityResolution(project, JavaRuntime.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE);
+ return new IMarkerResolution[] { openPreferencePageResolution, configureSeverityResolution };
} else if (JavaRuntime.JRE_COMPILER_COMPLIANCE_MARKER.equals(marker.getType())) {
IJavaProject project = getJavaProject(marker);
- return new IMarkerResolution[] { new OpenPropertyPageResolution(project, JavaUI.ID_COMPILER_COMPLIANCE_PROPERTY_PAGE, new String[] {
+ OpenPropertyPageResolution openPropertyPageResolution = new OpenPropertyPageResolution(project, JavaUI.ID_COMPILER_COMPLIANCE_PROPERTY_PAGE, new String[] {
JavaUI.ID_COMPILER_COMPLIANCE_PROPERTY_PAGE,
- JavaUI.ID_JAVA_BUILD_PREFERENCE_PROPERTY_PAGE }, LauncherMessages.JreResolutionGenerator_open_cc_props, LauncherMessages.JreResolutionGenerator_opens_cc_props) };
+ JavaUI.ID_JAVA_BUILD_PREFERENCE_PROPERTY_PAGE }, LauncherMessages.JreResolutionGenerator_open_cc_props, LauncherMessages.JreResolutionGenerator_opens_cc_props);
+ ConfigureSeverityResolution configureSeverityResolution = new ConfigureSeverityResolution(project, JavaRuntime.PREF_COMPILER_COMPLIANCE_DOES_NOT_MATCH_JRE);
+ return new IMarkerResolution[] { openPropertyPageResolution, configureSeverityResolution };
}
int id = marker.getAttribute(IJavaModelMarker.ID, -1);
switch (id) {
@@ -123,4 +149,40 @@
} catch (CoreException ce) {}
return false;
}
+
+ private static class ConfigureSeverityResolution implements IMarkerResolution2, IMarkerResolutionRelevance {
+ private final IJavaProject fProject;
+ private String fOptionId;
+
+ public ConfigureSeverityResolution(IJavaProject project, String optionId) {
+ fProject = project;
+ fOptionId = optionId;
+ }
+
+ @Override
+ public String getDescription() {
+ return null;
+ }
+
+ @Override
+ public Image getImage() {
+ return JavaPluginImages.get(JavaPluginImages.IMG_CONFIGURE_PROBLEM_SEVERITIES);
+ }
+
+ @Override
+ public String getLabel() {
+ return CorrectionMessages.ConfigureProblemSeveritySubProcessor_name;
+ }
+
+ @Override
+ public int getRelevanceForResolution() {
+ return -1;
+ }
+
+ @Override
+ public void run(IMarker marker) {
+ ConfigureProblemSeverityAction problemSeverityAction = new ConfigureProblemSeverityAction(fProject, fOptionId, JavaRuntime.ID_PLUGIN, PreferencePage.BUILDING, null);
+ problemSeverityAction.run();
+ }
+ }
}