mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 06:39:38 +07:00
MemberModel: fixed case when there is more than one member out of class (IJ-CR-6471)
GitOrigin-RevId: f84b1e8acee891a84ab637ad7fc48492674e5468
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5b3be771e8
commit
88b4660169
@@ -35,6 +35,7 @@ public class MemberModel {
|
||||
}
|
||||
|
||||
public static @Nullable MemberModel create(@NotNull PsiErrorElement errorElement) {
|
||||
if (hasClassesWithUnclosedBraces(errorElement.getContainingFile())) return null;
|
||||
List<PsiElement> children = new ArrayList<>();
|
||||
PsiElement prevSibling = errorElement.getPrevSibling();
|
||||
while (isMemberPart(prevSibling)) {
|
||||
@@ -43,6 +44,7 @@ public class MemberModel {
|
||||
}
|
||||
else {
|
||||
children.add(prevSibling);
|
||||
if (prevSibling instanceof PsiField || prevSibling instanceof PsiMethod) break;
|
||||
}
|
||||
prevSibling = prevSibling.getPrevSibling();
|
||||
}
|
||||
@@ -50,6 +52,11 @@ public class MemberModel {
|
||||
Collections.addAll(children, errorElement.getChildren());
|
||||
return new MemberParser(ContainerUtil.filter(children, c -> !isWsOrComment(c))).parse();
|
||||
}
|
||||
|
||||
private static boolean hasClassesWithUnclosedBraces(@Nullable PsiFile psiFile) {
|
||||
PsiJavaFile javaFile = tryCast(psiFile, PsiJavaFile.class);
|
||||
return javaFile == null || ContainerUtil.exists(javaFile.getClasses(), c -> c.getRBrace() == null);
|
||||
}
|
||||
|
||||
private static boolean isWsOrComment(@NotNull PsiElement psiElement) {
|
||||
return psiElement instanceof PsiWhiteSpace || psiElement instanceof PsiComment;
|
||||
|
||||
@@ -56,7 +56,9 @@ public class MoveMemberIntoClassFix extends LocalQuickFixAndIntentionActionOnPsi
|
||||
documentManager.commitDocument(document);
|
||||
psiClass = classPtr.getElement();
|
||||
if (psiClass == null) return;
|
||||
psiClass.add(member);
|
||||
PsiElement rBrace = psiClass.getRBrace();
|
||||
if (rBrace == null) return;
|
||||
psiClass.addBefore(member, rBrace);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,7 +50,7 @@ class D {
|
||||
}
|
||||
|
||||
interface IllegalMods {
|
||||
void m1()<error descr="'{' or ';' expected"> </error>default<error descr="Identifier or type expected">;</error> <error descr="Not allowed in interface">{ }</error>
|
||||
<error descr="Class member declared outside of a class">void m1()</error><error descr="'{' or ';' expected"> </error>default<error descr="Identifier or type expected">;</error> <error descr="Not allowed in interface">{ }</error>
|
||||
|
||||
<error descr="Static methods in interfaces should have a body">static void m2()</error>;
|
||||
<error descr="Illegal combination of modifiers: 'static' and 'default'">static</error> <error descr="Illegal combination of modifiers: 'default' and 'static'">default</error> void m3() { }
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// "Move member into class" "true"
|
||||
|
||||
class beforeTwoMethods {
|
||||
|
||||
void bar() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void bar() {
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// "Move member into class" "true"
|
||||
|
||||
class beforeTwoMethods {
|
||||
|
||||
}
|
||||
|
||||
void bar() {
|
||||
|
||||
}
|
||||
|
||||
void bar<caret>() {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user