access static via interface class: fix case without qualifier (IDEA-192246)

This commit is contained in:
Anna Kozlova
2018-05-22 11:03:13 +03:00
parent 574c9ca1fc
commit e077fa59eb
3 changed files with 41 additions and 16 deletions

View File

@@ -92,24 +92,29 @@ public class AccessStaticViaInstanceFix extends LocalQuickFixAndIntentionActionO
if (containingClass == null) return;
final PsiExpression qualifierExpression = myExpression.getQualifierExpression();
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
if (qualifierExpression != null) {
if (!checkSideEffects(project, containingClass, qualifierExpression, factory, myExpression,editor)) return;
WriteAction.run(() -> {
try {
PsiElement newQualifier = qualifierExpression.replace(factory.createReferenceExpression(containingClass));
PsiElement qualifiedWithClassName = myExpression.copy();
if (myExpression.getTypeParameters().length == 0 && !(containingClass.isInterface() && !containingClass.equals(PsiTreeUtil.getParentOfType(myExpression, PsiClass.class)))) {
newQualifier.delete();
if (myExpression.resolve() != myMember) {
myExpression.replace(qualifiedWithClassName);
}
if (qualifierExpression != null && !checkSideEffects(project, containingClass, qualifierExpression, factory, myExpression,editor)) return;
WriteAction.run(() -> {
try {
PsiElement newQualifier = factory.createReferenceExpression(containingClass);
if (qualifierExpression != null) {
newQualifier = qualifierExpression.replace(newQualifier);
}
else {
myExpression.setQualifierExpression((PsiExpression)newQualifier);
newQualifier = myExpression.getQualifierExpression();
}
PsiElement qualifiedWithClassName = myExpression.copy();
if (myExpression.getTypeParameters().length == 0 && !(containingClass.isInterface() && !containingClass.equals(PsiTreeUtil.getParentOfType(myExpression, PsiClass.class)))) {
newQualifier.delete();
if (myExpression.resolve() != myMember) {
myExpression.replace(qualifiedWithClassName);
}
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
});
}
}
catch (IncorrectOperationException e) {
LOG.error(e);
}
});
}
@Override

View File

@@ -0,0 +1,10 @@
// "Access static 'I.m()' via class 'I' reference" "true"
interface I {
static void m() {}
}
class A implements I {
{
Runnable r = () -> I.m();
}
}

View File

@@ -0,0 +1,10 @@
// "Access static 'I.m()' via class 'I' reference" "true"
interface I {
static void m() {}
}
class A implements I {
{
Runnable r = () -> m<caret>();
}
}