IG: check if type is assignable (IDEA-199613)

This commit is contained in:
Bas Leijdekkers
2018-09-28 18:18:41 +02:00
parent c7f9300541
commit d4c560f670
2 changed files with 27 additions and 12 deletions
@@ -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;
}
}
@@ -58,4 +58,12 @@ class D {
}
}
}
private <T> T foo(Class<T> type) {
T result = null;
if (type == Boolean.class) {
result = type.cast( true);
}
return result;
}
}