| /******************************************************************************* |
| * Copyright (c) 2000, 2015 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.debug.ui.launcher; |
| |
| |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.jdt.core.CorrectionEngine; |
| 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.launching.JavaRuntime; |
| import org.eclipse.ui.IMarkerResolution; |
| import org.eclipse.ui.IMarkerResolutionGenerator2; |
| |
| /** |
| * Generates quick fixes for unbound JREs. |
| */ |
| public class JreResolutionGenerator implements IMarkerResolutionGenerator2 { |
| |
| private final static IMarkerResolution[] NO_RESOLUTION = new IMarkerResolution[0]; |
| |
| /** |
| * @see org.eclipse.ui.IMarkerResolutionGenerator#getResolutions(org.eclipse.core.resources.IMarker) |
| */ |
| @Override |
| 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)}; |
| } |
| int id = marker.getAttribute(IJavaModelMarker.ID, -1); |
| switch (id) { |
| // unbound classpath container |
| case IJavaModelStatusConstants.CP_CONTAINER_PATH_UNBOUND : |
| String[] arguments = CorrectionEngine.getProblemArguments(marker); |
| IPath path = new Path(arguments[0]); |
| if (path.segment(0).equals(JavaRuntime.JRE_CONTAINER)) { |
| // unbound JRE_CONTAINER |
| if (JREResolution.getAllVMs().length > 0) { |
| IJavaProject project = getJavaProject(marker); |
| return new IMarkerResolution[]{new SelectSystemLibraryQuickFix(path, project)}; |
| } |
| // define a new JRE |
| return new IMarkerResolution[]{new DefineSystemLibraryQuickFix()}; |
| } |
| break; |
| |
| // unbound classpath variable |
| case IJavaModelStatusConstants.CP_VARIABLE_PATH_UNBOUND : |
| arguments = CorrectionEngine.getProblemArguments(marker); |
| path = new Path(arguments[0]); |
| if (path.segment(0).equals(JavaRuntime.JRELIB_VARIABLE)) { |
| // unbound JRE_LIB |
| if (JREResolution.getAllVMs().length > 0) { |
| return new IMarkerResolution[]{new SelectDefaultSystemLibraryQuickFix()}; |
| } |
| // define a new default JRE |
| return new IMarkerResolution[]{new DefineSystemLibraryQuickFix()}; |
| } |
| break; |
| // deprecated JRE library variables |
| case IJavaModelStatusConstants.DEPRECATED_VARIABLE : |
| arguments = CorrectionEngine.getProblemArguments(marker); |
| path = new Path(arguments[0]); |
| if (path.segment(0).equals(JavaRuntime.JRELIB_VARIABLE) || |
| path.segment(0).equals(JavaRuntime.JRE_CONTAINER)) { |
| IJavaProject project = getJavaProject(marker); |
| return new IMarkerResolution[] {new SelectSystemLibraryQuickFix(path, project)}; |
| } |
| break; |
| } |
| } |
| catch(CoreException ce) {} |
| return NO_RESOLUTION; |
| } |
| |
| /** |
| * Returns the java project from the specified marker, or <code>null</code> if the marker |
| * does not have an associated java project |
| * @param marker |
| * @return the associated java project or <code>null</code> |
| */ |
| protected IJavaProject getJavaProject(IMarker marker) { |
| return JavaCore.create(marker.getResource().getProject()); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.IMarkerResolutionGenerator2#hasResolutions(org.eclipse.core.resources.IMarker) |
| */ |
| @Override |
| public boolean hasResolutions(IMarker marker) { |
| try { |
| String type = marker.getType(); |
| return IJavaModelMarker.BUILDPATH_PROBLEM_MARKER.equals(type) || |
| JavaRuntime.JRE_CONTAINER_MARKER.equals(type); |
| } catch (CoreException ce) {} |
| return false; |
| } |
| } |