mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IG: check if type is assignable (IDEA-199613)
This commit is contained in:
+19
-12
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user