extension to forbid suggestion of final modifier (IDEA-77156)
authorAnna Kozlova <anna.kozlova@jetbrains.com>
Tue, 31 Jan 2012 15:03:18 +0000 (19:03 +0400)
committerAnna Kozlova <anna.kozlova@jetbrains.com>
Tue, 31 Jan 2012 15:55:51 +0000 (19:55 +0400)
java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalHandler.java [new file with mode: 0644]
java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalInspection.java
plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java
resources/src/META-INF/IdeaPlugin.xml

diff --git a/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalHandler.java b/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalHandler.java
new file mode 100644 (file)
index 0000000..f6d5acf
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2000-2012 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.codeInspection.canBeFinal;
+
+import com.intellij.openapi.extensions.ExtensionPointName;
+import com.intellij.openapi.extensions.Extensions;
+import com.intellij.psi.PsiMember;
+
+/**
+ * User: anna
+ * Date: 1/31/12
+ */
+public abstract class CanBeFinalHandler {
+  public static final ExtensionPointName<CanBeFinalHandler> EP_NAME = ExtensionPointName.create("com.intellij.canBeFinal");
+
+  public abstract boolean canBeFinal(PsiMember member);
+
+  public static boolean allowToBeFinal(PsiMember member) {
+    for (CanBeFinalHandler handler : Extensions.getExtensions(EP_NAME)) {
+      if (!handler.canBeFinal(member)) return false;
+    }
+    return true;
+  }
+}
index 85d04e9abe0012260886aa6b621878d17cb241c2..d14eb9dc930d5df4596d110a5cd85c35ed7988af 100644 (file)
@@ -139,6 +139,9 @@ public class CanBeFinalInspection extends GlobalJavaInspectionTool {
       if (refElement.isFinal()) return null;
       if (!((RefElementImpl)refElement).checkFlag(CanBeFinalAnnotator.CAN_BE_FINAL_MASK)) return null;
 
+      final PsiMember psiMember = (PsiMember)refElement.getElement();
+      if (!CanBeFinalHandler.allowToBeFinal(psiMember)) return null;
+
       PsiIdentifier psiIdentifier = null;
       if (refElement instanceof RefClass) {
         RefClass refClass = (RefClass)refElement;
index c3fec9f74ba6e3424dc4f4a261b24ee325488859..02554ab35332619c94aea33743ee79c750c957de 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.siyeh.ig.style;
 
+import com.intellij.codeInspection.canBeFinal.CanBeFinalHandler;
 import com.intellij.psi.PsiField;
 import com.intellij.psi.PsiModifier;
 import com.siyeh.InspectionGadgetsBundle;
@@ -65,6 +66,7 @@ public class FieldMayBeFinalInspection extends BaseInspection {
           !field.hasModifierProperty(PsiModifier.PRIVATE)) {
         return;
       }
+      if (!CanBeFinalHandler.allowToBeFinal(field)) return;
       if (!FinalUtils.canBeFinal(field)) {
         return;
       }
index adb4c5cd8e460b0752217d4f8a4d4dfb6d1b5dc6..472fdda42908cd4c0e7b58e37e10eac30a398bf9 100644 (file)
@@ -65,6 +65,8 @@
     <extensionPoint name="unusedDeclarationFixProvider"
                     interface="com.intellij.codeInspection.reference.UnusedDeclarationFixProvider"/>
 
+    <extensionPoint name="canBeFinal"
+                    interface="com.intellij.codeInspection.canBeFinal.CanBeFinalHandler"/>
     <!-- PsiMember -->
     <extensionPoint name="javaDocNotNecessary"
                     interface="com.intellij.openapi.util.Condition"/>