From 8ebe9dd200a1cd9ca61e7615385f55912dec0cef Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 26 May 2014 16:26:16 +0200 Subject: [PATCH] IDEA-125258 ("Unnecessary boxing" inspection is triggered wrongly with overloaded constructors) --- .../UnnecessaryBoxingInspection.java | 21 ++++++++-------- .../unnecessary_boxing/UnnecessaryBoxing.java | 25 +++++++++++++++++++ 2 files changed, 36 insertions(+), 10 deletions(-) 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 4c2c44bfc326..84d8144f841d 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/UnnecessaryBoxingInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/migration/UnnecessaryBoxingInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -294,34 +294,35 @@ public class UnnecessaryBoxingInspection extends BaseInspection { return unboxedType != null && unboxedType.isAssignableFrom(rhsType); } } - final PsiMethodCallExpression containingMethodCallExpression = getParentMethodCallExpression(expression); + final PsiCallExpression containingMethodCallExpression = getParentMethodCallExpression(expression); return containingMethodCallExpression == null || isSameMethodCalledWithoutBoxing(containingMethodCallExpression, expression); } @Nullable - private PsiMethodCallExpression getParentMethodCallExpression(@NotNull PsiElement expression) { + private PsiCallExpression getParentMethodCallExpression(@NotNull PsiElement expression) { final PsiElement parent = expression.getParent(); if (parent instanceof PsiParenthesizedExpression || parent instanceof PsiExpressionList) { return getParentMethodCallExpression(parent); } - else if (parent instanceof PsiMethodCallExpression) { - return (PsiMethodCallExpression)parent; + else if (parent instanceof PsiCallExpression) { + return (PsiCallExpression)parent; } else { return null; } } - private boolean isSameMethodCalledWithoutBoxing(@NotNull PsiMethodCallExpression methodCallExpression, + private boolean isSameMethodCalledWithoutBoxing(@NotNull PsiCallExpression methodCallExpression, @NotNull PsiExpression boxingExpression) { final PsiExpressionList argumentList = methodCallExpression.getArgumentList(); + if (argumentList == null) { + return false; + } final PsiExpression[] expressions = argumentList.getExpressions(); - final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); - final PsiElement element = methodExpression.resolve(); - if (!(element instanceof PsiMethod)) { + final PsiMethod originalMethod = methodCallExpression.resolveMethod(); + if (originalMethod == null) { return false; } - final PsiMethod originalMethod = (PsiMethod)element; final String name = originalMethod.getName(); final PsiClass containingClass = originalMethod.getContainingClass(); if (containingClass == null) { 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 a25f0bcdb679..e9dcd5439f3d 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 @@ -54,4 +54,29 @@ public class UnnecessaryBoxing { } return null; } +} +class IntIntegerTest { + public IntIntegerTest(Integer val) { + System.out.println("behavoiur 1"); + } + + public IntIntegerTest(int val) { + System.out.println("behavoiur 2"); + } + + public static void f(Integer val) { + System.out.println("behavoiur 1"); + } + + public static void f(int val) { + System.out.println("behavoiur 2"); + } + + public IntIntegerTest() { + } + + public void test() { + new IntIntegerTest(new Integer(1)); // <-- incorrectly triggered + f(new Integer(1)); // <-- not triggered + } } \ No newline at end of file