provide quick fix to qualify super call to default interface method from class (IDEA-172325)

This commit is contained in:
Anna Kozlova
2017-05-30 14:51:43 +03:00
parent d2e9ac696e
commit 3f76ffa2f8
5 changed files with 45 additions and 2 deletions

View File

@@ -826,6 +826,9 @@ public class HighlightMethodUtil {
QUICK_FIX_FACTORY.createModifierListFix((PsiClass)resolve, PsiModifier.STATIC, true, false));
}
}
else if (qualifierExpression instanceof PsiSuperExpression && ((PsiSuperExpression)qualifierExpression).getQualifier() == null) {
QualifySuperArgumentFix.registerQuickFixAction((PsiSuperExpression)qualifierExpression, highlightInfo);
}
QuickFixAction.registerQuickFixAction(highlightInfo, fixRange, QUICK_FIX_FACTORY.createCreateMethodFromUsageFix(methodCall));
QuickFixAction.registerQuickFixAction(highlightInfo, fixRange, QUICK_FIX_FACTORY.createCreateAbstractMethodFromUsageFix(methodCall));

View File

@@ -40,7 +40,7 @@ public class QualifySuperArgumentFix extends QualifyThisOrSuperArgumentFix {
public static void registerQuickFixAction(@NotNull PsiSuperExpression expr, HighlightInfo highlightInfo) {
LOG.assertTrue(expr.getQualifier() == null);
final PsiClass containingClass = PsiTreeUtil.getParentOfType(expr, PsiClass.class);
if (containingClass != null && containingClass.isInterface()) {
if (containingClass != null) {
final PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(expr, PsiMethodCallExpression.class);
if (callExpression != null) {
final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(callExpression.getProject());
@@ -50,7 +50,8 @@ public class QualifySuperArgumentFix extends QualifyThisOrSuperArgumentFix {
final PsiExpression superQualifierCopy = copy.getMethodExpression().getQualifierExpression();
LOG.assertTrue(superQualifierCopy != null);
superQualifierCopy.delete();
if (((PsiMethodCallExpression)elementFactory.createExpressionFromText(copy.getText(), superClass)).resolveMethod() != null) {
PsiMethod method = ((PsiMethodCallExpression)elementFactory.createExpressionFromText(copy.getText(), superClass)).resolveMethod();
if (method != null && !method.hasModifierProperty(PsiModifier.ABSTRACT)) {
QuickFixAction.registerQuickFixAction(highlightInfo, new QualifySuperArgumentFix(expr, superClass));
}
}

View File

@@ -0,0 +1,14 @@
// "Qualify super expression with 'Super'" "true"
interface Super
{
default void method()
{
System.out.println("Super.method()");
}
}
class Sub implements Super {
void foo() {
Super.super.method();
}
}

View File

@@ -0,0 +1,11 @@
// "Qualify super expression with 'Super'" "false"
interface Super
{
void method();
}
interface Sub extends Super {
default void foo() {
<caret>super.method();
}
}

View File

@@ -0,0 +1,14 @@
// "Qualify super expression with 'Super'" "true"
interface Super
{
default void method()
{
System.out.println("Super.method()");
}
}
class Sub implements Super {
void foo() {
super.me<caret>thod();
}
}