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:
Evgeny Gerashchenko
2015-01-15 21:08:19 +03:00
parent 4cede47c70
commit b91053da0b
@@ -199,6 +199,8 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
return findCurrentDescriptorForMember(unwrapFakeOverride((CallableMemberDescriptor) originalDescriptor).getOriginal());
}
if (!isFromBuiltinModule(originalDescriptor)) return null;
DeclarationDescriptor containingDeclaration = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
JetScope memberScope = getMemberScope(containingDeclaration);
if (memberScope == null) return null;
@@ -222,10 +224,12 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
@Nullable
private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) {
if (originalDescriptor instanceof ClassDescriptor) {
if (!isFromBuiltinModule(originalDescriptor)) return null;
return findCurrentDescriptorForClass((ClassDescriptor) originalDescriptor);
}
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
: 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
public Collection<PsiElement> resolveBuiltInSymbol(@NotNull DeclarationDescriptor declarationDescriptor) {
if (bindingContext == null) {