From 8d69af87ce24cba219196cbceda7b07620131cd8 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 31 May 2012 19:57:24 +0400 Subject: [PATCH] Completion for java inner class names --- .../resolve/java/JavaClassOrPackageScope.java | 18 +++++++++++------- .../basic/multifile/JavaInnerClasses.java | 5 +++++ .../basic/multifile/JavaInnerClasses.kt | 5 +++++ .../completion/JetCompletionMultiTestBase.java | 11 ++++++++--- .../JetMultifileBasicCompletionTest.java | 5 +++++ 5 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 idea/testData/completion/basic/multifile/JavaInnerClasses.java create mode 100644 idea/testData/completion/basic/multifile/JavaInnerClasses.kt diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java index ccecc40ded9..928ff13c239 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java @@ -21,11 +21,7 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiModifier; import com.intellij.psi.PsiPackage; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; -import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; -import org.jetbrains.jet.lang.descriptors.VariableDescriptor; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl; @@ -82,8 +78,16 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl { allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveFieldGroup(resolverScopeData)); - allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses( - resolverScopeData.classOrNamespaceDescriptor, resolverScopeData.psiClass, resolverScopeData.staticMembers)); + // TODO: Trying to hack the situation when we produce namespace descriptor for java class and still want to see inner classes + if (getContainingDeclaration() instanceof JavaNamespaceDescriptor) { + allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses( + resolverScopeData.classOrNamespaceDescriptor, resolverScopeData.psiClass, false)); + } + else { + allDescriptors.addAll(semanticServices.getDescriptorResolver().resolveInnerClasses( + resolverScopeData.classOrNamespaceDescriptor, resolverScopeData.psiClass, + resolverScopeData.staticMembers)); + } } if (resolverScopeData.psiPackage != null) { diff --git a/idea/testData/completion/basic/multifile/JavaInnerClasses.java b/idea/testData/completion/basic/multifile/JavaInnerClasses.java new file mode 100644 index 00000000000..5415da857b1 --- /dev/null +++ b/idea/testData/completion/basic/multifile/JavaInnerClasses.java @@ -0,0 +1,5 @@ +public final class R { + public static final class layout { + public static final int main=0x7f020000; + } +} \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/JavaInnerClasses.kt b/idea/testData/completion/basic/multifile/JavaInnerClasses.kt new file mode 100644 index 00000000000..9c81417b698 --- /dev/null +++ b/idea/testData/completion/basic/multifile/JavaInnerClasses.kt @@ -0,0 +1,5 @@ +fun main(args: Array) { + println(R.) +} + +// EXIST: layout \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/JetCompletionMultiTestBase.java b/idea/tests/org/jetbrains/jet/completion/JetCompletionMultiTestBase.java index 370bbc30ea1..cb11bef5e1c 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetCompletionMultiTestBase.java +++ b/idea/tests/org/jetbrains/jet/completion/JetCompletionMultiTestBase.java @@ -27,11 +27,12 @@ public abstract class JetCompletionMultiTestBase extends CompletionTestCase { /** * @param completionLevel {@see CompletionParameters.getInvocationCount()} javadoc + * @param fileNameList * @throws Exception */ - protected void doFileTest(int completionLevel) { + protected void doFileTest(int completionLevel, String[] fileNameList) { try { - configureByFiles(null, getFileNameList()); + configureByFiles(null, fileNameList); complete(completionLevel); final String fileText = getFile().getText(); @@ -49,7 +50,11 @@ public abstract class JetCompletionMultiTestBase extends CompletionTestCase { } } + protected void doFileTest(int completionLevel) { + doFileTest(completionLevel, getFileNameList()); + } + protected void doFileTest() { - doFileTest(1); + doFileTest(1, getFileNameList()); } } diff --git a/idea/tests/org/jetbrains/jet/completion/JetMultifileBasicCompletionTest.java b/idea/tests/org/jetbrains/jet/completion/JetMultifileBasicCompletionTest.java index 9408e1781c8..a8b73ce4688 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetMultifileBasicCompletionTest.java +++ b/idea/tests/org/jetbrains/jet/completion/JetMultifileBasicCompletionTest.java @@ -43,6 +43,11 @@ public class JetMultifileBasicCompletionTest extends JetCompletionMultiTestBase doFileTest(); } + public void testJavaInnerClasses() throws Exception { + String fileName = getTestName(false); + doFileTest(1, new String[] {fileName + ".kt", fileName + ".java"}); + } + public void testNotImportedExtensionFunction() throws Exception { doFileTest(); } -- GitLab