mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 05:21:29 +07:00
MemberModel: do not suggest moving into class if there's enclosing class present (IDEA-274893)
GitOrigin-RevId: 8800ed4e42320a3df002be58955a8a02f6149c17
This commit is contained in:
committed by
intellij-monorepo-bot
parent
358420d1ea
commit
fb9bddf05c
@@ -5,6 +5,7 @@ import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.tree.ElementType;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -35,7 +36,7 @@ public class MemberModel {
|
||||
}
|
||||
|
||||
public static @Nullable MemberModel create(@NotNull PsiErrorElement errorElement) {
|
||||
if (hasClassesWithUnclosedBraces(errorElement.getContainingFile())) return null;
|
||||
if (inClass(errorElement) || hasClassesWithUnclosedBraces(errorElement.getContainingFile())) return null;
|
||||
List<PsiElement> children = new ArrayList<>();
|
||||
PsiElement prevSibling = errorElement.getPrevSibling();
|
||||
while (isMemberPart(prevSibling)) {
|
||||
@@ -52,7 +53,19 @@ public class MemberModel {
|
||||
Collections.addAll(children, errorElement.getChildren());
|
||||
return new MemberParser(ContainerUtil.filter(children, c -> !isWsOrComment(c))).parse();
|
||||
}
|
||||
|
||||
|
||||
private static boolean inClass(@NotNull PsiErrorElement psiErrorElement) {
|
||||
PsiClass psiClass = PsiTreeUtil.getParentOfType(psiErrorElement, PsiClass.class);
|
||||
if (psiClass == null) return false;
|
||||
PsiElement lBrace = psiClass.getLBrace();
|
||||
if (lBrace == null) return true;
|
||||
PsiElement rBrace = psiClass.getRBrace();
|
||||
if (rBrace == null) return true;
|
||||
TextRange errorRange = psiErrorElement.getTextRange();
|
||||
return lBrace.getTextOffset() <= errorRange.getStartOffset() &&
|
||||
rBrace.getTextOffset() + 1 >= errorRange.getEndOffset();
|
||||
}
|
||||
|
||||
private static boolean hasClassesWithUnclosedBraces(@Nullable PsiFile psiFile) {
|
||||
PsiJavaFile javaFile = tryCast(psiFile, PsiJavaFile.class);
|
||||
return javaFile == null || ContainerUtil.exists(javaFile.getClasses(), c -> c.getRBrace() == null);
|
||||
|
||||
@@ -50,7 +50,7 @@ class D {
|
||||
}
|
||||
|
||||
interface IllegalMods {
|
||||
<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>
|
||||
void m1()<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,19 @@
|
||||
// "Move member into class" "false"
|
||||
|
||||
public class beforeIncompleteMethodInClass {
|
||||
private String testInt;
|
||||
|
||||
public beforeIncompleteMethodInClass(int testInt) {
|
||||
this.testInt = "aaaa";
|
||||
}
|
||||
|
||||
public String getTestInt() {
|
||||
return testInt;
|
||||
}
|
||||
|
||||
public void setTestInt(String testInt) {
|
||||
this.testInt = testInt;
|
||||
}
|
||||
|
||||
public<caret>
|
||||
}
|
||||
Reference in New Issue
Block a user