mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Mutability: support initialized final fields
This commit is contained in:
@@ -6,6 +6,7 @@ package com.intellij.codeInspection.dataFlow;
|
||||
import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -52,6 +53,13 @@ public enum Mutability {
|
||||
AnnotationUtil.CHECK_INFERRED)) {
|
||||
return UNMODIFIABLE_VIEW;
|
||||
}
|
||||
if (owner instanceof PsiField && owner.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
PsiExpression initializer = PsiUtil.skipParenthesizedExprDown(((PsiField)owner).getInitializer());
|
||||
if (initializer instanceof PsiMethodCallExpression) {
|
||||
PsiMethod method = ((PsiMethodCallExpression)initializer).resolveMethod();
|
||||
return method == null ? UNKNOWN : getMutability(method);
|
||||
}
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,11 @@ import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
public class MutabilityJdk {
|
||||
static final List<String> LIST = Collections.unmodifiableList(Arrays.asList("foo", "bar"));
|
||||
|
||||
void testField() {
|
||||
LIST.<warning descr="Immutable object is modified">add</warning>("baz");
|
||||
}
|
||||
|
||||
void testEmpty() {
|
||||
List<String> list = Collections.emptyList();
|
||||
|
||||
Reference in New Issue
Block a user