fix modifiers for created inner classes (IDEA-167750)

This commit is contained in:
Anna.Kozlova
2017-02-06 17:59:19 +01:00
parent 95254e27aa
commit dbcac2d62f
5 changed files with 20 additions and 4 deletions

View File

@@ -61,7 +61,7 @@ public class CreateInnerClassFromNewFix extends CreateClassFromNewFix {
}
}
if (!PsiTreeUtil.isAncestor(targetClass, newExpression, true) || PsiUtil.getEnclosingStaticElement(newExpression, targetClass) != null || isInThisOrSuperCall(newExpression)) {
if (!targetClass.isInterface() && (!PsiTreeUtil.isAncestor(targetClass, newExpression, true) || PsiUtil.getEnclosingStaticElement(newExpression, targetClass) != null || isInThisOrSuperCall(newExpression))) {
modifierList.setModifierProperty(PsiModifier.STATIC, true);
}
created = (PsiClass)targetClass.add(created);

View File

@@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.PopupChooserBuilder;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.ui.components.JBList;
import com.intellij.util.IncorrectOperationException;
@@ -139,12 +140,12 @@ public class CreateInnerClassFromUsageFix extends CreateClassFromUsageBaseFix {
: myKind == CreateClassKind.CLASS ? elementFactory.createClass(refName) : elementFactory.createEnum(refName);
final PsiModifierList modifierList = created.getModifierList();
LOG.assertTrue(modifierList != null);
if (aClass.isInterface()) {
if (aClass.isInterface() || PsiUtil.isLocalOrAnonymousClass(aClass)) {
modifierList.setModifierProperty(PsiModifier.PACKAGE_LOCAL, true);
} else {
modifierList.setModifierProperty(PsiModifier.PRIVATE, true);
}
if (RefactoringUtil.isInStaticContext(ref, aClass)) {
if (RefactoringUtil.isInStaticContext(ref, aClass) && !aClass.isInterface()) {
modifierList.setModifierProperty(PsiModifier.STATIC, true);
}
if (superClassName != null) {

View File

@@ -6,7 +6,7 @@ public interface I {
Collection c = new MyCollection(1, "test");
}
static class MyCollection implements Collection {
class MyCollection implements Collection {
public MyCollection(int i, String test) {
}
}

View File

@@ -0,0 +1,9 @@
// "Create inner class 'Param'" "true"
import java.util.*;
public interface I {
void foo(Param p);
class Param {
}
}

View File

@@ -0,0 +1,6 @@
// "Create inner class 'Param'" "true"
import java.util.*;
public interface I {
void foo(Par<caret>am p);
}