Java 类com.intellij.psi.util.ConstantExpressionUtil 实例源码
项目:intellij-ce-playground
文件:CheckForOutOfMemoryOnLargeArrayAllocationInspection.java
@Override
public void visitNewExpression(@NotNull PsiNewExpression expression) {
super.visitNewExpression(expression);
final PsiType type = expression.getType();
if (!(type instanceof PsiArrayType)) {
return;
}
int size = 1;
final PsiExpression[] dimensions = expression.getArrayDimensions();
for (final PsiExpression dimension : dimensions) {
final Integer intValue =
(Integer)ConstantExpressionUtil.computeCastTo(
dimension, PsiType.INT);
if (intValue != null) {
size *= intValue.intValue();
}
}
if (size <= m_limit) {
return;
}
if (outOfMemoryExceptionCaught(expression)) {
return;
}
registerNewExpressionError(expression);
}
项目:tools-idea
文件:CheckForOutOfMemoryOnLargeArrayAllocationInspection.java
@Override
public void visitNewExpression(@NotNull PsiNewExpression expression) {
super.visitNewExpression(expression);
final PsiType type = expression.getType();
if (!(type instanceof PsiArrayType)) {
return;
}
int size = 1;
final PsiExpression[] dimensions = expression.getArrayDimensions();
for (final PsiExpression dimension : dimensions) {
final Integer intValue =
(Integer)ConstantExpressionUtil.computeCastTo(
dimension, PsiType.INT);
if (intValue != null) {
size *= intValue.intValue();
}
}
if (size <= m_limit) {
return;
}
if (outOfMemoryExceptionCaught(expression)) {
return;
}
registerNewExpressionError(expression);
}
项目:consulo-java
文件:CheckForOutOfMemoryOnLargeArrayAllocationInspection.java
@Override
public void visitNewExpression(@NotNull PsiNewExpression expression) {
super.visitNewExpression(expression);
final PsiType type = expression.getType();
if (!(type instanceof PsiArrayType)) {
return;
}
int size = 1;
final PsiExpression[] dimensions = expression.getArrayDimensions();
for (final PsiExpression dimension : dimensions) {
final Integer intValue =
(Integer)ConstantExpressionUtil.computeCastTo(
dimension, PsiType.INT);
if (intValue != null) {
size *= intValue.intValue();
}
}
if (size <= m_limit) {
return;
}
if (outOfMemoryExceptionCaught(expression)) {
return;
}
registerNewExpressionError(expression);
}
项目:intellij-ce-playground
文件:ConstantExpressionVisitor.java
@Override
public void visitTypeCastExpression(PsiTypeCastExpression expression) {
final PsiTypeElement castTypeElement = expression.getCastType();
PsiExpression operand = expression.getOperand();
Object opValue = getStoredValue(operand);
if(castTypeElement == null || opValue == null) {
myResult = null;
return;
}
PsiType castType = castTypeElement.getType();
myResult = ConstantExpressionUtil.computeCastTo(opValue, castType);
}
项目:intellij-ce-playground
文件:MalformedXPathInspection.java
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
if (arguments.length == 0) {
return;
}
final PsiExpression xpathArgument = arguments[0];
if (!ExpressionUtils.hasStringType(xpathArgument)) {
return;
}
if (!PsiUtil.isConstantExpression(xpathArgument)) {
return;
}
final PsiType type = xpathArgument.getType();
if (type == null) {
return;
}
final String value = (String)ConstantExpressionUtil.computeCastTo(xpathArgument, type);
if (value == null) {
return;
}
if (!callTakesXPathExpression(expression)) {
return;
}
final XPathFactory xpathFactory = XPathFactory.newInstance();
final XPath xpath = xpathFactory.newXPath();
//noinspection UnusedCatchParameter,ProhibitedExceptionCaught
try {
xpath.compile(value);
}
catch (XPathExpressionException ignore) {
registerError(xpathArgument);
}
}
项目:intellij-ce-playground
文件:ShiftOutOfRangeInspection.java
@Override
public void visitBinaryExpression(
@NotNull PsiBinaryExpression expression) {
super.visitBinaryExpression(expression);
final PsiJavaToken sign = expression.getOperationSign();
final IElementType tokenType = sign.getTokenType();
if (!tokenType.equals(JavaTokenType.LTLT) &&
!tokenType.equals(JavaTokenType.GTGT) &&
!tokenType.equals(JavaTokenType.GTGTGT)) {
return;
}
final PsiType expressionType = expression.getType();
if (expressionType == null) {
return;
}
final PsiExpression rhs = expression.getROperand();
if (rhs == null) {
return;
}
if (!PsiUtil.isConstantExpression(rhs)) {
return;
}
final Integer valueObject =
(Integer)ConstantExpressionUtil.computeCastTo(rhs,
PsiType.INT);
if (valueObject == null) {
return;
}
final int value = valueObject.intValue();
if (expressionType.equals(PsiType.LONG)) {
if (value < 0 || value > 63) {
registerError(sign, valueObject, Boolean.TRUE);
}
}
if (expressionType.equals(PsiType.INT)) {
if (value < 0 || value > 31) {
registerError(sign, valueObject, Boolean.FALSE);
}
}
}
项目:intellij-ce-playground
文件:PointlessBitwiseExpressionInspection.java
private boolean isAllOnes(PsiExpression expression) {
if (m_ignoreExpressionsContainingConstants
&& !(expression instanceof PsiLiteralExpression)) {
return false;
}
final PsiType expressionType = expression.getType();
final Object value =
ConstantExpressionUtil.computeCastTo(expression,
expressionType);
if (value == null) {
return false;
}
if (value instanceof Integer &&
((Integer)value).intValue() == 0xffffffff) {
return true;
}
if (value instanceof Long &&
((Long)value).longValue() == 0xffffffffffffffffL) {
return true;
}
if (value instanceof Short &&
((Short)value).shortValue() == (short)0xffff) {
return true;
}
if (value instanceof Character &&
((Character)value).charValue() == (char)0xffff) {
return true;
}
return value instanceof Byte &&
((Byte)value).byteValue() == (byte)0xff;
}
项目:intellij-ce-playground
文件:ExpressionUtils.java
public static boolean isZero(@Nullable PsiExpression expression) {
if (expression == null) {
return false;
}
final PsiType expressionType = expression.getType();
final Object value = ConstantExpressionUtil.computeCastTo(expression,
expressionType);
if (value == null) {
return false;
}
if (value instanceof Double && ((Double)value).doubleValue() == 0.0) {
return true;
}
if (value instanceof Float && ((Float)value).floatValue() == 0.0f) {
return true;
}
if (value instanceof Integer && ((Integer)value).intValue() == 0) {
return true;
}
if (value instanceof Long && ((Long)value).longValue() == 0L) {
return true;
}
if (value instanceof Short && ((Short)value).shortValue() == 0) {
return true;
}
if (value instanceof Character && ((Character)value).charValue() == 0) {
return true;
}
return value instanceof Byte && ((Byte)value).byteValue() == 0;
}
项目:intellij-ce-playground
文件:DivideByZeroInspection.java
private static boolean isZero(PsiExpression expression) {
final Object value = ConstantExpressionUtil.computeCastTo(expression, PsiType.DOUBLE);
if (!(value instanceof Double)) {
return false;
}
final double constantValue = ((Double)value).doubleValue();
return constantValue == 0.0 || constantValue == -0.0;
}
项目:tools-idea
文件:ConstantExpressionVisitor.java
@Override
public void visitTypeCastExpression(PsiTypeCastExpression expression) {
final PsiTypeElement castTypeElement = expression.getCastType();
PsiExpression operand = expression.getOperand();
Object opValue = getStoredValue(operand);
if(castTypeElement == null || opValue == null) {
myResult = null;
return;
}
PsiType castType = castTypeElement.getType();
myResult = ConstantExpressionUtil.computeCastTo(opValue, castType);
}
项目:tools-idea
文件:MalformedXPathInspection.java
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
if (arguments.length == 0) {
return;
}
final PsiExpression xpathArgument = arguments[0];
if (!ExpressionUtils.hasStringType(xpathArgument)) {
return;
}
if (!PsiUtil.isConstantExpression(xpathArgument)) {
return;
}
final PsiType type = xpathArgument.getType();
if (type == null) {
return;
}
final String value = (String)ConstantExpressionUtil.computeCastTo(xpathArgument, type);
if (value == null) {
return;
}
if (!callTakesXPathExpression(expression)) {
return;
}
final XPathFactory xpathFactory = XPathFactory.newInstance();
final XPath xpath = xpathFactory.newXPath();
//noinspection UnusedCatchParameter,ProhibitedExceptionCaught
try {
xpath.compile(value);
}
catch (XPathExpressionException ignore) {
registerError(xpathArgument);
}
}
项目:tools-idea
文件:ShiftOutOfRangeInspection.java
@Override
public void visitBinaryExpression(
@NotNull PsiBinaryExpression expression) {
super.visitBinaryExpression(expression);
final PsiJavaToken sign = expression.getOperationSign();
final IElementType tokenType = sign.getTokenType();
if (!tokenType.equals(JavaTokenType.LTLT) &&
!tokenType.equals(JavaTokenType.GTGT) &&
!tokenType.equals(JavaTokenType.GTGTGT)) {
return;
}
final PsiType expressionType = expression.getType();
if (expressionType == null) {
return;
}
final PsiExpression rhs = expression.getROperand();
if (rhs == null) {
return;
}
if (!PsiUtil.isConstantExpression(rhs)) {
return;
}
final Integer valueObject =
(Integer)ConstantExpressionUtil.computeCastTo(rhs,
PsiType.INT);
if (valueObject == null) {
return;
}
final int value = valueObject.intValue();
if (expressionType.equals(PsiType.LONG)) {
if (value < 0 || value > 63) {
registerError(sign, valueObject, Boolean.TRUE);
}
}
if (expressionType.equals(PsiType.INT)) {
if (value < 0 || value > 31) {
registerError(sign, valueObject, Boolean.FALSE);
}
}
}
项目:tools-idea
文件:PointlessBitwiseExpressionInspection.java
private boolean isAllOnes(PsiExpression expression) {
if (m_ignoreExpressionsContainingConstants
&& !(expression instanceof PsiLiteralExpression)) {
return false;
}
final PsiType expressionType = expression.getType();
final Object value =
ConstantExpressionUtil.computeCastTo(expression,
expressionType);
if (value == null) {
return false;
}
if (value instanceof Integer &&
((Integer)value).intValue() == 0xffffffff) {
return true;
}
if (value instanceof Long &&
((Long)value).longValue() == 0xffffffffffffffffL) {
return true;
}
if (value instanceof Short &&
((Short)value).shortValue() == (short)0xffff) {
return true;
}
if (value instanceof Character &&
((Character)value).charValue() == (char)0xffff) {
return true;
}
return value instanceof Byte &&
((Byte)value).byteValue() == (byte)0xff;
}
项目:tools-idea
文件:ExpressionUtils.java
public static boolean isZero(@Nullable PsiExpression expression) {
if (expression == null) {
return false;
}
final PsiType expressionType = expression.getType();
final Object value = ConstantExpressionUtil.computeCastTo(expression,
expressionType);
if (value == null) {
return false;
}
if (value instanceof Double && ((Double)value).doubleValue() == 0.0) {
return true;
}
if (value instanceof Float && ((Float)value).floatValue() == 0.0f) {
return true;
}
if (value instanceof Integer && ((Integer)value).intValue() == 0) {
return true;
}
if (value instanceof Long && ((Long)value).longValue() == 0L) {
return true;
}
if (value instanceof Short && ((Short)value).shortValue() == 0) {
return true;
}
if (value instanceof Character && ((Character)value).charValue() == 0) {
return true;
}
return value instanceof Byte && ((Byte)value).byteValue() == 0;
}
项目:tools-idea
文件:PointlessArithmeticExpressionInspection.java
private static boolean isMaxDouble(PsiExpression expression) {
final Double value = (Double)
ConstantExpressionUtil.computeCastTo(
expression, PsiType.DOUBLE);
//noinspection FloatingPointEquality
return value != null && value.doubleValue() == Double.MAX_VALUE;
}
项目:tools-idea
文件:PointlessArithmeticExpressionInspection.java
private static boolean isMinFloat(PsiExpression expression) {
final Float value = (Float)
ConstantExpressionUtil.computeCastTo(
expression, PsiType.FLOAT);
//noinspection FloatingPointEquality
return value != null && value.floatValue() == Float.MIN_VALUE;
}
项目:tools-idea
文件:PointlessArithmeticExpressionInspection.java
private static boolean isMaxFloat(PsiExpression expression) {
final Float value = (Float)
ConstantExpressionUtil.computeCastTo(
expression, PsiType.FLOAT);
//noinspection FloatingPointEquality
return value != null && value.floatValue() == Float.MAX_VALUE;
}
项目:tools-idea
文件:DivideByZeroInspection.java
private static boolean isZero(PsiExpression expression) {
final Object value = ConstantExpressionUtil.computeCastTo(expression, PsiType.DOUBLE);
if (!(value instanceof Double)) {
return false;
}
final double constantValue = ((Double)value).doubleValue();
return constantValue == 0.0 || constantValue == -0.0;
}
项目:tools-idea
文件:ExpressionUtils.java
public static boolean isOne(@Nullable PsiExpression expression) {
if (expression == null) {
return false;
}
final PsiType expressionType = expression.getType();
final Object value = ConstantExpressionUtil.computeCastTo(
expression, expressionType);
if (value == null) {
return false;
}
//noinspection FloatingPointEquality
if (value instanceof Double && ((Double)value).doubleValue() == 1.0) {
return true;
}
if (value instanceof Float && ((Float)value).floatValue() == 1.0f) {
return true;
}
if (value instanceof Integer && ((Integer)value).intValue() == 1) {
return true;
}
if (value instanceof Long && ((Long)value).longValue() == 1L) {
return true;
}
if (value instanceof Short && ((Short)value).shortValue() == 1) {
return true;
}
if (value instanceof Character && ((Character)value).charValue() == 1) {
return true;
}
return value instanceof Byte && ((Byte)value).byteValue() == 1;
}
项目:consulo-java
文件:ConstantExpressionVisitor.java
@Override
public void visitTypeCastExpression(PsiTypeCastExpression expression) {
final PsiTypeElement castTypeElement = expression.getCastType();
PsiExpression operand = expression.getOperand();
Object opValue = getStoredValue(operand);
if(castTypeElement == null || opValue == null) {
myResult = null;
return;
}
PsiType castType = castTypeElement.getType();
myResult = ConstantExpressionUtil.computeCastTo(opValue, castType);
}
项目:consulo-java
文件:ExpressionUtils.java
public static boolean isZero(@Nullable PsiExpression expression)
{
if(expression == null)
{
return false;
}
final PsiType expressionType = expression.getType();
final Object value = ConstantExpressionUtil.computeCastTo(expression, expressionType);
if(value == null)
{
return false;
}
if(value instanceof Double && ((Double) value).doubleValue() == 0.0)
{
return true;
}
if(value instanceof Float && ((Float) value).floatValue() == 0.0f)
{
return true;
}
if(value instanceof Integer && ((Integer) value).intValue() == 0)
{
return true;
}
if(value instanceof Long && ((Long) value).longValue() == 0L)
{
return true;
}
if(value instanceof Short && ((Short) value).shortValue() == 0)
{
return true;
}
if(value instanceof Character && ((Character) value).charValue() == 0)
{
return true;
}
return value instanceof Byte && ((Byte) value).byteValue() == 0;
}
项目:consulo-java
文件:MalformedXPathInspection.java
@Override
public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
if (arguments.length == 0) {
return;
}
final PsiExpression xpathArgument = arguments[0];
if (!ExpressionUtils.hasStringType(xpathArgument)) {
return;
}
if (!PsiUtil.isConstantExpression(xpathArgument)) {
return;
}
final PsiType type = xpathArgument.getType();
if (type == null) {
return;
}
final String value = (String)ConstantExpressionUtil.computeCastTo(xpathArgument, type);
if (value == null) {
return;
}
if (!callTakesXPathExpression(expression)) {
return;
}
final XPathFactory xpathFactory = XPathFactory.newInstance();
final XPath xpath = xpathFactory.newXPath();
//noinspection UnusedCatchParameter,ProhibitedExceptionCaught
try {
xpath.compile(value);
}
catch (XPathExpressionException ignore) {
registerError(xpathArgument);
}
}
项目:consulo-java
文件:ShiftOutOfRangeInspection.java
@Override
public void visitBinaryExpression(
@NotNull PsiBinaryExpression expression) {
super.visitBinaryExpression(expression);
final PsiJavaToken sign = expression.getOperationSign();
final IElementType tokenType = sign.getTokenType();
if (!tokenType.equals(JavaTokenType.LTLT) &&
!tokenType.equals(JavaTokenType.GTGT) &&
!tokenType.equals(JavaTokenType.GTGTGT)) {
return;
}
final PsiType expressionType = expression.getType();
if (expressionType == null) {
return;
}
final PsiExpression rhs = expression.getROperand();
if (rhs == null) {
return;
}
if (!PsiUtil.isConstantExpression(rhs)) {
return;
}
final Integer valueObject =
(Integer)ConstantExpressionUtil.computeCastTo(rhs,
PsiType.INT);
if (valueObject == null) {
return;
}
final int value = valueObject.intValue();
if (expressionType.equals(PsiType.LONG)) {
if (value < 0 || value > 63) {
registerError(sign, valueObject, Boolean.TRUE);
}
}
if (expressionType.equals(PsiType.INT)) {
if (value < 0 || value > 31) {
registerError(sign, valueObject, Boolean.FALSE);
}
}
}
项目:consulo-java
文件:PointlessBitwiseExpressionInspection.java
private boolean isAllOnes(PsiExpression expression) {
if (m_ignoreExpressionsContainingConstants
&& !(expression instanceof PsiLiteralExpression)) {
return false;
}
final PsiType expressionType = expression.getType();
final Object value =
ConstantExpressionUtil.computeCastTo(expression,
expressionType);
if (value == null) {
return false;
}
if (value instanceof Integer &&
((Integer)value).intValue() == 0xffffffff) {
return true;
}
if (value instanceof Long &&
((Long)value).longValue() == 0xffffffffffffffffL) {
return true;
}
if (value instanceof Short &&
((Short)value).shortValue() == (short)0xffff) {
return true;
}
if (value instanceof Character &&
((Character)value).charValue() == (char)0xffff) {
return true;
}
return value instanceof Byte &&
((Byte)value).byteValue() == (byte)0xff;
}
项目:consulo-java
文件:PointlessArithmeticExpressionInspection.java
private static boolean isMaxDouble(PsiExpression expression) {
final Double value = (Double)
ConstantExpressionUtil.computeCastTo(
expression, PsiType.DOUBLE);
//noinspection FloatingPointEquality
return value != null && value.doubleValue() == Double.MAX_VALUE;
}
项目:consulo-java
文件:PointlessArithmeticExpressionInspection.java
private static boolean isMinFloat(PsiExpression expression) {
final Float value = (Float)
ConstantExpressionUtil.computeCastTo(
expression, PsiType.FLOAT);
//noinspection FloatingPointEquality
return value != null && value.floatValue() == Float.MIN_VALUE;
}
项目:consulo-java
文件:PointlessArithmeticExpressionInspection.java
private static boolean isMaxFloat(PsiExpression expression) {
final Float value = (Float)
ConstantExpressionUtil.computeCastTo(
expression, PsiType.FLOAT);
//noinspection FloatingPointEquality
return value != null && value.floatValue() == Float.MAX_VALUE;
}
项目:consulo-java
文件:DivideByZeroInspection.java
private static boolean isZero(PsiExpression expression) {
final Object value = ConstantExpressionUtil.computeCastTo(expression, PsiType.DOUBLE);
if (!(value instanceof Double)) {
return false;
}
final double constantValue = ((Double)value).doubleValue();
return constantValue == 0.0 || constantValue == -0.0;
}
项目:intellij-ce-playground
文件:PsiConstantEvaluationHelperImpl.java
public static Object computeCastTo(PsiExpression expression, PsiType castTo, Set<PsiVariable> visitedVars) {
Object value = JavaConstantExpressionEvaluator.computeConstantExpression(expression, visitedVars, false);
if (value == null) return null;
return ConstantExpressionUtil.computeCastTo(value, castTo);
}
项目:intellij-ce-playground
文件:JDBCExecuteWithNonConstantStringInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression = expression
.getMethodExpression();
final String methodName = methodExpression.getReferenceName();
if (!s_execMethodNames.contains(methodName)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
if (!InheritanceUtil.isInheritor(aClass, "java.sql.Statement")) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] args = argumentList.getExpressions();
if (args.length == 0) {
return;
}
final PsiExpression arg = args[0];
final PsiType type = arg.getType();
if (type == null) {
return;
}
final String typeText = type.getCanonicalText();
if (!CommonClassNames.JAVA_LANG_STRING.equals(typeText)) {
return;
}
final String stringValue =
(String)ConstantExpressionUtil.computeCastTo(arg, type);
if (stringValue != null) {
return;
}
registerMethodCallError(expression);
}
项目:intellij-ce-playground
文件:LoadLibraryWithNonConstantStringInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression =
expression.getMethodExpression();
@NonNls final String methodName =
methodExpression.getReferenceName();
if (!"loadLibrary".equals(methodName)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
if (!InheritanceUtil.isInheritor(aClass, "java.lang.System")) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] args = argumentList.getExpressions();
if (args.length == 0) {
return;
}
final PsiExpression arg = args[0];
final PsiType type = arg.getType();
if (type == null) {
return;
}
final String typeText = type.getCanonicalText();
if (!CommonClassNames.JAVA_LANG_STRING.equals(typeText)) {
return;
}
final String stringValue =
(String)ConstantExpressionUtil.computeCastTo(arg, type);
if (stringValue != null) {
return;
}
registerMethodCallError(expression);
}
项目:intellij-ce-playground
文件:JDBCPrepareStatementWithNonConstantStringInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression =
expression.getMethodExpression();
final String methodName = methodExpression.getReferenceName();
if (!s_execMethodNames.contains(methodName)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
if (!InheritanceUtil.isInheritor(aClass, "java.sql.Connection")) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] args = argumentList.getExpressions();
if (args.length == 0) {
return;
}
final PsiExpression arg = args[0];
final PsiType type = arg.getType();
if (type == null) {
return;
}
final String typeText = type.getCanonicalText();
if (!CommonClassNames.JAVA_LANG_STRING.equals(typeText)) {
return;
}
final String stringValue =
(String)ConstantExpressionUtil.computeCastTo(arg, type);
if (stringValue != null) {
return;
}
registerMethodCallError(expression);
}
项目:intellij-ce-playground
文件:ReplaceAllDotInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression =
expression.getMethodExpression();
@NonNls final String methodName =
methodExpression.getReferenceName();
if (!"replaceAll".equals(methodName)) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
if (arguments.length != 2) {
return;
}
final PsiExpression argument = arguments[0];
if (!PsiUtil.isConstantExpression(argument)) {
return;
}
final PsiType argumentType = argument.getType();
if (argumentType == null) {
return;
}
final String canonicalText = argumentType.getCanonicalText();
if (!CommonClassNames.JAVA_LANG_STRING.equals(canonicalText)) {
return;
}
final String argValue =
(String)ConstantExpressionUtil.computeCastTo(argument,
argumentType);
if (!".".equals(argValue)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass containingClass = method.getContainingClass();
if (containingClass == null) {
return;
}
final String qualifiedName = containingClass.getQualifiedName();
if (!CommonClassNames.JAVA_LANG_STRING.equals(qualifiedName)) {
return;
}
registerMethodCallError(expression);
}
项目:intellij-ce-playground
文件:IncompatibleMaskInspection.java
private static boolean isIncompatibleMask(
PsiBinaryExpression maskExpression,
PsiExpression constantExpression) {
final IElementType tokenType =
maskExpression.getOperationTokenType();
final Object constantValue =
ConstantExpressionUtil.computeCastTo(constantExpression,
PsiType.LONG);
if (constantValue == null) {
return false;
}
final long constantLongValue = ((Long)constantValue).longValue();
final PsiExpression maskRhs = maskExpression.getROperand();
final PsiExpression maskLhs = maskExpression.getLOperand();
final long constantMaskValue;
if (PsiUtil.isConstantExpression(maskRhs)) {
final Object rhsValue =
ConstantExpressionUtil.computeCastTo(maskRhs,
PsiType.LONG);
if (rhsValue == null) {
return false; // Might indeed be the case with "null" literal
// whoes constant value evaluates to null. Check out (a|null) case.
}
constantMaskValue = ((Long)rhsValue).longValue();
}
else {
final Object lhsValue =
ConstantExpressionUtil.computeCastTo(maskLhs,
PsiType.LONG);
if (lhsValue == null) {
return false;
}
constantMaskValue = ((Long)lhsValue).longValue();
}
if (tokenType.equals(JavaTokenType.OR)) {
if ((constantMaskValue | constantLongValue) != constantLongValue) {
return true;
}
}
if (tokenType.equals(JavaTokenType.AND)) {
if ((constantMaskValue | constantLongValue) != constantMaskValue) {
return true;
}
}
return false;
}
项目:intellij-ce-playground
文件:ConstantMathCallInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression =
expression.getMethodExpression();
final String methodName = methodExpression.getReferenceName();
if (!constantMathCall.contains(methodName)) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
if (arguments.length == 0) {
return;
}
final PsiExpression argument = arguments[0];
final Object argumentValue =
ConstantExpressionUtil.computeCastTo(argument, PsiType.DOUBLE);
if (!(argumentValue instanceof Double)) {
return;
}
final double doubleValue = ((Double)argumentValue).doubleValue();
final String valueString = createValueString(methodName,
doubleValue);
if (valueString == null) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass referencedClass = method.getContainingClass();
if (referencedClass == null) {
return;
}
final String className = referencedClass.getQualifiedName();
if (!"java.lang.Math".equals(className)
&& !"java.lang.StrictMath".equals(className)) {
return;
}
registerMethodCallError(expression);
}
项目:intellij-ce-playground
文件:BadOddnessInspection.java
private static boolean hasValue(PsiExpression expression, int testValue) {
final Integer value = (Integer)
ConstantExpressionUtil.computeCastTo(
expression, PsiType.INT);
return value != null && value.intValue() == testValue;
}
项目:tools-idea
文件:PsiConstantEvaluationHelperImpl.java
public static Object computeCastTo(PsiExpression expression, PsiType castTo, Set<PsiVariable> visitedVars) {
Object value = JavaConstantExpressionEvaluator.computeConstantExpression(expression, visitedVars, false);
if (value == null) return null;
return ConstantExpressionUtil.computeCastTo(value, castTo);
}
项目:tools-idea
文件:JDBCExecuteWithNonConstantStringInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression = expression
.getMethodExpression();
final String methodName = methodExpression.getReferenceName();
if (!s_execMethodNames.contains(methodName)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
if (!InheritanceUtil.isInheritor(aClass, "java.sql.Statement")) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] args = argumentList.getExpressions();
if (args.length == 0) {
return;
}
final PsiExpression arg = args[0];
final PsiType type = arg.getType();
if (type == null) {
return;
}
final String typeText = type.getCanonicalText();
if (!CommonClassNames.JAVA_LANG_STRING.equals(typeText)) {
return;
}
final String stringValue =
(String)ConstantExpressionUtil.computeCastTo(arg, type);
if (stringValue != null) {
return;
}
registerMethodCallError(expression);
}
项目:tools-idea
文件:LoadLibraryWithNonConstantStringInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression =
expression.getMethodExpression();
@NonNls final String methodName =
methodExpression.getReferenceName();
if (!"loadLibrary".equals(methodName)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
if (!InheritanceUtil.isInheritor(aClass, "java.lang.System")) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] args = argumentList.getExpressions();
if (args.length == 0) {
return;
}
final PsiExpression arg = args[0];
final PsiType type = arg.getType();
if (type == null) {
return;
}
final String typeText = type.getCanonicalText();
if (!CommonClassNames.JAVA_LANG_STRING.equals(typeText)) {
return;
}
final String stringValue =
(String)ConstantExpressionUtil.computeCastTo(arg, type);
if (stringValue != null) {
return;
}
registerMethodCallError(expression);
}
项目:tools-idea
文件:JDBCPrepareStatementWithNonConstantStringInspection.java
@Override
public void visitMethodCallExpression(
@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
final PsiReferenceExpression methodExpression =
expression.getMethodExpression();
final String methodName = methodExpression.getReferenceName();
if (!s_execMethodNames.contains(methodName)) {
return;
}
final PsiMethod method = expression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
if (aClass == null) {
return;
}
if (!InheritanceUtil.isInheritor(aClass, "java.sql.Connection")) {
return;
}
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] args = argumentList.getExpressions();
if (args.length == 0) {
return;
}
final PsiExpression arg = args[0];
final PsiType type = arg.getType();
if (type == null) {
return;
}
final String typeText = type.getCanonicalText();
if (!CommonClassNames.JAVA_LANG_STRING.equals(typeText)) {
return;
}
final String stringValue =
(String)ConstantExpressionUtil.computeCastTo(arg, type);
if (stringValue != null) {
return;
}
registerMethodCallError(expression);
}