From d4c560f670fb0b4a091caa92d36c796ebd74f61a Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 28 Sep 2018 17:13:44 +0200 Subject: [PATCH] IG: check if type is assignable (IDEA-199613) --- .../ConstantValueVariableUseInspection.java | 31 ++++++++++++------- .../ConstantValueVariableUse.java | 8 +++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java index 67d3a28b2cf4..ba19bf7d5397 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/ConstantValueVariableUseInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2008-2015 Bas Leijdekkers + * Copyright 2008-2018 Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -153,16 +153,16 @@ public class ConstantValueVariableUseInspection extends BaseInspection implement return false; } - private boolean checkConstantValueVariableUse( - @Nullable PsiExpression expression, - @NotNull PsiExpression constantExpression, - @NotNull PsiElement body) { + private boolean checkConstantValueVariableUse(@Nullable PsiExpression expression, + @NotNull PsiExpression constantExpression, + @NotNull PsiElement body) { final PsiType constantType = constantExpression.getType(); + if (constantType == null) { + return false; + } if (PsiType.DOUBLE.equals(constantType)) { - final Object result = ExpressionUtils.computeConstantExpression( - constantExpression, false); - if (Double.valueOf(0.0).equals(result) || - Double.valueOf(-0.0).equals(result)) { + final Object result = ExpressionUtils.computeConstantExpression(constantExpression, false); + if (Double.valueOf(0.0).equals(result) || Double.valueOf(-0.0).equals(result)) { return false; } } @@ -170,8 +170,7 @@ public class ConstantValueVariableUseInspection extends BaseInspection implement if (!(expression instanceof PsiReferenceExpression)) { return false; } - final PsiReferenceExpression referenceExpression = - (PsiReferenceExpression)expression; + final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)expression; final PsiElement target = referenceExpression.resolve(); if (!(target instanceof PsiVariable)) { return false; @@ -185,7 +184,15 @@ public class ConstantValueVariableUseInspection extends BaseInspection implement if (!visitor.isRead()) { return false; } - registerError(visitor.getReference(), constantExpression); + final PsiReferenceExpression reference = visitor.getReference(); + final PsiType referenceType = reference.getType(); + if (referenceType == null) { + return false; + } + if (!referenceType.isAssignableFrom(constantType)) { + return false; + } + registerError(reference, constantExpression); return true; } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java index 756c0765a35d..120d5ae78e7f 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/constant_value_variable_use/ConstantValueVariableUse.java @@ -58,4 +58,12 @@ class D { } } } + + private T foo(Class type) { + T result = null; + if (type == Boolean.class) { + result = type.cast( true); + } + return result; + } } \ No newline at end of file