package org.eclipse.dltk.javascript.internal.ui.quickfix; import java.util.ArrayList; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.dltk.compiler.problem.DefaultProblemIdentifier; import org.eclipse.dltk.compiler.problem.IProblemIdentifier; import org.eclipse.dltk.compiler.problem.ProblemCategoryManager; import org.eclipse.dltk.javascript.core.JavaScriptNature; import org.eclipse.dltk.javascript.core.JavaScriptProblems; import org.eclipse.dltk.javascript.parser.jsdoc.JSDocTag; import org.eclipse.ui.IMarkerResolution; import org.eclipse.ui.IMarkerResolutionGenerator; public class JSProblemMarkerResolutionGenerator implements IMarkerResolutionGenerator { private static IMarkerResolution[] NONE = new IMarkerResolution[0]; public IMarkerResolution[] getResolutions(IMarker marker) { IProblemIdentifier problemId = DefaultProblemIdentifier .getProblemId(marker); if (problemId == JavaScriptProblems.UNDECLARED_VARIABLE) { CreateTopLevelVariable createTopLevelVariable = new CreateTopLevelVariable( (IFile) marker.getResource(), marker.getAttribute( IMarker.CHAR_START, -1)); if (createTopLevelVariable.isValid()) { return new IMarkerResolution[] { new CreateLocalVariableQuickFix( (IFile) marker.getResource(), marker.getAttribute(IMarker.CHAR_START, -1)), createTopLevelVariable }; } else { return new IMarkerResolution[] { new CreateLocalVariableQuickFix( (IFile) marker.getResource(), marker.getAttribute( IMarker.CHAR_START, -1)) }; } } else { String[] ids = ProblemCategoryManager.getInstance().getID( JavaScriptNature.NATURE_ID, JSDocTag.SUPPRESS_WARNINGS, problemId); if (ids.length > 0) { ArrayList<IMarkerResolution> resolutions = new ArrayList<IMarkerResolution>(); for (int i = 0; i < ids.length; i++) { GenerateSuppressWarningsResolution resolution = new GenerateSuppressWarningsResolution( (IFile) marker.getResource(), marker.getAttribute( IMarker.CHAR_START, -1), ids[i]); if (resolution.isValid()) { resolutions.add(resolution); } } return resolutions.toArray(new IMarkerResolution[resolutions .size()]); } } return NONE; } }