From 7362f69a6224ddd47f40736fd46253d2ad7aee86 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sat, 19 Jan 2013 15:25:44 -0800 Subject: [PATCH] Static methods supported --- .../KotlinSignatureInJavaMarkerProvider.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java index ec594ac272d..0f640ecd250 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java @@ -36,6 +36,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.di.InjectorForJavaSemanticServices; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -121,11 +122,29 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { assert qualifiedName != null : "Trying to get line markers for anonymous or local class " + containingClass.getText(); FqName classFqName = new FqName(qualifiedName); + JetScope memberScope = getScopeForMember(javaDescriptorResolver, classFqName, member); - ClassDescriptor klass = javaDescriptorResolver.resolveClass(classFqName); - assert klass != null : " Couldn't find class " + classFqName; + return getDescriptorForMember(member, memberScope, bindingContext); + } - return getDescriptorForMember(member, klass.getDefaultType().getMemberScope(), bindingContext); + @NotNull + private static JetScope getScopeForMember( + @NotNull JavaDescriptorResolver javaDescriptorResolver, + @NotNull FqName classFqName, + @NotNull PsiMember member + ) { + if (member.hasModifierProperty(PsiModifier.STATIC)) { + NamespaceDescriptor packageDescriptor = javaDescriptorResolver.resolveNamespace(classFqName); + assert packageDescriptor != null : "No package descriptor for Java class " + classFqName + " that has a static member " + member; + + return packageDescriptor.getMemberScope(); + } + else { + ClassDescriptor klass = javaDescriptorResolver.resolveClass(classFqName); + assert klass != null : " Couldn't find class " + classFqName; + + return klass.getDefaultType().getMemberScope(); + } } @Nullable