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 index 000000000000..f6d5acf594cf --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalHandler.java @@ -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 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; + } +} diff --git a/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalInspection.java b/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalInspection.java index 85d04e9abe00..d14eb9dc930d 100644 --- a/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalInspection.java @@ -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; diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java index c3fec9f74ba6..02554ab35332 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/style/FieldMayBeFinalInspection.java @@ -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; } diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index adb4c5cd8e46..472fdda42908 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -65,6 +65,8 @@ +