From d73340243d312b79691ff03d485667b85ed52816 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 1 Jun 2018 13:26:10 +0700 Subject: [PATCH] UnnecessaryBoxing: don't warn if inferred variable type will change (IDEA-193096) --- .../siyeh/ig/migration/UnnecessaryBoxingInspection.java | 5 +++++ .../migration/unnecessary_boxing/UnnecessaryBoxing.java | 7 +++++++ .../ig/migration/UnnecessaryBoxingInspectionTest.java | 7 +++++++ 3 files changed, 19 insertions(+) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/UnnecessaryBoxingInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/UnnecessaryBoxingInspection.java index 38148ff25e5e..3c57d6da22a7 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/UnnecessaryBoxingInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/UnnecessaryBoxingInspection.java @@ -250,6 +250,11 @@ public class UnnecessaryBoxingInspection extends BaseInspection { parent instanceof PsiSynchronizedStatement) { return true; } + else if (parent instanceof PsiVariable) { + PsiTypeElement typeElement = ((PsiVariable)parent).getTypeElement(); + // Inferred type may change if boxing is removed; if it's possible + if (typeElement != null && typeElement.isInferredType()) return true; + } else if (parent instanceof PsiTypeCastExpression) { final PsiTypeCastExpression castExpression = (PsiTypeCastExpression)parent; return TypeUtils.isTypeParameter(castExpression.getType()); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/unnecessary_boxing/UnnecessaryBoxing.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/unnecessary_boxing/UnnecessaryBoxing.java index 9069afc37ffc..0bd53479c522 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/unnecessary_boxing/UnnecessaryBoxing.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/migration/unnecessary_boxing/UnnecessaryBoxing.java @@ -135,4 +135,11 @@ class WithLambdaUnfriendlyOverloads { System.out.println("hello"); } } + + void testVar() { + var x = Integer.valueOf(5); + Integer y = Integer.valueOf(5); + System.out.println(x.getClass()); + System.out.println(y.getClass()); + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/UnnecessaryBoxingInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/UnnecessaryBoxingInspectionTest.java index 0cefb1b71744..0e91e0be0168 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/UnnecessaryBoxingInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/migration/UnnecessaryBoxingInspectionTest.java @@ -4,10 +4,17 @@ package com.siyeh.ig.migration; import com.intellij.codeInspection.InspectionProfileEntry; +import com.intellij.testFramework.LightProjectDescriptor; import com.siyeh.ig.LightInspectionTestCase; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class UnnecessaryBoxingInspectionTest extends LightInspectionTestCase { + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return JAVA_10; + } public void testUnnecessaryBoxing() { doTest();