(no message)

This commit is contained in:
Dave Griffith
2005-03-09 18:50:35 +03:00
parent 21a702ee15
commit cfd0825a78
@@ -10,84 +10,93 @@ import com.siyeh.ig.GroupNames;
import com.siyeh.ig.psiutils.TypeUtils;
import com.siyeh.ig.psiutils.VariableAccessUtils;
public class StringBufferReplaceableByStringInspection extends ExpressionInspection {
public String getDisplayName() {
public class StringBufferReplaceableByStringInspection
extends ExpressionInspection{
public String getDisplayName(){
return "Constant StringBuffer may be String";
}
public String getGroupDisplayName() {
public String getGroupDisplayName(){
return GroupNames.PERFORMANCE_GROUP_NAME;
}
public String buildErrorString(PsiElement location) {
public String buildErrorString(PsiElement location){
return "Constant StringBuffer #ref may be declared as String #loc";
}
public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager, boolean onTheFly) {
return new StringBufferReplaceableByStringBuilderVisitor(this, inspectionManager, onTheFly);
public BaseInspectionVisitor createVisitor(InspectionManager inspectionManager,
boolean onTheFly){
return new StringBufferReplaceableByStringBuilderVisitor(this,
inspectionManager,
onTheFly);
}
private static class StringBufferReplaceableByStringBuilderVisitor extends BaseInspectionVisitor {
private StringBufferReplaceableByStringBuilderVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) {
private static class StringBufferReplaceableByStringBuilderVisitor
extends BaseInspectionVisitor{
private StringBufferReplaceableByStringBuilderVisitor(BaseInspection inspection,
InspectionManager inspectionManager,
boolean isOnTheFly){
super(inspection, inspectionManager, isOnTheFly);
}
public void visitLocalVariable(PsiLocalVariable variable) {
public void visitLocalVariable(PsiLocalVariable variable){
super.visitLocalVariable(variable);
final PsiCodeBlock codeBlock =
(PsiCodeBlock) PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
if (codeBlock == null) {
(PsiCodeBlock) PsiTreeUtil.getParentOfType(variable,
PsiCodeBlock.class);
if(codeBlock == null){
return;
}
final PsiType type = variable.getType();
if (!TypeUtils.typeEquals("java.lang.StringBuffer", type) &&
!TypeUtils.typeEquals("java.lang.StringBuilder", type)) {
if(!TypeUtils.typeEquals("java.lang.StringBuffer", type) &&
!TypeUtils.typeEquals("java.lang.StringBuilder", type)){
return;
}
final PsiExpression initializer = variable.getInitializer();
if (initializer == null) {
if(initializer == null){
return;
}
if (!isNewStringBufferOrStringBuilder(initializer)) {
if(!isNewStringBufferOrStringBuilder(initializer)){
return;
}
if (VariableAccessUtils.variableIsAssigned(variable, codeBlock)) {
if(VariableAccessUtils.variableIsAssigned(variable, codeBlock)){
return;
}
if (VariableAccessUtils.variableIsAssignedFrom(variable, codeBlock)) {
if(VariableAccessUtils.variableIsAssignedFrom(variable, codeBlock)){
return;
}
if (VariableAccessUtils.variableIsReturned(variable, codeBlock)) {
if(VariableAccessUtils.variableIsReturned(variable, codeBlock)){
return;
}
if (VariableAccessUtils.variableIsPassedAsMethodArgument(variable, codeBlock)) {
if(VariableAccessUtils.variableIsPassedAsMethodArgument(variable,
codeBlock)){
return;
}
if (variableIsAppendedTo(variable, codeBlock)) {
if(variableIsModified(variable, codeBlock)){
return;
}
registerVariableError(variable);
}
public static boolean variableIsAppendedTo(PsiVariable variable, PsiElement context) {
final VariableIsAppendedToVisitor visitor = new VariableIsAppendedToVisitor(variable);
public static boolean variableIsModified(PsiVariable variable,
PsiElement context){
final VariableIsModifiedVisitor visitor =
new VariableIsModifiedVisitor(variable);
context.accept(visitor);
return visitor.isAppendedTo();
}
private boolean isNewStringBufferOrStringBuilder(PsiExpression expression) {
if (expression == null) {
private boolean isNewStringBufferOrStringBuilder(PsiExpression expression){
if(expression == null){
return false;
} else if (expression instanceof PsiNewExpression) {
} else if(expression instanceof PsiNewExpression){
return true;
} else if (expression instanceof PsiMethodCallExpression) {
} else if(expression instanceof PsiMethodCallExpression){
final PsiReferenceExpression methodExpression =
((PsiMethodCallExpression) expression).getMethodExpression();
final String methodName = methodExpression.getReferenceName();
if (!"append".equals(methodName)) {
if(!"append".equals(methodName)){
return false;
}
final PsiExpression qualifier =
@@ -97,5 +106,4 @@ public class StringBufferReplaceableByStringInspection extends ExpressionInspect
return false;
}
}
}