Added namespace classes to Java static member scope.
This commit is contained in:
+25
@@ -19,7 +19,10 @@ package org.jetbrains.jet.lang.resolve.java.resolver;
|
|||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
|
import com.intellij.psi.PsiMember;
|
||||||
|
import com.intellij.psi.PsiModifier;
|
||||||
import com.intellij.psi.PsiPackage;
|
import com.intellij.psi.PsiPackage;
|
||||||
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||||
@@ -170,6 +173,12 @@ public final class JavaNamespaceResolver {
|
|||||||
// static members of enum class into class object descriptor
|
// static members of enum class into class object descriptor
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (DescriptorResolverUtils.isKotlinClass(psiClass)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!hasStaticMembers(psiClass)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS);
|
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.CLASS_STATICS);
|
||||||
return new JavaClassStaticMembersScope(
|
return new JavaClassStaticMembersScope(
|
||||||
namespaceDescriptor,
|
namespaceDescriptor,
|
||||||
@@ -207,4 +216,20 @@ public final class JavaNamespaceResolver {
|
|||||||
private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) {
|
private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) {
|
||||||
return psiClassFinder.findPsiClass(PackageClassUtils.getPackageClassFqName(packageFQN), PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
|
return psiClassFinder.findPsiClass(PackageClassUtils.getPackageClassFqName(packageFQN), PsiClassFinder.RuntimeClassesHandleMode.IGNORE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean hasStaticMembers(@NotNull PsiClass psiClass) {
|
||||||
|
for (PsiMember member : ContainerUtil.concat(psiClass.getMethods(), psiClass.getFields())) {
|
||||||
|
if (member.hasModifierProperty(PsiModifier.STATIC)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PsiClass nestedClass : psiClass.getInnerClasses()) {
|
||||||
|
if (nestedClass.hasModifierProperty(PsiModifier.STATIC) && hasStaticMembers(nestedClass)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+9
-2
@@ -61,13 +61,20 @@ public final class ScopeUtils {
|
|||||||
|
|
||||||
if (psiClass.hasModifierProperty(PsiModifier.PUBLIC)) {
|
if (psiClass.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||||
ProgressIndicatorProvider.checkCanceled();
|
ProgressIndicatorProvider.checkCanceled();
|
||||||
ClassDescriptor classDescriptor = descriptorResolver
|
FqName fqName = new FqName(psiClass.getQualifiedName());
|
||||||
.resolveClass(new FqName(psiClass.getQualifiedName()), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
ClassDescriptor classDescriptor = descriptorResolver.resolveClass(fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
||||||
if (classDescriptor != null) {
|
if (classDescriptor != null) {
|
||||||
result.add(classDescriptor);
|
result.add(classDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NamespaceDescriptor namespaceDescriptor = descriptorResolver.resolveNamespace(
|
||||||
|
fqName, DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN);
|
||||||
|
if (namespaceDescriptor != null) {
|
||||||
|
result.add(namespaceDescriptor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user