mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-07 05:09:37 +07:00
move static to interface (IDEA-105844)
This commit is contained in:
@@ -32,6 +32,7 @@ import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.HelpID;
|
||||
import com.intellij.refactoring.JavaRefactoringSettings;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
@@ -411,7 +412,7 @@ public class MoveMembersDialog extends RefactoringDialog implements MoveMembersO
|
||||
}
|
||||
|
||||
public boolean isMemberEnabled(MemberInfo member) {
|
||||
if(myTargetClass != null && myTargetClass.isInterface()) {
|
||||
if(myTargetClass != null && myTargetClass.isInterface() && !PsiUtil.isLanguageLevel8OrHigher(myTargetClass)) {
|
||||
return !(member.getMember() instanceof PsiMethod);
|
||||
}
|
||||
return super.isMemberEnabled(member);
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.psi.impl.source.tree.*;
|
||||
import com.intellij.psi.tree.ChildRoleBase;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.CharTable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -134,12 +135,17 @@ public class ClassElement extends CompositeElement implements Constants {
|
||||
}
|
||||
}
|
||||
else if (psiClass.isInterface()) {
|
||||
final boolean level8OrHigher = PsiUtil.isLanguageLevel8OrHigher(psiClass);
|
||||
for (ASTNode child = first; child != afterLast; child = next) {
|
||||
next = child.getTreeNext();
|
||||
if (child.getElementType() == JavaElementType.METHOD || child.getElementType() == JavaElementType.FIELD) {
|
||||
final IElementType childElementType = child.getElementType();
|
||||
if (childElementType == JavaElementType.METHOD || childElementType == JavaElementType.FIELD) {
|
||||
CompositeElement modifierList = (CompositeElement)((CompositeElement)child).findChildByRole(ChildRole.MODIFIER_LIST);
|
||||
final TokenSet removeModifiersBitSet = level8OrHigher && childElementType == JavaElementType.METHOD
|
||||
? MODIFIERS_TO_REMOVE_IN_INTERFACE_BIT_SET_18_METHOD
|
||||
: MODIFIERS_TO_REMOVE_IN_INTERFACE_BIT_SET;
|
||||
while (true) {
|
||||
ASTNode modifier = modifierList.findChildByType(MODIFIERS_TO_REMOVE_IN_INTERFACE_BIT_SET);
|
||||
ASTNode modifier = modifierList.findChildByType(removeModifiersBitSet);
|
||||
if (modifier == null) break;
|
||||
modifierList.deleteChildInternal(modifier);
|
||||
}
|
||||
@@ -233,6 +239,12 @@ public class ClassElement extends CompositeElement implements Constants {
|
||||
NATIVE_KEYWORD
|
||||
);
|
||||
|
||||
private static final TokenSet MODIFIERS_TO_REMOVE_IN_INTERFACE_BIT_SET_18_METHOD = TokenSet.create(
|
||||
PUBLIC_KEYWORD, ABSTRACT_KEYWORD,
|
||||
FINAL_KEYWORD,
|
||||
NATIVE_KEYWORD
|
||||
);
|
||||
|
||||
private static final TokenSet MODIFIERS_TO_REMOVE_IN_ENUM_BIT_SET = TokenSet.create(
|
||||
PUBLIC_KEYWORD, FINAL_KEYWORD
|
||||
);
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
public class A {
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
public interface B {
|
||||
static void foo() {
|
||||
System.out.println("Hello");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
public class A {
|
||||
public static void foo() {
|
||||
System.out.println("Hello");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
public interface B {
|
||||
}
|
||||
@@ -2,7 +2,9 @@ package com.intellij.refactoring;
|
||||
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiMember;
|
||||
@@ -126,6 +128,18 @@ public class MoveMembersTest extends MultiFileTestCase {
|
||||
public void testInnerToInterface() throws Exception {
|
||||
doTest("A", "B", 0);
|
||||
}
|
||||
|
||||
public void testStaticToInterface() throws Exception {
|
||||
final LanguageLevelProjectExtension levelProjectExtension = LanguageLevelProjectExtension.getInstance(getProject());
|
||||
final LanguageLevel level = levelProjectExtension.getLanguageLevel();
|
||||
try {
|
||||
levelProjectExtension.setLanguageLevel(LanguageLevel.JDK_1_8);
|
||||
doTest("A", "B", 0);
|
||||
}
|
||||
finally {
|
||||
levelProjectExtension.setLanguageLevel(level);
|
||||
}
|
||||
}
|
||||
|
||||
public void testEscalateVisibility1() throws Exception {
|
||||
doTest("A", "B", true, VisibilityUtil.ESCALATE_VISIBILITY, 0);
|
||||
|
||||
Reference in New Issue
Block a user