Move method

This commit is contained in:
Natalia.Ukhorskaya
2013-03-25 17:13:46 +04:00
parent 362770c9b1
commit 74bd843d1b
2 changed files with 31 additions and 19 deletions
@@ -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();
}
}
} }
@@ -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();
} }
} }