package org.pdtextensions.semanticanalysis.ui.quickfix; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.dltk.compiler.problem.IProblemIdentifier; import org.eclipse.dltk.core.ISourceModule; import org.eclipse.dltk.ui.text.completion.IScriptCompletionProposal; import org.eclipse.php.ui.text.correction.IInvocationContext; import org.eclipse.php.ui.text.correction.IProblemLocation; import org.eclipse.php.ui.text.correction.IQuickFixProcessor; import org.pdtextensions.internal.semanticanalysis.validation.PEXProblemIdentifier; import org.pdtextensions.semanticanalysis.ui.contentassist.InjectUseStatementCompletionProposal; public class ReferenceQuickFixProcessor implements IQuickFixProcessor { @Override public boolean hasCorrections(ISourceModule unit, IProblemIdentifier identifier) { return identifier == PEXProblemIdentifier.USAGE_RELATED; } @Override public IScriptCompletionProposal[] getCorrections(IInvocationContext context, IProblemLocation[] locations) throws CoreException { List<IScriptCompletionProposal> corrections = new ArrayList<IScriptCompletionProposal>(); List<String> existing = new ArrayList<String>(); for (IProblemLocation location : locations) { String offset = Integer.toString(location.getOffset()); if (location.getProblemIdentifier() == PEXProblemIdentifier.USAGE_RELATED && ! existing.contains(offset)) { InjectUseStatementCompletionProposal prop = new InjectUseStatementCompletionProposal("", location.getOffset(), location.getLength(), null, "Inject missing use statement", 100); corrections.add(prop); existing.add(offset); } } return corrections.toArray(new IScriptCompletionProposal[corrections.size()]); } }