mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-inspection] IDEA-304027 actualization inspection 'PatternVariableCanBeUsed' for deconstructions
GitOrigin-RevId: 40a61db67d82d63a961679f65823568a5f7039b0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
29c18fc1b6
commit
86b8992265
+12
-7
@@ -34,11 +34,12 @@ public class PatternVariableCanBeUsedInspection extends AbstractBaseJavaLocalIns
|
||||
@Override
|
||||
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression call) {
|
||||
if (!HighlightingFeature.PATTERN_GUARDS_AND_RECORD_PATTERNS.isAvailable(holder.getFile())) return;
|
||||
PsiReferenceExpression qualifier = getQualifierReferenceExpression(call);
|
||||
if (qualifier == null) return;
|
||||
if (qualifier.resolve() instanceof PsiPatternVariable variable &&
|
||||
variable.getPattern() instanceof PsiDeconstructionPattern deconstruction) {
|
||||
if (!isFinalOrEffectivelyFinal(variable)) return;
|
||||
PsiTypeCastExpression qualifier = getQualifierReferenceExpression(call);
|
||||
if(qualifier==null) return;
|
||||
PsiInstanceOfExpression candidate = InstanceOfUtils.findPatternCandidate(qualifier);
|
||||
if (candidate == null) return;
|
||||
PsiPrimaryPattern pattern = candidate.getPattern();
|
||||
if (pattern instanceof PsiDeconstructionPattern deconstruction) {
|
||||
PsiPatternVariable existingPatternVariable = findExistingPatternVariable(qualifier, deconstruction, call);
|
||||
if (existingPatternVariable == null) return;
|
||||
if (!isFinalOrEffectivelyFinal(existingPatternVariable)) return;
|
||||
@@ -74,12 +75,12 @@ public class PatternVariableCanBeUsedInspection extends AbstractBaseJavaLocalIns
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiReferenceExpression getQualifierReferenceExpression(@NotNull PsiMethodCallExpression call) {
|
||||
private static PsiTypeCastExpression getQualifierReferenceExpression(@NotNull PsiMethodCallExpression call) {
|
||||
while (true) {
|
||||
if (!call.getArgumentList().isEmpty()) return null;
|
||||
PsiExpression qualifier = PsiUtil.skipParenthesizedExprDown(call.getMethodExpression().getQualifierExpression());
|
||||
PsiMethodCallExpression qualifierMethodCall = ObjectUtils.tryCast(qualifier, PsiMethodCallExpression.class);
|
||||
if (qualifierMethodCall == null) return ObjectUtils.tryCast(qualifier, PsiReferenceExpression.class);
|
||||
if (qualifierMethodCall == null) return ObjectUtils.tryCast(qualifier, PsiTypeCastExpression.class);
|
||||
call = qualifierMethodCall;
|
||||
}
|
||||
}
|
||||
@@ -189,6 +190,10 @@ public class PatternVariableCanBeUsedInspection extends AbstractBaseJavaLocalIns
|
||||
if (!myName.endsWith("()")) {
|
||||
PsiLocalVariable variable = PsiTreeUtil.getParentOfType(element, PsiLocalVariable.class);
|
||||
if (variable == null) return;
|
||||
if (VariableAccessUtils.variableIsAssigned(variable)) {
|
||||
new CommentTracker().replace(element, myPatternName);
|
||||
return;
|
||||
}
|
||||
List<PsiReferenceExpression> references =
|
||||
VariableAccessUtils.getVariableReferences(variable, PsiUtil.getVariableCodeBlock(variable, null));
|
||||
for (PsiReferenceExpression ref : references) {
|
||||
|
||||
+4
-3
@@ -1,10 +1,11 @@
|
||||
// "Fix all 'Pattern variable can be used' problems in file" "true"
|
||||
class Main {
|
||||
void foo(Object obj) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1) point1, Point(double x2, double y2) point2) rect) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(double x2, double y2))) {
|
||||
double s = x2 + y2;
|
||||
System.out.println(point1);
|
||||
System.out.println(point2);
|
||||
Point p1 = ((Rect) obj).point1();
|
||||
System.out.println(p1);
|
||||
System.out.println(((Rect) obj).point2());
|
||||
System.out.println(x1 + x1 + y1 + x2 + y2);
|
||||
System.out.println(y1 + x1 + y1);
|
||||
System.out.println(x2 + s);
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// "Fix all 'Pattern variable can be used' problems in file" "true"
|
||||
class Main {
|
||||
void foo(Object obj) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(double x2, double y2)) rect) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(double x2, double y2))) {
|
||||
double s = ((x2)) + y2;
|
||||
System.out.println(x1 + x1 + y1 + y2);
|
||||
System.out.println(y1 + x1 + y2);
|
||||
|
||||
+8
-8
@@ -1,17 +1,17 @@
|
||||
// "Fix all 'Pattern variable can be used' problems in file" "true"
|
||||
class Main {
|
||||
void foo(Object obj) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1) point1, Point(final double x2, double y2)) rect) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(final double x2, double y2))) {
|
||||
System.out.println(x2);
|
||||
double x = x1;
|
||||
Point p1 = rect.point2();
|
||||
System.out.println(rect.point2().z());
|
||||
System.out.println(rect.point1().y());
|
||||
System.out.println(rect.point1().z());
|
||||
Point p1 = ((Rect) obj).point2();
|
||||
System.out.println(((Rect) obj).point2().z());
|
||||
System.out.println(((Rect) obj).point1().y());
|
||||
System.out.println(((Rect) obj).point1().z());
|
||||
y2 = 0.0;
|
||||
System.out.println(rect.point2().y());
|
||||
point1 = new Point(100.0, 200.0);
|
||||
System.out.println(point1.y());
|
||||
System.out.println(((Rect) obj).point2().y());
|
||||
p1 = new Point(100.0, 200.0);
|
||||
System.out.println(p1.y());
|
||||
double d = x2;
|
||||
d = 10.0;
|
||||
}
|
||||
|
||||
+16
-16
@@ -1,23 +1,23 @@
|
||||
// "Fix all 'Pattern variable can be used' problems in file" "true"
|
||||
class Main {
|
||||
void foo(Object obj) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1) point1, Point(double x2, double y2) point2) rect) {
|
||||
double a1 = rect.point1().<caret>x();
|
||||
double b1 = rect.point1().y();
|
||||
double a2 = ((((((rect)).point2())).x()));
|
||||
double b2 = rect.point2().y();
|
||||
double k1 = point1.x();
|
||||
double l1 = point1.y();
|
||||
double s = point2.x() + point2.y();
|
||||
Point p1 = rect.point1();
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(double x2, double y2))) {
|
||||
double a1 = ((Rect) obj).point1().x(<caret>);
|
||||
double b1 = ((Rect) obj).point1().y();
|
||||
double a2 = ((((((((Rect) obj))).point2())).x()));
|
||||
double b2 = ((Rect) obj).point2().y();
|
||||
double k1 = ((Rect) obj).point1().x();
|
||||
double l1 = ((Rect) obj).point1().y();
|
||||
double s = ((Rect) obj).point2().x() + ((Rect) obj).point2().y();
|
||||
Point p1 = ((Rect) obj).point1();
|
||||
System.out.println(p1);
|
||||
System.out.println(rect.point2());
|
||||
System.out.println(rect.point1().x() + a1 + b1 + a2 + b2);
|
||||
System.out.println(rect.point1().y() + k1 + l1);
|
||||
System.out.println(rect.point2().x() + s);
|
||||
System.out.println(((((((rect)).point2())).y())));
|
||||
System.out.println(point1.x());
|
||||
System.out.println(point2.x());
|
||||
System.out.println(((Rect) obj).point2());
|
||||
System.out.println(((Rect) obj).point1().x() + a1 + b1 + a2 + b2);
|
||||
System.out.println(((Rect) obj).point1().y() + k1 + l1);
|
||||
System.out.println(((Rect) obj).point2().x() + s);
|
||||
System.out.println(((((((((Rect) obj))).point2())).y())));
|
||||
System.out.println(((Rect) obj).point1().x());
|
||||
System.out.println(((Rect) obj).point2().x());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+9
-9
@@ -1,15 +1,15 @@
|
||||
// "Fix all 'Pattern variable can be used' problems in file" "true"
|
||||
class Main {
|
||||
void foo(Object obj) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(double x2, double y2)) rect) {
|
||||
double a1 = rect.point1().<caret>x();
|
||||
double b1 = ((((((rect)).point1())).y()));
|
||||
double b2 = rect.point2().y();
|
||||
double s = ((((((rect)).point2())).x())) + b2;
|
||||
System.out.println(rect.point1().x() + a1 + b1 + b2);
|
||||
System.out.println(rect.point1().y() + a1 + b2);
|
||||
System.out.println(((((((rect)).point2())).x())) + s);
|
||||
System.out.println(rect.point2().y());
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(double x2, double y2))) {
|
||||
double a1 = ((Rect)obj).point1().x(<caret>);
|
||||
double b1 = ((((((((Rect)obj))).point1())).y()));
|
||||
double b2 = ((Rect)obj).point2().y();
|
||||
double s = ((((((((Rect)obj))).point2())).x())) + b2;
|
||||
System.out.println(((Rect)obj).point1().x() + a1 + b1 + b2);
|
||||
System.out.println(((Rect)obj).point1().y() + a1 + b2);
|
||||
System.out.println(((((((((Rect)obj))).point2())).x())) + s);
|
||||
System.out.println(((Rect)obj).point2().y());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+10
-10
@@ -1,18 +1,18 @@
|
||||
// "Fix all 'Pattern variable can be used' problems in file" "true"
|
||||
class Main {
|
||||
void foo(Object obj) {
|
||||
if (obj instanceof Rect(Point(double x1, double y1) point1, Point(final double x2, double y2)) rect) {
|
||||
System.out.println(rect.point2().x(<caret>));
|
||||
if (obj instanceof Rect(Point(double x1, double y1), Point(final double x2, double y2))) {
|
||||
System.out.println(((Rect) obj).point2().<caret>x());
|
||||
double x = x1;
|
||||
Point p1 = rect.point2();
|
||||
System.out.println(rect.point2().z());
|
||||
System.out.println(rect.point1().y());
|
||||
System.out.println(rect.point1().z());
|
||||
Point p1 = ((Rect) obj).point2();
|
||||
System.out.println(((Rect) obj).point2().z());
|
||||
System.out.println(((Rect) obj).point1().y());
|
||||
System.out.println(((Rect) obj).point1().z());
|
||||
y2 = 0.0;
|
||||
System.out.println(rect.point2().y());
|
||||
point1 = new Point(100.0, 200.0);
|
||||
System.out.println(point1.y());
|
||||
double d = rect.point2().x();
|
||||
System.out.println(((Rect) obj).point2().y());
|
||||
p1 = new Point(100.0, 200.0);
|
||||
System.out.println(p1.y());
|
||||
double d = ((Rect) obj).point2().x();
|
||||
d = 10.0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user