mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-160864 (Wrong report of local variables or parameters unnecessarily declared final)
This commit is contained in:
+18
-28
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
|
||||
* Copyright 2003-2017 Dave Griffith, Bas Leijdekkers
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -149,14 +149,13 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseIn
|
||||
if (declaredElements.length == 0) {
|
||||
return;
|
||||
}
|
||||
for (final PsiElement declaredElement : declaredElements) {
|
||||
if (!(declaredElement instanceof PsiLocalVariable)) {
|
||||
return;
|
||||
}
|
||||
final PsiLocalVariable variable = (PsiLocalVariable)declaredElement;
|
||||
if (!variable.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
return;
|
||||
}
|
||||
final PsiElement firstElement = declaredElements[0];
|
||||
if (!(firstElement instanceof PsiLocalVariable)) {
|
||||
return;
|
||||
}
|
||||
final PsiLocalVariable firstVariable = (PsiLocalVariable)firstElement;
|
||||
if (!firstVariable.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
return;
|
||||
}
|
||||
final PsiCodeBlock containingBlock = PsiTreeUtil.getParentOfType(statement, PsiCodeBlock.class);
|
||||
if (containingBlock == null) {
|
||||
@@ -164,11 +163,11 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseIn
|
||||
}
|
||||
for (PsiElement declaredElement : declaredElements) {
|
||||
final PsiLocalVariable variable = (PsiLocalVariable)declaredElement;
|
||||
if (isNecessaryFinal(containingBlock, variable)) {
|
||||
if (isNecessaryFinal(variable, containingBlock)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
final PsiLocalVariable variable = (PsiLocalVariable)statement.getDeclaredElements()[0];
|
||||
final PsiLocalVariable variable = (PsiLocalVariable)firstElement;
|
||||
registerModifierError(PsiModifier.FINAL, variable, variable);
|
||||
}
|
||||
|
||||
@@ -189,21 +188,12 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseIn
|
||||
if (!parameter.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
return;
|
||||
}
|
||||
final PsiClass containingClass = method.getContainingClass();
|
||||
if (containingClass != null) {
|
||||
if (containingClass.isInterface() || containingClass.isAnnotationType()) {
|
||||
registerModifierError(PsiModifier.FINAL, parameter, parameter);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (method.hasModifierProperty(PsiModifier.ABSTRACT)) {
|
||||
registerModifierError(PsiModifier.FINAL, parameter, parameter);
|
||||
return;
|
||||
}
|
||||
if (onlyWarnOnAbstractMethods) {
|
||||
return;
|
||||
else if (!onlyWarnOnAbstractMethods) {
|
||||
check(parameter);
|
||||
}
|
||||
registerError(method, parameter);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -222,7 +212,7 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseIn
|
||||
if (!parameter.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
continue;
|
||||
}
|
||||
registerError(catchBlock, parameter);
|
||||
check(parameter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,15 +226,15 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspection extends BaseIn
|
||||
if (!parameter.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
return;
|
||||
}
|
||||
registerError(statement, parameter);
|
||||
check(parameter);
|
||||
}
|
||||
|
||||
private boolean isNecessaryFinal(PsiElement method, PsiVariable parameter) {
|
||||
return !PsiUtil.isLanguageLevel8OrHigher(parameter) && VariableAccessUtils.variableIsUsedInInnerClass(parameter, method);
|
||||
private boolean isNecessaryFinal(PsiVariable parameter, PsiElement context) {
|
||||
return !PsiUtil.isLanguageLevel8OrHigher(parameter) && VariableAccessUtils.variableIsUsedInInnerClass(parameter, context);
|
||||
}
|
||||
|
||||
private void registerError(PsiElement context, PsiVariable parameter) {
|
||||
if (!isNecessaryFinal(context, parameter)) {
|
||||
private void check(PsiParameter parameter) {
|
||||
if (!isNecessaryFinal(parameter, parameter.getDeclarationScope())) {
|
||||
registerModifierError(PsiModifier.FINAL, parameter, parameter);
|
||||
}
|
||||
}
|
||||
|
||||
+11
@@ -41,6 +41,17 @@ public class UnnecessaryFinalOnLocalVariableOrParameterInspectionJava8Test exten
|
||||
"}");
|
||||
}
|
||||
|
||||
public void testInterfaceMethods() {
|
||||
final UnnecessaryFinalOnLocalVariableOrParameterInspection inspection = new UnnecessaryFinalOnLocalVariableOrParameterInspection();
|
||||
inspection.onlyWarnOnAbstractMethods = true;
|
||||
myFixture.enableInspections(inspection);
|
||||
doTest("interface X {" +
|
||||
" default void m(final String s) {}" +
|
||||
" static void n(final String s) {}" +
|
||||
" void o(/*Unnecessary 'final' on parameter 's'*/final/**/ String s);" +
|
||||
"}");
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected InspectionProfileEntry getInspection() {
|
||||
|
||||
Reference in New Issue
Block a user