From b91053da0b5d683dd1028eeef7a0290ae25d8d10 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 15 Jan 2015 21:08:19 +0300 Subject: [PATCH] Optimized checking if reference to builtin. It was slowing up usages search for back-references to standard library (not builtins, but in "kotlin" package) --- .../idea/references/BuiltInsReferenceResolver.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java index 97b9c0f5690..0702a3fcb6a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java @@ -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 resolveBuiltInSymbol(@NotNull DeclarationDescriptor declarationDescriptor) { if (bindingContext == null) {