disable create local from usage in this/super calls (IDEA-184182)

This commit is contained in:
Anna.Kozlova
2017-12-22 16:23:22 +01:00
parent 2999cda37b
commit bee978ba1e
2 changed files with 24 additions and 2 deletions
@@ -56,7 +56,20 @@ public class CreateLocalFromUsageFix extends CreateVarFromUsageFix {
protected boolean isAvailableImpl(int offset) {
if (!super.isAvailableImpl(offset)) return false;
if(myReferenceExpression.isQualified()) return false;
return PsiTreeUtil.getParentOfType(myReferenceExpression, PsiCodeBlock.class) != null;
if (PsiTreeUtil.getParentOfType(myReferenceExpression, PsiCodeBlock.class) != null) {
PsiStatement anchor = getAnchor(myReferenceExpression);
if (anchor instanceof PsiExpressionStatement) {
PsiExpression expression = ((PsiExpressionStatement)anchor).getExpression();
if (expression instanceof PsiMethodCallExpression) {
PsiMethod method = ((PsiMethodCallExpression)expression).resolveMethod();
if (method != null && method.isConstructor()) { //this or super call
return false;
}
}
}
return true;
}
return false;
}
@Override
@@ -154,7 +167,7 @@ public class CreateLocalFromUsageFix extends CreateVarFromUsageFix {
return false;
}
private static PsiStatement getAnchor(PsiExpression[] expressionOccurences) {
private static PsiStatement getAnchor(PsiExpression... expressionOccurences) {
PsiElement parent = expressionOccurences[0];
int minOffset = expressionOccurences[0].getTextRange().getStartOffset();
for (int i = 1; i < expressionOccurences.length; i++) {
@@ -0,0 +1,9 @@
// "Create local variable 'a'" "false"
class C {
public C(int i) {
}
public C() {
this(<caret>a);
}
}