diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.java index 0560cecb5bc..cb3861eb992 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaElementCollectionFromPsiArrayUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2013 JetBrains s.r.o. + * Copyright 2010-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,8 @@ package org.jetbrains.jet.lang.resolve.java.structure.impl; import com.intellij.psi.*; +import kotlin.Function1; +import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.java.structure.*; import org.jetbrains.jet.lang.resolve.name.Name; @@ -141,11 +143,27 @@ public class JavaElementCollectionFromPsiArrayUtil { return result; } + @NotNull + private static List convert(@NotNull Iterable elements, @NotNull final Factory factory) { + if (!elements.iterator().hasNext()) return Collections.emptyList(); + return KotlinPackage.map(elements, new Function1() { + @Override + public Java invoke(Psi psi) { + return factory.create(psi); + } + }); + } + @NotNull public static Collection classes(@NotNull PsiClass[] classes) { return convert(classes, Factories.CLASSES); } + @NotNull + public static Collection classes(@NotNull Iterable classes) { + return convert(classes, Factories.CLASSES); + } + @NotNull public static Collection packages(@NotNull PsiPackage[] packages) { return convert(packages, Factories.PACKAGES); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.java index 36acd62af93..d5e1119758c 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/impl/JavaPackageImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2013 JetBrains s.r.o. + * Copyright 2010-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,10 @@ package org.jetbrains.jet.lang.resolve.java.structure.impl; +import com.intellij.openapi.util.Condition; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiPackage; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage; @@ -35,7 +38,12 @@ public class JavaPackageImpl extends JavaElementImpl implements Java @Override @NotNull public Collection getClasses() { - return classes(getPsi().getClasses()); + return classes(ContainerUtil.filter(getPsi().getClasses(), new Condition() { + @Override + public boolean value(PsiClass aClass) { + return aClass.getName() != null; + } + })); } @Override diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/GroovyClassNameCompletionFromDefaultPackage.kt b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/GroovyClassNameCompletionFromDefaultPackage.kt new file mode 100644 index 00000000000..08b0fe7a339 --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/GroovyClassNameCompletionFromDefaultPackage.kt @@ -0,0 +1,7 @@ +class TestKotlin + +val test = Test + +// EXIST: TestKotlin +// EXIST: TestGroovyNormal +// EXIST: TestGroovyScript diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/normalname.groovy b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/normalname.groovy new file mode 100644 index 00000000000..d4b65fb0eff --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/normalname.groovy @@ -0,0 +1,2 @@ +public class TestGroovyNormal { +} \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/script-file-no-classes.groovy b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/script-file-no-classes.groovy new file mode 100644 index 00000000000..28e1317297d --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/script-file-no-classes.groovy @@ -0,0 +1,3 @@ +def method() { + +} \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/script-file-with-class.groovy b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/script-file-with-class.groovy new file mode 100644 index 00000000000..dde56e81b0a --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage/script-file-with-class.groovy @@ -0,0 +1,2 @@ +public class TestGroovyScript { +} \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/GroovyClassNameCompletionFromNonDefaultPackage.kt b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/GroovyClassNameCompletionFromNonDefaultPackage.kt new file mode 100644 index 00000000000..0b4961881f9 --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/GroovyClassNameCompletionFromNonDefaultPackage.kt @@ -0,0 +1,10 @@ +package foo + +class TestKotlin + +val test = Test + +// EXIST: TestKotlin +// EXIST: TestGroovyNormal +// EXIST: TestGroovyScript +// INVOCATION_COUNT: 2 diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/normalname.groovy b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/normalname.groovy new file mode 100644 index 00000000000..d4b65fb0eff --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/normalname.groovy @@ -0,0 +1,2 @@ +public class TestGroovyNormal { +} \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/script-file-no-classes.groovy b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/script-file-no-classes.groovy new file mode 100644 index 00000000000..28e1317297d --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/script-file-no-classes.groovy @@ -0,0 +1,3 @@ +def method() { + +} \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/script-file-with-class.groovy b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/script-file-with-class.groovy new file mode 100644 index 00000000000..dde56e81b0a --- /dev/null +++ b/idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage/script-file-with-class.groovy @@ -0,0 +1,2 @@ +public class TestGroovyScript { +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java index 38ae7b78298..686d2291fcf 100644 --- a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java @@ -76,6 +76,16 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ doTest("idea/testData/completion/basic/multifile/ExtensionOnNullable"); } + @TestMetadata("GroovyClassNameCompletionFromDefaultPackage") + public void testGroovyClassNameCompletionFromDefaultPackage() throws Exception { + doTest("idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromDefaultPackage"); + } + + @TestMetadata("GroovyClassNameCompletionFromNonDefaultPackage") + public void testGroovyClassNameCompletionFromNonDefaultPackage() throws Exception { + doTest("idea/testData/completion/basic/multifile/GroovyClassNameCompletionFromNonDefaultPackage"); + } + @TestMetadata("InImportedFunctionLiteralParameter") public void testInImportedFunctionLiteralParameter() throws Exception { doTest("idea/testData/completion/basic/multifile/InImportedFunctionLiteralParameter");