From 98887ba079e6efa5aed5593719e1ce99080decd4 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 7 Nov 2014 14:56:58 +0100 Subject: [PATCH] part III for IDEA-132470 (Wrong code inspections on signature polymorphic method calls) --- .../siyeh/ig/jdk/AutoBoxingInspection.java | 22 ++++++++++++++----- .../igtest/jdk/auto_boxing/AutoBoxing.java | 4 ++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoBoxingInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoBoxingInspection.java index 5f9f588198f5..a0299e2f99dd 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoBoxingInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/jdk/AutoBoxingInspection.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. @@ -15,6 +15,7 @@ */ package com.siyeh.ig.jdk; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; import com.intellij.lang.java.JavaLanguage; @@ -33,10 +34,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; public class AutoBoxingInspection extends BaseInspection { @@ -304,9 +302,21 @@ public class AutoBoxingInspection extends BaseInspection { } private void checkExpression(@NotNull PsiExpression expression) { - if (expression.getParent() instanceof PsiParenthesizedExpression) { + final PsiElement parent = expression.getParent(); + if (parent instanceof PsiParenthesizedExpression) { return; } + if (parent instanceof PsiExpressionList) { + final PsiElement grandParent = parent.getParent(); + if (grandParent instanceof PsiMethodCallExpression) { + final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)grandParent; + final PsiMethod method = methodCallExpression.resolveMethod(); + if (method != null && + AnnotationUtil.isAnnotated(method, Collections.singletonList("java.lang.invoke.MethodHandle.PolymorphicSignature"))) { + return; + } + } + } final PsiType expressionType = expression.getType(); if (expressionType == null || expressionType.equals(PsiType.VOID) || !TypeConversionUtil.isPrimitiveAndNotNull(expressionType)) { return; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_boxing/AutoBoxing.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_boxing/AutoBoxing.java index 94df2a5f0ca9..ad53cf02160b 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_boxing/AutoBoxing.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/jdk/auto_boxing/AutoBoxing.java @@ -58,4 +58,8 @@ public class AutoBoxing { System.out.println((Boolean)b); final Object o1 = (Object) b; } + + void polymorphicSignature(java.lang.invoke.MethodHandle meh) throws Throwable { + meh.invokeExact(1); + } }