package com.farata.cleardatabuilder.extjs.validation.correction; import java.util.ArrayList; import java.util.HashSet; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.apt.core.util.EclipseMessager; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.ui.text.java.IInvocationContext; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; import org.eclipse.jdt.ui.text.java.IProblemLocation; import org.eclipse.jdt.ui.text.java.IQuickFixProcessor; import com.farata.cleardatabuilder.extjs.validation.IValidationConstants; public class CDBQuickFixProcessor implements IQuickFixProcessor, IValidationConstants { @Override public IJavaCompletionProposal[] getCorrections(IInvocationContext context, IProblemLocation[] locations) throws CoreException { if (locations == null || locations.length == 0) return null; locations[0].getProblemArguments(); HashSet<String> handledProblems = new HashSet<String>(locations.length); ArrayList<IJavaCompletionProposal> resultingCollections = new ArrayList<IJavaCompletionProposal>(); for (int i = 0; i < locations.length; i++) { IProblemLocation curr = locations[i]; String[] args = curr.getProblemArguments(); if (args.length<2) { continue; } if (PLUGIN_ID.equals(args[0])) { String id = args[1]; if (handledProblems.add(id)) { process(id, context, curr, resultingCollections); } } } return (IJavaCompletionProposal[]) resultingCollections .toArray(new IJavaCompletionProposal[resultingCollections .size()]); } private void process(String id, IInvocationContext context, IProblemLocation problem, ArrayList<IJavaCompletionProposal> proposals) { if (ERROR_transferInfo_is_missing.equals(id)) { TransferInfoMissingSubProcessor.transferInfoMissingProposals(context, problem, proposals); } else if (ERROR_wrong_return_type.equals(id)) { WrongReturnTypeSubProcessor.wrongReturnTypeProposals(context, problem, proposals); } } @Override public boolean hasCorrections(ICompilationUnit icompilationunit, int i) { if (i == EclipseMessager.APT_QUICK_FIX_PROBLEM_ID) { return true; } return false; } }