mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java: Check reflection calls - cleanup upon review (IDEA-CR-20616, IDEA-172003)
This commit is contained in:
+6
-28
@@ -25,7 +25,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Iconable;
|
||||
import com.intellij.openapi.util.RecursionGuard;
|
||||
import com.intellij.openapi.util.RecursionManager;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
|
||||
@@ -247,6 +246,7 @@ public class JavaReflectionReferenceUtil {
|
||||
|
||||
@Nullable
|
||||
private static PsiExpression findFinalFieldDefinition(@NotNull PsiReferenceExpression referenceExpression, @NotNull PsiField field) {
|
||||
if (!field.hasModifierProperty(PsiModifier.FINAL)) return null;
|
||||
final PsiClass psiClass = ObjectUtils.tryCast(field.getParent(), PsiClass.class);
|
||||
if (psiClass != null) {
|
||||
final boolean isStatic = field.hasModifierProperty(PsiModifier.STATIC);
|
||||
@@ -273,34 +273,12 @@ public class JavaReflectionReferenceUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiExpression getAssignedExpression(@NotNull PsiMember maybeContainsAssignment, @NotNull PsiField field) {
|
||||
final Ref<PsiExpression> refResult = new Ref<>();
|
||||
maybeContainsAssignment.accept(new JavaRecursiveElementVisitor() {
|
||||
boolean stopped = false;
|
||||
|
||||
@Override
|
||||
public void visitElement(PsiElement element) {
|
||||
if (!stopped) {
|
||||
super.visitElement(element);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitExpression(PsiExpression expression) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitAssignmentExpression(PsiAssignmentExpression expression) {
|
||||
super.visitAssignmentExpression(expression);
|
||||
|
||||
if (VariableAccessUtils.evaluatesToVariable(expression.getLExpression(), field)) {
|
||||
refResult.set(expression.getRExpression());
|
||||
stopped = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
return refResult.get();
|
||||
final PsiAssignmentExpression assignment = SyntaxTraverser.psiTraverser(maybeContainsAssignment)
|
||||
.filter(PsiAssignmentExpression.class)
|
||||
.find(expression -> VariableAccessUtils.evaluatesToVariable(expression.getLExpression(), field));
|
||||
return assignment != null ? assignment.getRExpression() : null;
|
||||
}
|
||||
|
||||
private static PsiClass findClass(@NotNull String qualifiedName, @NotNull PsiElement context) {
|
||||
|
||||
@@ -43,11 +43,19 @@ class Vararg {
|
||||
myB = Class.forName("B");
|
||||
}
|
||||
|
||||
final Class<?> myB1;
|
||||
|
||||
Vararg(int n) throws Exception {
|
||||
Object bb = Array.newInstance(myB, n);
|
||||
Class<?> bc = bb.getClass();
|
||||
ourA.getConstructor(bc);
|
||||
ourA.getMethod("bar", String.class, bc);
|
||||
myB1 = B.class;
|
||||
}
|
||||
|
||||
void foo1() {
|
||||
ourA.getMethod("bar", myB1);
|
||||
ourA.getMethod(<warning descr="Cannot resolve method 'bar' with specified argument types">"bar"</warning>, myB1, String.class);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user