From ea5cfbb0d990bbd76213fa1fb213c0c7ce13bff9 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 2 Dec 2016 17:49:40 +0100 Subject: [PATCH] implicitly written field: fix to register annotations (IDEA-164948) --- .../intention/QuickFixFactory.java | 3 ++ .../analysis/PostHighlightingVisitor.java | 2 +- .../intention/EmptyQuickFixFactory.java | 8 +++- .../ex/EntryPointsManagerBase.java | 37 +++++++++++++++++++ .../impl/config/QuickFixFactoryImpl.java | 7 ++++ 5 files changed, 55 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java b/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java index 50a4ef4ea568..68a2e60f4bd1 100644 --- a/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java +++ b/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java @@ -241,6 +241,9 @@ public abstract class QuickFixFactory { @NotNull public abstract IntentionAction createAddToDependencyInjectionAnnotationsFix(@NotNull Project project, @NotNull String qualifiedName, @NotNull String element); + @NotNull + public abstract IntentionAction createAddToImplicitlyWrittenFieldsFix(Project project, @NotNull String qualifiedName); + @NotNull public abstract IntentionAction createCreateGetterOrSetterFix(boolean createGetter, boolean createSetter, @NotNull PsiField field); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java index cf9d60e1e4a6..2da5b63f4f23 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PostHighlightingVisitor.java @@ -336,7 +336,7 @@ class PostHighlightingVisitor { quickFixFactory.createCreateConstructorParameterFromFieldFix(field)); } SpecialAnnotationsUtilBase.createAddToSpecialAnnotationFixes(field, annoName -> { - QuickFixAction.registerQuickFixAction(info, quickFixFactory.createAddToDependencyInjectionAnnotationsFix(project, annoName, "fields")); + QuickFixAction.registerQuickFixAction(info, quickFixFactory.createAddToImplicitlyWrittenFieldsFix(project, annoName)); return true; }); return info; diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java b/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java index 6abc17f6cb12..2509fcaef466 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -547,6 +547,12 @@ public class EmptyQuickFixFactory extends QuickFixFactory { return QuickFixes.EMPTY_FIX; } + @NotNull + @Override + public IntentionAction createAddToImplicitlyWrittenFieldsFix(Project project, @NotNull String qualifiedName) { + return QuickFixes.EMPTY_FIX; + } + @NotNull @Override public IntentionAction createCreateGetterOrSetterFix(boolean b, boolean b2, @NotNull PsiField psiField) { diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerBase.java index 9849b1a32772..eae0faffa538 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/ex/EntryPointsManagerBase.java @@ -18,11 +18,14 @@ package com.intellij.codeInspection.ex; import com.intellij.ToolExtensionPoints; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; +import com.intellij.codeInsight.daemon.QuickFixBundle; +import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.reference.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.components.State; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.ExtensionPoint; import com.intellij.openapi.extensions.ExtensionPointListener; import com.intellij.openapi.extensions.Extensions; @@ -33,6 +36,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.JDOMExternalizableStringList; import com.intellij.profile.codeInspection.ProjectInspectionProfileManager; import com.intellij.psi.*; +import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import com.intellij.util.xmlb.SkipDefaultsSerializationFilter; @@ -645,6 +649,39 @@ public abstract class EntryPointsManagerBase extends EntryPointsManager implemen public boolean readWriteAccess = true; public String pattern = ""; + } + public class AddImplicitlyWriteAnnotation implements IntentionAction { + private final String myQualifiedName; + + public AddImplicitlyWriteAnnotation(String qualifiedName) {myQualifiedName = qualifiedName;} + + @Override + @NotNull + public String getText() { + return QuickFixBundle.message("fix.unused.symbol.injection.text", "fields", myQualifiedName); + } + + @Override + @NotNull + public String getFamilyName() { + return QuickFixBundle.message("fix.unused.symbol.injection.family"); + } + + @Override + public boolean isAvailable(@NotNull Project project1, Editor editor, PsiFile file) { + return true; + } + + @Override + public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { + myWriteAnnotations.add(myQualifiedName); + ProjectInspectionProfileManager.getInstance(project).fireProfileChanged(); + } + + @Override + public boolean startInWriteAction() { + return false; + } } } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java index 0eeeba2474de..888e90eac6c7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java @@ -681,6 +681,13 @@ public class QuickFixFactoryImpl extends QuickFixFactory { entryPointsManager.ADDITIONAL_ANNOTATIONS, qualifiedName); } + @NotNull + @Override + public IntentionAction createAddToImplicitlyWrittenFieldsFix(Project project, @NotNull final String qualifiedName) { + EntryPointsManagerBase entryPointsManagerBase = EntryPointsManagerBase.getInstance(project); + return entryPointsManagerBase.new AddImplicitlyWriteAnnotation(qualifiedName); + } + @NotNull @Override public IntentionAction createCreateGetterOrSetterFix(boolean createGetter, boolean createSetter, @NotNull PsiField field) {