Move method
This commit is contained in:
@@ -20,6 +20,7 @@ import com.google.common.base.Function;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.impl.CheckUtil;
|
import com.intellij.psi.impl.CheckUtil;
|
||||||
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
|
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
|
||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
@@ -534,4 +535,28 @@ public class JetPsiUtil {
|
|||||||
List<JetElement> statements = blockExpression.getStatements();
|
List<JetElement> statements = blockExpression.getStatements();
|
||||||
return statements.isEmpty() ? null : statements.get(statements.size() - 1);
|
return statements.isEmpty() ? null : statements.get(statements.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static JetClassOrObject getOutermostClassOrObject(@NotNull JetClassOrObject classOrObject) {
|
||||||
|
JetClassOrObject current = classOrObject;
|
||||||
|
while (true) {
|
||||||
|
PsiElement parent = current.getParent();
|
||||||
|
assert classOrObject.getParent() != null : "Class with no parent: " + classOrObject.getText();
|
||||||
|
|
||||||
|
if (parent instanceof PsiFile) {
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
if (parent instanceof JetClassObject) {
|
||||||
|
// current class IS the class object declaration
|
||||||
|
parent = parent.getParent();
|
||||||
|
assert parent instanceof JetClassBody : "Parent of class object is not a class body: " + parent;
|
||||||
|
}
|
||||||
|
if (!(parent instanceof JetClassBody)) {
|
||||||
|
// It is a local class, no legitimate outer
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
current = (JetClassOrObject) parent.getParent();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-19
@@ -150,25 +150,12 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static JetClassOrObject getOutermostClassOrObject(@NotNull JetClassOrObject classOrObject) {
|
private static JetClassOrObject getOutermostClassOrObject(@NotNull JetClassOrObject classOrObject) {
|
||||||
JetClassOrObject current = classOrObject;
|
JetClassOrObject outermostClass = JetPsiUtil.getOutermostClassOrObject(classOrObject);
|
||||||
while (true) {
|
if (outermostClass == null) {
|
||||||
PsiElement parent = current.getParent();
|
throw new IllegalStateException("Attempt to build a light class for a local class: " + classOrObject.getText());
|
||||||
assert classOrObject.getParent() != null : "Class with no parent: " + classOrObject.getText();
|
}
|
||||||
|
else {
|
||||||
if (parent instanceof PsiFile) {
|
return outermostClass;
|
||||||
return current;
|
|
||||||
}
|
|
||||||
if (parent instanceof JetClassObject) {
|
|
||||||
// current class IS the class object declaration
|
|
||||||
parent = parent.getParent();
|
|
||||||
assert parent instanceof JetClassBody : "Parent of class object is not a class body: " + parent;
|
|
||||||
}
|
|
||||||
if (!(parent instanceof JetClassBody)) {
|
|
||||||
// It is a local class, no legitimate outer
|
|
||||||
throw new IllegalStateException("Attempt to build a light class for a local class: " + classOrObject.getText());
|
|
||||||
}
|
|
||||||
|
|
||||||
current = (JetClassOrObject) parent.getParent();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user