Optimized checking if reference to builtin.
It was slowing up usages search for back-references to standard library (not builtins, but in "kotlin" package)
This commit is contained in:
+11
-1
@@ -199,6 +199,8 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
return findCurrentDescriptorForMember(unwrapFakeOverride((CallableMemberDescriptor) originalDescriptor).getOriginal());
|
return findCurrentDescriptorForMember(unwrapFakeOverride((CallableMemberDescriptor) originalDescriptor).getOriginal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isFromBuiltinModule(originalDescriptor)) return null;
|
||||||
|
|
||||||
DeclarationDescriptor containingDeclaration = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
|
DeclarationDescriptor containingDeclaration = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
|
||||||
JetScope memberScope = getMemberScope(containingDeclaration);
|
JetScope memberScope = getMemberScope(containingDeclaration);
|
||||||
if (memberScope == null) return null;
|
if (memberScope == null) return null;
|
||||||
@@ -222,10 +224,12 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) {
|
private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) {
|
||||||
if (originalDescriptor instanceof ClassDescriptor) {
|
if (originalDescriptor instanceof ClassDescriptor) {
|
||||||
|
if (!isFromBuiltinModule(originalDescriptor)) return null;
|
||||||
return findCurrentDescriptorForClass((ClassDescriptor) originalDescriptor);
|
return findCurrentDescriptorForClass((ClassDescriptor) originalDescriptor);
|
||||||
}
|
}
|
||||||
else if (originalDescriptor instanceof PackageFragmentDescriptor) {
|
else if (originalDescriptor instanceof PackageFragmentDescriptor) {
|
||||||
return KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(((PackageFragmentDescriptor) originalDescriptor).getFqName())
|
return isFromBuiltinModule(originalDescriptor)
|
||||||
|
&& KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(((PackageFragmentDescriptor) originalDescriptor).getFqName())
|
||||||
? builtinsPackageFragment
|
? builtinsPackageFragment
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
@@ -237,6 +241,12 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isFromBuiltinModule(@NotNull DeclarationDescriptor originalDescriptor) {
|
||||||
|
// TODO This is optimization only
|
||||||
|
// It should be rewritten by checking declarationDescriptor.getSource(), when the latter returns something non-trivial for builtins.
|
||||||
|
return KotlinBuiltIns.getInstance().getBuiltInsModule() == DescriptorUtils.getContainingModule(originalDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Collection<PsiElement> resolveBuiltInSymbol(@NotNull DeclarationDescriptor declarationDescriptor) {
|
public Collection<PsiElement> resolveBuiltInSymbol(@NotNull DeclarationDescriptor declarationDescriptor) {
|
||||||
if (bindingContext == null) {
|
if (bindingContext == null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user