private ICompletionProposal[] getJavaAnnotationFixes(IJavaAnnotation javaAnnotation) { ProblemLocation location = new ProblemLocation(position.getOffset(), position.getLength(), javaAnnotation); ICompilationUnit cu = javaAnnotation.getCompilationUnit(); if (cu == null) return NO_PROPOSALS; ISourceViewer sourceViewer = null; if (viewer instanceof ISourceViewer) sourceViewer = (ISourceViewer) viewer; IInvocationContext context = new AssistContext( cu, sourceViewer, location.getOffset(), location.getLength(), SharedASTProvider.WAIT_ACTIVE_ONLY); if (!SpellingAnnotation.TYPE.equals(javaAnnotation.getType()) && !hasProblem(context.getASTRoot().getProblems(), location)) return NO_PROPOSALS; ArrayList proposals = new ArrayList(); JavaCorrectionProcessor.collectCorrections( context, new IProblemLocation[] {location}, proposals); Collections.sort(proposals, new CompletionProposalComparator()); return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]); }
public static void getInvalidQualificationProposals( IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) { ASTNode node = problem.getCoveringNode(context.getASTRoot()); if (!(node instanceof Name)) { return; } Name name = (Name) node; IBinding binding = name.resolveBinding(); if (!(binding instanceof ITypeBinding)) { return; } ITypeBinding typeBinding = (ITypeBinding) binding; AST ast = node.getAST(); ASTRewrite rewrite = ASTRewrite.create(ast); rewrite.replace(name, ast.newName(typeBinding.getQualifiedName()), null); String label = CorrectionMessages.JavadocTagsSubProcessor_qualifylinktoinner_description; Image image = JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE); ASTRewriteCorrectionProposal proposal = new ASTRewriteCorrectionProposal( label, context.getCompilationUnit(), rewrite, IProposalRelevance.QUALIFY_INNER_TYPE_NAME, image); proposals.add(proposal); }
@Override public JavaContentAssistInvocationContext apply(IInvocationContext context) { ICompilationUnit cu = context.getCompilationUnit(); int offset = context.getSelectionOffset(); try { cu.codeComplete( offset, new CompletionRequestor() { @Override public void acceptContext(CompletionContext context) { internalContext = context; } @Override public boolean isExtendedContextRequired() { return true; } @Override public void accept(CompletionProposal proposal) {} }); } catch (JavaModelException e) { propagate(e); } JavaEditor editor = cast(EditorUtility.isOpenInEditor(cu)); ISourceViewer viewer = editor.getViewer(); return new JavaContentAssistInvocationContext(viewer, offset, editor) { @Override public CompletionContext getCoreContext() { return internalContext; } }; }
public boolean hasAssists(IInvocationContext context) throws CoreException { IProblem[] problems = context.getASTRoot().getProblems(); for (int i = 0; i < problems.length; i++) { if (hasCorrections(context.getCompilationUnit(), problems[i].getID())) { return true; } } return false; }
public static void getMissingJavadocTagProposals( IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) { ASTNode node = problem.getCoveringNode(context.getASTRoot()); if (node == null) { return; } node = ASTNodes.getNormalizedNode(node); BodyDeclaration bodyDeclaration = ASTResolving.findParentBodyDeclaration(node); if (bodyDeclaration == null) { return; } Javadoc javadoc = bodyDeclaration.getJavadoc(); if (javadoc == null) { return; } String label; StructuralPropertyDescriptor location = node.getLocationInParent(); if (location == SingleVariableDeclaration.NAME_PROPERTY) { label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_paramtag_description; if (node.getParent().getLocationInParent() != MethodDeclaration.PARAMETERS_PROPERTY) { return; // paranoia checks } } else if (location == TypeParameter.NAME_PROPERTY) { label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_paramtag_description; StructuralPropertyDescriptor parentLocation = node.getParent().getLocationInParent(); if (parentLocation != MethodDeclaration.TYPE_PARAMETERS_PROPERTY && parentLocation != TypeDeclaration.TYPE_PARAMETERS_PROPERTY) { return; // paranoia checks } } else if (location == MethodDeclaration.RETURN_TYPE2_PROPERTY) { label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_returntag_description; } else if (location == MethodDeclaration.THROWN_EXCEPTION_TYPES_PROPERTY) { label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_throwstag_description; } else { return; } ASTRewriteCorrectionProposal proposal = new AddMissingJavadocTagProposal( label, context.getCompilationUnit(), bodyDeclaration, node, IProposalRelevance.ADD_MISSING_TAG); proposals.add(proposal); String label2 = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_allmissing_description; ASTRewriteCorrectionProposal addAllMissing = new AddAllMissingJavadocTagsProposal( label2, context.getCompilationUnit(), bodyDeclaration, IProposalRelevance.ADD_ALL_MISSING_TAGS); proposals.add(addAllMissing); }
public FixCorrectionProposal( IProposableFix fix, ICleanUp cleanUp, int relevance, Image image, IInvocationContext context) { super(fix.getDisplayString(), context.getCompilationUnit(), null, relevance, image); fFix = fix; fCleanUp = cleanUp; fCompilationUnit = context.getASTRoot(); }
/* * @see org.eclipse.jface.text.contentassist.ICompletionProposal#getSelection(org.eclipse.jface.text.IDocument) */ public final Point getSelection(final IDocument document) { int offset = fContext.getSelectionOffset(); int length = fContext.getSelectionLength(); final int delta = fWord.length() - fLength; if (offset <= fOffset && offset + length >= fOffset) length += delta; else if (offset > fOffset && offset + length > fOffset + fLength) { offset += delta; length -= delta; } else length += delta; return new Point(offset, length); }
public static void getUnusedAndUndocumentedParameterOrExceptionProposals( IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) { ICompilationUnit cu = context.getCompilationUnit(); IJavaProject project = cu.getJavaProject(); if (!JavaCore.ENABLED.equals(project.getOption(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, true))) { return; } int problemId = problem.getProblemId(); boolean isUnusedTypeParam = problemId == IProblem.UnusedTypeParameter; boolean isUnusedParam = problemId == IProblem.ArgumentIsNeverUsed || isUnusedTypeParam; String key = isUnusedParam ? JavaCore.COMPILER_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE : JavaCore.COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_INCLUDE_DOC_COMMENT_REFERENCE; if (!JavaCore.ENABLED.equals(project.getOption(key, true))) { return; } ASTNode node = problem.getCoveringNode(context.getASTRoot()); if (node == null) { return; } BodyDeclaration bodyDecl = ASTResolving.findParentBodyDeclaration(node); if (bodyDecl == null || ASTResolving.getParentMethodOrTypeBinding(bodyDecl) == null) { return; } String label; if (isUnusedTypeParam) { label = CorrectionMessages.JavadocTagsSubProcessor_document_type_parameter_description; } else if (isUnusedParam) { label = CorrectionMessages.JavadocTagsSubProcessor_document_parameter_description; } else { node = ASTNodes.getNormalizedNode(node); label = CorrectionMessages.JavadocTagsSubProcessor_document_exception_description; } ASTRewriteCorrectionProposal proposal = new AddMissingJavadocTagProposal( label, context.getCompilationUnit(), bodyDecl, node, IProposalRelevance.DOCUMENT_UNUSED_ITEM); proposals.add(proposal); }
private ICompletionProposal getLocalRenameProposal(IInvocationContext context) { ASTNode node = context.getCoveringNode(); if (node instanceof SimpleName) { return new LinkedNamesAssistProposal(context, (SimpleName) node); } return null; }
private static IAction[] getTemplateActions(JavaEditor editor) { ITextSelection textSelection = getTextSelection(editor); if (textSelection == null || textSelection.getLength() == 0) return null; ICompilationUnit cu = JavaUI.getWorkingCopyManager().getWorkingCopy(editor.getEditorInput()); if (cu == null) return null; QuickTemplateProcessor quickTemplateProcessor = new QuickTemplateProcessor(); IInvocationContext context = new AssistContext(cu, textSelection.getOffset(), textSelection.getLength()); try { IJavaCompletionProposal[] proposals = quickTemplateProcessor.getAssists(context, null); if (proposals == null || proposals.length == 0) return null; return getActionsFromProposals(proposals, context.getSelectionOffset(), editor.getViewer()); } catch (CoreException e) { JavaPlugin.log(e); } return null; }
public static void getRemoveJavadocTagProposals( IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) { ASTNode node = problem.getCoveringNode(context.getASTRoot()); while (node != null && !(node instanceof TagElement)) { node = node.getParent(); } if (node == null) { return; } ASTRewrite rewrite = ASTRewrite.create(node.getAST()); rewrite.remove(node, null); String label = CorrectionMessages.JavadocTagsSubProcessor_removetag_description; Image image = JavaPlugin.getDefault() .getWorkbench() .getSharedImages() .getImage(ISharedImages.IMG_TOOL_DELETE); proposals.add( new ASTRewriteCorrectionProposal( label, context.getCompilationUnit(), rewrite, IProposalRelevance.REMOVE_TAG, image)); }
/** * This method inserts our proposal - jar library - into classpath. * * @param document see super method. * @see * org.eclipse.jface.text.contentassist.ICompletionProposal#apply(org.eclipse.jface.text.IDocument) */ public void apply(final IDocument document) { final IJavaProject project = context.getCompilationUnit().getJavaProject(); final Shell shell = PerclipseActivator.getActivePage().getWorkbenchWindow().getShell(); try { IClasspathEntry entry = null; if (isPerfidix) { entry = BuildPathSupport.getPerfidixClasspathEntry(); } if (entry != null) { addToClasspath(shell, project, entry, new BusyIndicatorRunnableContext()); } final int offset = context.getSelectionOffset(); final int length = context.getSelectionLength(); String str; str = document.get(offset, length); document.replace(offset, length, str); } catch (BadLocationException e) { PerclipseActivator.log(e); } catch (JavaModelException e) { PerclipseActivator.log(e); } }
/** {@inheritDoc} */ public Point getSelection(final IDocument arg0) { return new Point(context.getSelectionOffset(), context.getSelectionLength()); }
public static void getMissingJavadocCommentProposals( IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException { ASTNode node = problem.getCoveringNode(context.getASTRoot()); if (node == null) { return; } BodyDeclaration declaration = ASTResolving.findParentBodyDeclaration(node); if (declaration == null) { return; } ICompilationUnit cu = context.getCompilationUnit(); ITypeBinding binding = Bindings.getBindingOfParentType(declaration); if (binding == null) { return; } if (declaration instanceof MethodDeclaration) { MethodDeclaration methodDecl = (MethodDeclaration) declaration; IMethodBinding methodBinding = methodDecl.resolveBinding(); IMethodBinding overridden = null; if (methodBinding != null) { overridden = Bindings.findOverriddenMethod(methodBinding, true); } String string = CodeGeneration.getMethodComment( cu, binding.getName(), methodDecl, overridden, String.valueOf('\n')); if (string != null) { String label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_method_description; proposals.add( new AddJavadocCommentProposal( label, cu, IProposalRelevance.ADD_JAVADOC_METHOD, declaration.getStartPosition(), string)); } } else if (declaration instanceof AbstractTypeDeclaration) { String typeQualifiedName = Bindings.getTypeQualifiedName(binding); String[] typeParamNames; if (declaration instanceof TypeDeclaration) { List<TypeParameter> typeParams = ((TypeDeclaration) declaration).typeParameters(); typeParamNames = new String[typeParams.size()]; for (int i = 0; i < typeParamNames.length; i++) { typeParamNames[i] = (typeParams.get(i)).getName().getIdentifier(); } } else { typeParamNames = new String[0]; } String string = CodeGeneration.getTypeComment( cu, typeQualifiedName, typeParamNames, String.valueOf('\n')); if (string != null) { String label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_type_description; proposals.add( new AddJavadocCommentProposal( label, cu, IProposalRelevance.ADD_JAVADOC_TYPE, declaration.getStartPosition(), string)); } } else if (declaration instanceof FieldDeclaration) { String comment = "/**\n *\n */\n"; // $NON-NLS-1$ List<VariableDeclarationFragment> fragments = ((FieldDeclaration) declaration).fragments(); if (fragments != null && fragments.size() > 0) { VariableDeclaration decl = fragments.get(0); String fieldName = decl.getName().getIdentifier(); String typeName = binding.getName(); comment = CodeGeneration.getFieldComment(cu, typeName, fieldName, String.valueOf('\n')); } if (comment != null) { String label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_field_description; proposals.add( new AddJavadocCommentProposal( label, cu, IProposalRelevance.ADD_JAVADOC_FIELD, declaration.getStartPosition(), comment)); } } else if (declaration instanceof EnumConstantDeclaration) { EnumConstantDeclaration enumDecl = (EnumConstantDeclaration) declaration; String id = enumDecl.getName().getIdentifier(); String comment = CodeGeneration.getFieldComment(cu, binding.getName(), id, String.valueOf('\n')); String label = CorrectionMessages.JavadocTagsSubProcessor_addjavadoc_enumconst_description; proposals.add( new AddJavadocCommentProposal( label, cu, IProposalRelevance.ADD_JAVADOC_ENUM, declaration.getStartPosition(), comment)); } }
private void process( IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException { int id = problem.getProblemId(); if (id == 0) { // no proposals for none-problem locations return; } switch (id) { case IProblem.UnterminatedString: String quoteLabel = CorrectionMessages.JavaCorrectionProcessor_addquote_description; int pos = moveBack( problem.getOffset() + problem.getLength(), problem.getOffset(), "\n\r", context.getCompilationUnit()); // $NON-NLS-1$ proposals.add( new ReplaceCorrectionProposal( quoteLabel, context.getCompilationUnit(), pos, 0, "\"", 0)); // $NON-NLS-1$ break; case IProblem.UnusedImport: case IProblem.DuplicateImport: case IProblem.CannotImportPackage: case IProblem.ConflictingImport: ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals); break; case IProblem.ImportNotFound: ReorgCorrectionsSubProcessor.importNotFoundProposals(context, problem, proposals); ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals); break; case IProblem.UndefinedMethod: UnresolvedElementsSubProcessor.getMethodProposals(context, problem, false, proposals); break; case IProblem.UndefinedConstructor: UnresolvedElementsSubProcessor.getConstructorProposals(context, problem, proposals); break; case IProblem.UndefinedAnnotationMember: UnresolvedElementsSubProcessor.getAnnotationMemberProposals(context, problem, proposals); break; case IProblem.ParameterMismatch: UnresolvedElementsSubProcessor.getMethodProposals(context, problem, true, proposals); break; case IProblem.MethodButWithConstructorName: ReturnTypeSubProcessor.addMethodWithConstrNameProposals(context, problem, proposals); break; case IProblem.UndefinedField: case IProblem.UndefinedName: UnresolvedElementsSubProcessor.getVariableProposals(context, problem, null, proposals); break; case IProblem.AmbiguousType: case IProblem.JavadocAmbiguousType: UnresolvedElementsSubProcessor.getAmbiguosTypeReferenceProposals( context, problem, proposals); break; case IProblem.PublicClassMustMatchFileName: ReorgCorrectionsSubProcessor.getWrongTypeNameProposals(context, problem, proposals); break; case IProblem.PackageIsNotExpectedPackage: ReorgCorrectionsSubProcessor.getWrongPackageDeclNameProposals(context, problem, proposals); break; case IProblem.UndefinedType: case IProblem.JavadocUndefinedType: UnresolvedElementsSubProcessor.getTypeProposals(context, problem, proposals); break; case IProblem.TypeMismatch: // AspectJ Change if (problem.getProblemArguments() != null) { // Bug 265052 TypeMismatchSubProcessor.addTypeMismatchProposals(context, problem, proposals); } break; case IProblem.IncompatibleReturnType: TypeMismatchSubProcessor.addIncompatibleReturnTypeProposals(context, problem, proposals); break; case IProblem.IncompatibleExceptionInThrowsClause: TypeMismatchSubProcessor.addIncompatibleThrowsProposals(context, problem, proposals); break; case IProblem.UnhandledException: LocalCorrectionsSubProcessor.addUncaughtExceptionProposals(context, problem, proposals); break; case IProblem.UnreachableCatch: case IProblem.InvalidCatchBlockSequence: LocalCorrectionsSubProcessor.addUnreachableCatchProposals(context, problem, proposals); break; case IProblem.VoidMethodReturnsValue: ReturnTypeSubProcessor.addVoidMethodReturnsProposals(context, problem, proposals); break; case IProblem.MethodReturnsVoid: ReturnTypeSubProcessor.addMethodRetunsVoidProposals(context, problem, proposals); break; case IProblem.MissingReturnType: ReturnTypeSubProcessor.addMissingReturnTypeProposals(context, problem, proposals); break; case IProblem.ShouldReturnValue: ReturnTypeSubProcessor.addMissingReturnStatementProposals(context, problem, proposals); break; case IProblem.NonExternalizedStringLiteral: LocalCorrectionsSubProcessor.addNLSProposals(context, problem, proposals); break; case IProblem.UnnecessaryNLSTag: LocalCorrectionsSubProcessor.getUnnecessaryNLSTagProposals(context, problem, proposals); break; case IProblem.NonStaticAccessToStaticField: case IProblem.NonStaticAccessToStaticMethod: case IProblem.IndirectAccessToStaticField: case IProblem.IndirectAccessToStaticMethod: LocalCorrectionsSubProcessor.addCorrectAccessToStaticProposals(context, problem, proposals); break; case IProblem.StaticMethodRequested: case IProblem.NonStaticFieldFromStaticInvocation: case IProblem.InstanceMethodDuringConstructorInvocation: case IProblem.InstanceFieldDuringConstructorInvocation: ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal( context, problem, proposals, ModifierCorrectionSubProcessor.TO_STATIC, 5); break; case IProblem.NonBlankFinalLocalAssignment: case IProblem.DuplicateFinalLocalInitialization: case IProblem.FinalFieldAssignment: case IProblem.DuplicateBlankFinalFieldInitialization: case IProblem.AnonymousClassCannotExtendFinalClass: case IProblem.ClassExtendFinalClass: ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal( context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL, 9); break; case IProblem.InheritedMethodReducesVisibility: case IProblem.MethodReducesVisibility: case IProblem.OverridingNonVisibleMethod: ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal( context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE); break; case IProblem.FinalMethodCannotBeOverridden: ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal( context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL); break; case IProblem.CannotOverrideAStaticMethodWithAnInstanceMethod: ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal( context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_STATIC); break; case IProblem.CannotHideAnInstanceMethodWithAStaticMethod: case IProblem.IllegalModifierForInterfaceMethod: case IProblem.IllegalModifierForInterface: case IProblem.IllegalModifierForClass: case IProblem.IllegalModifierForInterfaceField: case IProblem.IllegalModifierForMemberInterface: case IProblem.IllegalModifierForMemberClass: case IProblem.IllegalModifierForLocalClass: case IProblem.IllegalModifierForArgument: case IProblem.IllegalModifierForField: case IProblem.IllegalModifierForMethod: case IProblem.IllegalModifierForVariable: case IProblem.IllegalVisibilityModifierForInterfaceMemberType: case IProblem.UnexpectedStaticModifierForMethod: ModifierCorrectionSubProcessor.addRemoveInvalidModifiersProposal( context, problem, proposals, 5); break; case IProblem.NotVisibleMethod: case IProblem.NotVisibleConstructor: case IProblem.NotVisibleType: case IProblem.NotVisibleField: case IProblem.JavadocNotVisibleType: ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal( context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE, 10); break; case IProblem.BodyForAbstractMethod: case IProblem.AbstractMethodInAbstractClass: ModifierCorrectionSubProcessor.addAbstractMethodProposals(context, problem, proposals); break; case IProblem.AbstractMethodMustBeImplemented: LocalCorrectionsSubProcessor.addUnimplementedMethodsProposals(context, problem, proposals); break; case IProblem.MissingValueForAnnotationMember: LocalCorrectionsSubProcessor.addValueForAnnotationProposals(context, problem, proposals); break; case IProblem.BodyForNativeMethod: ModifierCorrectionSubProcessor.addNativeMethodProposals(context, problem, proposals); break; case IProblem.MethodRequiresBody: ModifierCorrectionSubProcessor.addMethodRequiresBodyProposals(context, problem, proposals); break; case IProblem.OuterLocalMustBeFinal: ModifierCorrectionSubProcessor.addNonFinalLocalProposal(context, problem, proposals); break; case IProblem.UninitializedLocalVariable: LocalCorrectionsSubProcessor.addUninitializedLocalVariableProposal( context, problem, proposals); break; case IProblem.UnhandledExceptionInDefaultConstructor: case IProblem.UndefinedConstructorInDefaultConstructor: case IProblem.NotVisibleConstructorInDefaultConstructor: LocalCorrectionsSubProcessor.addConstructorFromSuperclassProposal( context, problem, proposals); break; case IProblem.UnusedPrivateMethod: case IProblem.UnusedPrivateConstructor: case IProblem.UnusedPrivateField: case IProblem.UnusedPrivateType: case IProblem.LocalVariableIsNeverUsed: case IProblem.ArgumentIsNeverUsed: LocalCorrectionsSubProcessor.addUnusedMemberProposal(context, problem, proposals); break; case IProblem.NeedToEmulateFieldReadAccess: case IProblem.NeedToEmulateFieldWriteAccess: case IProblem.NeedToEmulateMethodAccess: case IProblem.NeedToEmulateConstructorAccess: ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal( context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_PRIVATE, 5); break; case IProblem.SuperfluousSemicolon: LocalCorrectionsSubProcessor.addSuperfluousSemicolonProposal(context, problem, proposals); break; case IProblem.UnnecessaryCast: LocalCorrectionsSubProcessor.addUnnecessaryCastProposal(context, problem, proposals); break; case IProblem.UnnecessaryInstanceof: LocalCorrectionsSubProcessor.addUnnecessaryInstanceofProposal(context, problem, proposals); break; case IProblem.UnusedMethodDeclaredThrownException: case IProblem.UnusedConstructorDeclaredThrownException: LocalCorrectionsSubProcessor.addUnnecessaryThrownExceptionProposal( context, problem, proposals); break; case IProblem.UnqualifiedFieldAccess: LocalCorrectionsSubProcessor.addUnqualifiedFieldAccessProposal(context, problem, proposals); break; case IProblem.Task: proposals.add(new TaskMarkerProposal(context.getCompilationUnit(), problem, 10)); break; case IProblem.JavadocMissing: JavadocTagsSubProcessor.getMissingJavadocCommentProposals(context, problem, proposals); break; case IProblem.JavadocMissingParamTag: case IProblem.JavadocMissingReturnTag: case IProblem.JavadocMissingThrowsTag: JavadocTagsSubProcessor.getMissingJavadocTagProposals(context, problem, proposals); break; case IProblem.JavadocInvalidThrowsClassName: case IProblem.JavadocDuplicateThrowsClassName: case IProblem.JavadocDuplicateReturnTag: case IProblem.JavadocDuplicateParamName: case IProblem.JavadocInvalidParamName: case IProblem.JavadocUnexpectedTag: case IProblem.JavadocInvalidTag: JavadocTagsSubProcessor.getRemoveJavadocTagProposals(context, problem, proposals); break; case IProblem.LocalVariableHidingLocalVariable: case IProblem.LocalVariableHidingField: case IProblem.FieldHidingLocalVariable: case IProblem.FieldHidingField: case IProblem.ArgumentHidingLocalVariable: case IProblem.ArgumentHidingField: case IProblem.UseAssertAsAnIdentifier: case IProblem.UseEnumAsAnIdentifier: case IProblem.RedefinedLocal: case IProblem.RedefinedArgument: LocalCorrectionsSubProcessor.addInvalidVariableNameProposals(context, problem, proposals); break; case IProblem.NoMessageSendOnArrayType: UnresolvedElementsSubProcessor.getArrayAccessProposals(context, problem, proposals); break; case IProblem.InvalidOperator: LocalCorrectionsSubProcessor.getInvalidOperatorProposals(context, problem, proposals); break; case IProblem.MissingSerialVersion: SerialVersionSubProcessor.getSerialVersionProposals(context, problem, proposals); break; case IProblem.UnnecessaryElse: LocalCorrectionsSubProcessor.getUnnecessaryElseProposals(context, problem, proposals); break; case IProblem.SuperclassMustBeAClass: LocalCorrectionsSubProcessor.getInterfaceExtendsClassProposals(context, problem, proposals); break; case IProblem.CodeCannotBeReached: LocalCorrectionsSubProcessor.getUnreachableCodeProposals(context, problem, proposals); break; case IProblem.InvalidUsageOfTypeParameters: case IProblem.InvalidUsageOfStaticImports: case IProblem.InvalidUsageOfForeachStatements: case IProblem.InvalidUsageOfTypeArguments: case IProblem.InvalidUsageOfEnumDeclarations: case IProblem.InvalidUsageOfVarargs: case IProblem.InvalidUsageOfAnnotations: case IProblem.InvalidUsageOfAnnotationDeclarations: // FICXADE Need reflection here! // ECLIPSE 3.8 // ReorgCorrectionsSubProcessor.getNeedHigherComplianceProposals(context, // problem, proposals, JavaCore.VERSION_1_5); // ORIG // ReorgCorrectionsSubProcessor.getNeed50ComplianceProposals(context, // problem, proposals); break; case IProblem.NonGenericType: TypeArgumentMismatchSubProcessor.removeMismatchedArguments(context, problem, proposals); break; case IProblem.MissingOverrideAnnotation: ModifierCorrectionSubProcessor.addOverrideAnnotationProposal(context, problem, proposals); break; case IProblem.FieldMissingDeprecatedAnnotation: case IProblem.MethodMissingDeprecatedAnnotation: case IProblem.TypeMissingDeprecatedAnnotation: ModifierCorrectionSubProcessor.addDeprecatedAnnotationProposal(context, problem, proposals); break; case IProblem.IsClassPathCorrect: ReorgCorrectionsSubProcessor.getIncorrectBuildPathProposals(context, problem, proposals); break; case IProblem.ForbiddenReference: case IProblem.DiscouragedReference: ReorgCorrectionsSubProcessor.getAccessRulesProposals(context, problem, proposals); break; case IProblem.AssignmentHasNoEffect: LocalCorrectionsSubProcessor.getAssignmentHasNoEffectProposals(context, problem, proposals); break; case IProblem.UnsafeTypeConversion: case IProblem.RawTypeReference: case IProblem.UnsafeRawMethodInvocation: LocalCorrectionsSubProcessor.addTypePrametersToRawTypeReference( context, problem, proposals); break; case IProblem.FallthroughCase: LocalCorrectionsSubProcessor.addFallThroughProposals(context, problem, proposals); break; case IProblem.UnhandledWarningToken: SuppressWarningsSubProcessor.addUnknownSuppressWarningProposals( context, problem, proposals); break; default: } if (JavaModelUtil.is50OrHigher(context.getCompilationUnit().getJavaProject())) { SuppressWarningsSubProcessor.addSuppressWarningsProposals(context, problem, proposals); } }
@Override public IJavaCompletionProposal[] getAssists( IInvocationContext context, IProblemLocation[] locations) throws CoreException { ICompilationUnit compilationUnit = context.getCompilationUnit(); IType primaryType = compilationUnit.findPrimaryType(); if (primaryType == null || !primaryType.isInterface()) ; // return null; IJavaElement[] elements = compilationUnit.codeSelect(context.getSelectionOffset(), context.getSelectionLength()); for (IJavaElement element : elements) { if (element.getElementType() == IJavaElement.METHOD) { IMethod method = (IMethod) element; if (!method.getDeclaringType().isInterface()) return null; final String statementAnnotation = getStatementAnnotation(method); if (method.getParameters().length == 0 && statementAnnotation == null) return null; CompilationUnit astNode = getAstNode(compilationUnit); astNode.recordModifications(); final MapperMethod mapperMethod = getMapperMethod(astNode, method); if (mapperMethod == null) return null; List<IJavaCompletionProposal> proposals = new ArrayList<IJavaCompletionProposal>(); if (method.getParameters().length > 0) { proposals.add( new QuickAssistCompletionProposal("Add @Param to parameters") { private CompilationUnit astNode; private MapperMethod method; @SuppressWarnings("unchecked") @Override public void apply(IDocument document) { List<SingleVariableDeclaration> params = method.parameters(); for (SingleVariableDeclaration param : params) { List<IExtendedModifier> modifiers = param.modifiers(); if (!hasParamAnnotation(modifiers)) { if (JavaMapperUtil.TYPE_ROW_BOUNDS.equals( param.resolveBinding().getType().getQualifiedName())) continue; AST ast = param.getAST(); SingleMemberAnnotation annotation = ast.newSingleMemberAnnotation(); annotation.setTypeName(ast.newName("Param")); StringLiteral paramValue = ast.newStringLiteral(); paramValue.setLiteralValue(param.getName().getFullyQualifiedName()); annotation.setValue(paramValue); param.modifiers().add(annotation); } } TextEdit textEdit = astNode.rewrite(document, null); try { textEdit.apply(document); } catch (MalformedTreeException e) { Activator.log(Status.ERROR, e.getMessage(), e); } catch (BadLocationException e) { Activator.log(Status.ERROR, e.getMessage(), e); } } private boolean hasParamAnnotation(List<IExtendedModifier> modifiers) { for (IExtendedModifier modifier : modifiers) { if (modifier.isAnnotation() && "Param" .equals( ((Annotation) modifier).getTypeName().getFullyQualifiedName())) { return true; } } return false; } private QuickAssistCompletionProposal init( CompilationUnit astNode, MapperMethod method) { this.astNode = astNode; this.method = method; return this; } }.init(astNode, mapperMethod)); } if (mapperMethod.getStatement() != null) { proposals.add( new QuickAssistCompletionProposal( "Copy @" + statementAnnotation + " statement to clipboard") { @Override public void apply(IDocument document) { Clipboard clipboard = new Clipboard(Display.getCurrent()); clipboard.setContents( new Object[] {mapperMethod.getStatement()}, new Transfer[] {TextTransfer.getInstance()}); } }); } return proposals.toArray(new IJavaCompletionProposal[proposals.size()]); } } return null; }