Add method isLocalClass to JetPsiUtil

This commit is contained in:
Natalia.Ukhorskaya
2013-03-25 17:25:03 +04:00
parent 74bd843d1b
commit c6e934169f
3 changed files with 48 additions and 1 deletions
@@ -536,6 +536,10 @@ public class JetPsiUtil {
return statements.isEmpty() ? null : statements.get(statements.size() - 1);
}
public static boolean isLocalClass(@NotNull JetClassOrObject classOrObject) {
return getOutermostClassOrObject(classOrObject) == null;
}
@Nullable
public static JetClassOrObject getOutermostClassOrObject(@NotNull JetClassOrObject classOrObject) {
JetClassOrObject current = classOrObject;
+21
View File
@@ -0,0 +1,21 @@
class A {
class B
object G
class object {
class C
object H
fun foo() {
class DLocal
object KLocal
}
}
fun foo2() {
class ELocal {
class FLocal
}
object LLocal
}
}
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.psi;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.util.PsiTreeUtil;
import junit.framework.Assert;
import org.jetbrains.jet.JetLiteFixture;
@@ -25,8 +26,11 @@ import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
public class JetPsiUtilTest extends JetLiteFixture {
public void testUnquotedIdentifier() {
Assert.assertEquals("", JetPsiUtil.unquoteIdentifier(""));
Assert.assertEquals("a2", JetPsiUtil.unquoteIdentifier("a2"));
@@ -63,6 +67,24 @@ public class JetPsiUtilTest extends JetLiteFixture {
Assert.assertNotSame(new ImportPath(new FqName("some.test"), false), getImportPathFromParsed("import some.Test"));
}
public void testIsLocalClass() throws IOException {
String text = FileUtil.loadFile(new File(getTestDataPath() + "/psiUtil/isLocalClass.kt"));
JetClass aClass = JetPsiFactory.createClass(getProject(), text);
@SuppressWarnings("unchecked")
Collection<JetClassOrObject> classOrObjects = PsiTreeUtil.collectElementsOfType(aClass, JetClassOrObject.class);
for (JetClassOrObject classOrObject : classOrObjects) {
String classOrObjectName = classOrObject.getName();
if (classOrObjectName != null && classOrObjectName.contains("Local")) {
assertTrue("JetPsiUtil.isLocalClass should return true for " + classOrObjectName, JetPsiUtil.isLocalClass(classOrObject));
}
else {
assertFalse("JetPsiUtil.isLocalClass should return false for " + classOrObjectName, JetPsiUtil.isLocalClass(classOrObject));
}
}
}
@Override
protected JetCoreEnvironment createEnvironment() {
return new JetCoreEnvironment(getTestRootDisposable(), new CompilerConfiguration());