From 73e303d324b862b1e71982c18f5b2115c7a58ac7 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 26 Jan 2012 14:09:00 +0100 Subject: [PATCH] test for "Constant StringBuffer may be String" inspection --- ...ngBufferReplaceableByStringInspection.java | 39 +++++++------------ .../StringBufferReplaceableByString.java | 11 ++++++ .../expected.xml | 16 ++++++++ ...fferReplaceableByStringInspectionTest.java | 11 ++++++ 4 files changed, 51 insertions(+), 26 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/StringBufferReplaceableByString.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/expected.xml create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/StringBufferReplaceableByStringInspectionTest.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/StringBufferReplaceableByStringInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/StringBufferReplaceableByStringInspection.java index 5d6be63483a9..15cb757ba90c 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/StringBufferReplaceableByStringInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/StringBufferReplaceableByStringInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2012 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. @@ -24,8 +24,7 @@ import com.siyeh.ig.psiutils.TypeUtils; import com.siyeh.ig.psiutils.VariableAccessUtils; import org.jetbrains.annotations.NotNull; -public class StringBufferReplaceableByStringInspection - extends BaseInspection { +public class StringBufferReplaceableByStringInspection extends BaseInspection { @Override @NotNull @@ -46,21 +45,17 @@ public class StringBufferReplaceableByStringInspection return new StringBufferReplaceableByStringBuilderVisitor(); } - private static class StringBufferReplaceableByStringBuilderVisitor - extends BaseInspectionVisitor { + private static class StringBufferReplaceableByStringBuilderVisitor extends BaseInspectionVisitor { @Override public void visitLocalVariable(@NotNull PsiLocalVariable variable) { super.visitLocalVariable(variable); - - final PsiCodeBlock codeBlock = - PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class); + final PsiCodeBlock codeBlock = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class); if (codeBlock == null) { return; } final PsiType type = variable.getType(); - if (!TypeUtils.typeEquals(CommonClassNames.JAVA_LANG_STRING_BUFFER, - type) && + if (!TypeUtils.typeEquals(CommonClassNames.JAVA_LANG_STRING_BUFFER, type) && !TypeUtils.typeEquals(CommonClassNames.JAVA_LANG_STRING_BUILDER, type)) { return; } @@ -80,8 +75,7 @@ public class StringBufferReplaceableByStringInspection if (VariableAccessUtils.variableIsReturned(variable, codeBlock)) { return; } - if (VariableAccessUtils.variableIsPassedAsMethodArgument(variable, - codeBlock)) { + if (VariableAccessUtils.variableIsPassedAsMethodArgument(variable, codeBlock)) { return; } if (variableIsModified(variable, codeBlock)) { @@ -90,16 +84,13 @@ public class StringBufferReplaceableByStringInspection registerVariableError(variable); } - public static boolean variableIsModified(PsiVariable variable, - PsiElement context) { - final VariableIsModifiedVisitor visitor = - new VariableIsModifiedVisitor(variable); + public static boolean variableIsModified(PsiVariable variable, PsiElement context) { + final VariableIsModifiedVisitor visitor = new VariableIsModifiedVisitor(variable); context.accept(visitor); return visitor.isModified(); } - private static boolean isNewStringBufferOrStringBuilder( - PsiExpression expression) { + private static boolean isNewStringBufferOrStringBuilder(PsiExpression expression) { if (expression == null) { return false; } @@ -107,16 +98,12 @@ public class StringBufferReplaceableByStringInspection return true; } else if (expression instanceof PsiMethodCallExpression) { - final PsiMethodCallExpression methodCallExpression = - (PsiMethodCallExpression)expression; - if (!VariableIsModifiedVisitor.isStringBufferUpdate( - methodCallExpression)) { + final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression; + if (!VariableIsModifiedVisitor.isStringBufferUpdate(methodCallExpression)) { return false; } - final PsiReferenceExpression methodExpression = - methodCallExpression.getMethodExpression(); - final PsiExpression qualifier = - methodExpression.getQualifierExpression(); + final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); + final PsiExpression qualifier = methodExpression.getQualifierExpression(); return isNewStringBufferOrStringBuilder(qualifier); } return false; diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/StringBufferReplaceableByString.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/StringBufferReplaceableByString.java new file mode 100644 index 000000000000..7f0eb5b6fbfa --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/StringBufferReplaceableByString.java @@ -0,0 +1,11 @@ +package com.siyeh.igtest.performance.constant_string_buffer_may_be_string; + +public class StringBufferReplaceableByString { + + StringBuilder foo() { + StringBuilder builder = new StringBuilder("asdfasdfasdf"); + StringBuffer buffer = new StringBuffer("test"); + StringBuilder result = new StringBuilder("return"); + return result; + } +} diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/expected.xml new file mode 100644 index 000000000000..7ecadfbba1b4 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/constant_string_buffer_may_be_string/expected.xml @@ -0,0 +1,16 @@ + + + + StringBufferReplaceableByString.java + 6 + Constant StringBuffer may be String + Constant StringBuffer <code>builder</code> may be declared as String #loc + + + + StringBufferReplaceableByString.java + 7 + Constant StringBuffer may be String + Constant StringBuffer <code>buffer</code> may be declared as String #loc + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/StringBufferReplaceableByStringInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/StringBufferReplaceableByStringInspectionTest.java new file mode 100644 index 000000000000..7b9a0e928b64 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/StringBufferReplaceableByStringInspectionTest.java @@ -0,0 +1,11 @@ +package com.siyeh.ig.performance; + +import com.siyeh.ig.IGInspectionTestCase; + +public class StringBufferReplaceableByStringInspectionTest extends IGInspectionTestCase { + + public void test() throws Exception { + doTest("com/siyeh/igtest/performance/constant_string_buffer_may_be_string", + new StringBufferReplaceableByStringInspection()); + } +} \ No newline at end of file