package com.farata.cleardatabuilder.extjs.validation.correction; import java.util.Collection; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.BodyDeclaration; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; import org.eclipse.jdt.core.dom.rewrite.ImportRewrite; import org.eclipse.jdt.internal.corext.util.Messages; import org.eclipse.jdt.internal.ui.JavaPluginImages; import org.eclipse.jdt.internal.ui.text.correction.ASTResolving; import org.eclipse.jdt.internal.ui.text.correction.CorrectionMessages; import org.eclipse.jdt.internal.ui.text.correction.proposals.LinkedCorrectionProposal; import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels; import org.eclipse.jdt.ui.text.java.IInvocationContext; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; import org.eclipse.jdt.ui.text.java.IProblemLocation; public class WrongReturnTypeSubProcessor { public static void wrongReturnTypeProposals(IInvocationContext context, IProblemLocation problem, Collection<IJavaCompletionProposal> proposals) { try { addTypeMismatchProposal(context, problem, proposals, "List"); addTypeMismatchProposal(context, problem, proposals, "Collection"); } catch (CoreException e) { e.printStackTrace(); } } public static void addTypeMismatchProposal(IInvocationContext context, IProblemLocation problem, Collection proposals, String simpleType) throws CoreException { String args[] = problem.getProblemArguments(); if (args.length != 2) return; org.eclipse.jdt.core.ICompilationUnit cu = context.getCompilationUnit(); CompilationUnit astRoot = context.getASTRoot(); AST ast = astRoot.getAST(); ASTNode selectedNode = problem.getCoveredNode(astRoot); BodyDeclaration decl = ASTResolving .findParentBodyDeclaration(selectedNode); if (decl instanceof MethodDeclaration) { MethodDeclaration methodDeclaration = (MethodDeclaration) decl; ASTRewrite rewrite = ASTRewrite.create(ast); String label = Messages .format( CorrectionMessages.TypeMismatchSubProcessor_changereturntype_description, BasicElementLabels.getJavaElementName("java.util." + simpleType)); org.eclipse.swt.graphics.Image image = JavaPluginImages .get("org.eclipse.jdt.ui.correction_change.gif"); LinkedCorrectionProposal proposal = new LinkedCorrectionProposal( label, cu, rewrite, 6, image); ImportRewrite imports = proposal.createImportRewrite(astRoot); String newReturnType = imports.addImport("java.util." + simpleType); rewrite.replace(methodDeclaration.getReturnType2(), rewrite .createStringPlaceholder(simpleType + "<?>", 43), null); proposals.add(proposal); } } }