#ref #loc
logger.initialized.with.foreign.class.display.name=Logger initialized with foreign class
logger.factory.method.name=Logger factory &method:
-non.constant.logger.quickfix=Make 'static final'
+make.static.final.quickfix=Make ''{0}'' static final
logging.condition.disagrees.with.log.statement.display.name=Logging condition does not match log statement
logging.condition.disagrees.with.log.statement.problem.descriptor=Logging condition #ref() does not match ''{0}()'' log statement #loc
log.statement.guarded.by.log.condition.display.name=Log statement not guarded by log condition
@@ -1752,4 +1752,6 @@ multiple.exceptions.declared.on.test.method.problem.descriptor=#ref
multiple.exceptions.declared.on.test.method.quickfix=Replace with 'throws Exception'
unnecessary.javadoc.link.display.name=Unnecessary JavaDoc link
unnecessary.javadoc.link.problem.descriptor=#ref is unnecessary
-unnecessary.javadoc.link.quickfix=Remove unnecessary {0}
\ No newline at end of file
+unnecessary.javadoc.link.quickfix=Remove unnecessary {0}
+thread.local.not.static.final.display.name=ThreadLocal field not declared static final
+thread.local.not.static.final.problem.descriptor=ThreadLocal #ref is not declared 'static final'
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java b/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java
index 9a754af755f5..3c56e8439c0f 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/InspectionGadgetsPlugin.java
@@ -849,6 +849,7 @@ public class InspectionGadgetsPlugin implements ApplicationComponent,
m_inspectionClasses.add(SynchronizeOnThisInspection.class);
m_inspectionClasses.add(SynchronizedMethodInspection.class);
m_inspectionClasses.add(SystemRunFinalizersOnExitInspection.class);
+ m_inspectionClasses.add(ThreadLocalNotStaticFinalInspection.class);
m_inspectionClasses.add(ThreadPriorityInspection.class);
m_inspectionClasses.add(ThreadRunInspection.class);
m_inspectionClasses.add(ThreadStartInConstructionInspection.class);
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/MakeFieldFinalFix.java b/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/MakeFieldFinalFix.java
index dbf6070944fe..fde37f045023 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/MakeFieldFinalFix.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/MakeFieldFinalFix.java
@@ -18,13 +18,10 @@ package com.siyeh.ig.fixes;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
-import com.intellij.psi.search.searches.ReferencesSearch;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
-import com.intellij.util.Query;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.InspectionGadgetsFix;
+import com.siyeh.ig.psiutils.FinalUtils;
import com.siyeh.ig.psiutils.InitializationUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -39,11 +36,7 @@ public class MakeFieldFinalFix extends InspectionGadgetsFix {
@Nullable
public static InspectionGadgetsFix buildFix(PsiField field) {
- if (field.hasModifierProperty(PsiModifier.STATIC)) {
- if (!canStaticFieldBeFinal(field)) {
- return null;
- }
- } else if (!canInstanceFieldBeFinal(field)) {
+ if (!FinalUtils.canFieldBeFinal(field)) {
return null;
}
final String name = field.getName();
@@ -55,77 +48,6 @@ public class MakeFieldFinalFix extends InspectionGadgetsFix {
return new MakeFieldFinalFix(field.getName());
}
- private static boolean canStaticFieldBeFinal(PsiField field) {
- final boolean hasInitializer = field.hasInitializer();
- final boolean initializedInOneStaticInitializer =
- isInitializedInOneStaticInitializer(field);
- if (hasInitializer) {
- if (initializedInOneStaticInitializer) {
- return false;
- }
- } else {
- if (!initializedInOneStaticInitializer) {
- return false;
- }
- }
- final Query|
+
+In the most common case a java.lang.ThreadLocal instance
+associates state with a thread. A non-static non-final
+java.lang.ThreadLocal field associates state with
+an instance-thread combination. This is seldom necessary and often a bug
+which can cause memory leaks and possibly incorrect behavior.
+ +This inspection has a quick fix to make the field static final + + |
| New in 9, Powered by InspectionGadgets |