From ae273b6c24afbfa2c5aba83b9641bf65c9b344b6 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 9 Dec 2016 15:10:27 +0700 Subject: [PATCH] ExpressionUtils#getCallForQualifier extracted --- .../StringConcatenationInLoopsInspection.java | 8 +++---- .../siyeh/ig/psiutils/ExpressionUtils.java | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java index 8de7613a8526..da0cf3d971fe 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/StringConcatenationInLoopsInspection.java @@ -362,11 +362,9 @@ public class StringConcatenationInLoopsInspection extends BaseInspection { if(assignment.getOperationTokenType().equals(JavaTokenType.PLUSEQ)) return; } } - if(parent instanceof PsiReferenceExpression && - ((PsiReferenceExpression)parent).getQualifierExpression() == ref && - parent.getParent() instanceof PsiMethodCallExpression) { - PsiMethodCallExpression call = (PsiMethodCallExpression)parent.getParent(); - replaceInCallQualifier(variable, results, call, ct); + PsiMethodCallExpression methodCallExpression = ExpressionUtils.getCallForQualifier(ref); + if(methodCallExpression != null) { + replaceInCallQualifier(variable, results, methodCallExpression, ct); return; } if(parent instanceof PsiExpressionList && parent.getParent() instanceof PsiMethodCallExpression) { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java index 6bd889fefc0d..4df4ca095552 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java @@ -841,4 +841,26 @@ public class ExpressionUtils { expression = PsiUtil.skipParenthesizedExprDown(expression); return expression instanceof PsiReferenceExpression && ((PsiReferenceExpression)expression).isReferenceTo(variable); } + + /** + * Returns a method call expression for the supplied qualifier + * + * @param qualifier for method call + * @return a method call expression or null if the supplied expression is not a method call qualifier + */ + @Contract(value = "null -> null", pure = true) + public static PsiMethodCallExpression getCallForQualifier(PsiExpression qualifier) { + if(qualifier == null) return null; + PsiElement parent = PsiUtil.skipParenthesizedExprUp(qualifier.getParent()); + if(parent instanceof PsiReferenceExpression) { + PsiReferenceExpression methodExpression = (PsiReferenceExpression)parent; + if(PsiTreeUtil.isAncestor(methodExpression.getQualifierExpression(), qualifier, false)) { + PsiElement gParent = methodExpression.getParent(); + if (gParent instanceof PsiMethodCallExpression) { + return (PsiMethodCallExpression)gParent; + } + } + } + return null; + } } \ No newline at end of file