From 30cb09e0c94ca430f83783455ff8c4f92e2c2655 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 4 Jul 2025 10:50:48 +0200 Subject: [PATCH] [java-inspections] More precise fix for IDEA-370768 GitOrigin-RevId: 1f5f2d2076b3eecaf173ba4604c3ba8ab27dd281 --- .../src/com/intellij/psi/util/RedundantCastUtil.java | 4 +++- .../redundantCast/FieldQualifierGenericSuperType.java | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java b/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java index 0f08e4c6f381..228da669b6a9 100644 --- a/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java +++ b/java/java-analysis-impl/src/com/intellij/psi/util/RedundantCastUtil.java @@ -320,7 +320,9 @@ public final class RedundantCastUtil { JavaResolveResult newResult = newExpression.advancedResolve(false); if (!newResult.isValidResult() || !oldMember.equals(newResult.getElement())) return false; - if (!Objects.equals(newExpression.getType(), refExpression.getType())) return false; + PsiType expected = ExpectedTypeUtils.findExpectedType(refExpression, false); + PsiType actual = newExpression.getType(); + if (expected == null || actual == null || !TypeConversionUtil.isAssignable(expected, actual)) return false; if (parent instanceof PsiReferenceExpression parentRef && !newResult.getSubstitutor().equals(resolveResult.getSubstitutor())) { return isCastInReferenceQualifierRedundant(parentRef); } diff --git a/java/java-tests/testData/inspection/redundantCast/FieldQualifierGenericSuperType.java b/java/java-tests/testData/inspection/redundantCast/FieldQualifierGenericSuperType.java index 4c4ffcc044cd..b703b26169c4 100644 --- a/java/java-tests/testData/inspection/redundantCast/FieldQualifierGenericSuperType.java +++ b/java/java-tests/testData/inspection/redundantCast/FieldQualifierGenericSuperType.java @@ -6,4 +6,8 @@ class B extends A { static String test(A b) { return ((B) b).value; } + + static Object test1(A b) { + return ((B) b).value; + } } \ No newline at end of file