diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt index 489a1c64a14..d381a23ba96 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/context.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackagePartProvider import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.JavaClassFinder import org.jetbrains.kotlin.load.java.components.ExternalAnnotationResolver import org.jetbrains.kotlin.load.java.components.ExternalSignatureResolver @@ -49,7 +50,8 @@ class JavaResolverComponents( val sourceElementFactory: JavaSourceElementFactory, val moduleClassResolver: ModuleClassResolver, val packageMapper: PackagePartProvider, - val supertypeLoopChecker: SupertypeLoopChecker + val supertypeLoopChecker: SupertypeLoopChecker, + val lookupTracker: LookupTracker ) open class LazyJavaResolverContext( diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt index e7a29126428..258e278f4a3 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt @@ -16,10 +16,7 @@ package org.jetbrains.kotlin.load.java.lazy.descriptors -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ClassifierDescriptor -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptorKindExclude @@ -29,7 +26,6 @@ import org.jetbrains.kotlin.load.java.lazy.resolveKotlinBinaryClass import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaPackage import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver -import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name @@ -103,11 +99,21 @@ public class LazyJavaPackageScope( } } - override fun getClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? = - if (SpecialNames.isSafeIdentifier(name)) classes(name) else null + override fun getClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { + if (!SpecialNames.isSafeIdentifier(name)) return null - override fun getProperties(name: Name, location: LookupLocation) = deserializedPackageScope().getProperties(name, location) - override fun getFunctions(name: Name, location: LookupLocation) = deserializedPackageScope().getFunctions(name, location) + super.getFunctions(name, location) + recordLookup(name, location) + return classes(name) + } + + override fun getProperties(name: Name, location: LookupLocation): Collection { + recordLookup(name, location) + return deserializedPackageScope().getProperties(name, NoLookupLocation.FOR_ALREADY_TRACKED) + } + override fun getFunctions(name: Name, location: LookupLocation): List { + recordLookup(name, location) + return deserializedPackageScope().getFunctions(name, NoLookupLocation.FOR_ALREADY_TRACKED) + super.getFunctions(name, NoLookupLocation.FOR_ALREADY_TRACKED) + } override fun addExtraDescriptors(result: MutableSet, kindFilter: DescriptorKindFilter, diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt index 5da8f0eb4f5..6bfc2db4850 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.incremental.record import org.jetbrains.kotlin.load.java.components.ExternalSignatureResolver import org.jetbrains.kotlin.load.java.components.TypeUsage import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor @@ -213,7 +214,10 @@ public abstract class LazyJavaScope( return ResolvedValueParameters(descriptors, synthesizedNames) } - override fun getFunctions(name: Name, location: LookupLocation) = functions(name) + override fun getFunctions(name: Name, location: LookupLocation): Collection { + recordLookup(name, location) + return functions(name) + } protected open fun getFunctionNames(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection = memberIndex().getMethodNames(nameFilter) @@ -294,7 +298,10 @@ public abstract class LazyJavaScope( return propertyType } - override fun getProperties(name: Name, location: LookupLocation): Collection = properties(name) + override fun getProperties(name: Name, location: LookupLocation): Collection { + recordLookup(name, location) + return properties(name) + } override fun getOwnDeclaredDescriptors() = getDescriptors() @@ -357,4 +364,8 @@ public abstract class LazyJavaScope( p.popIndent() p.println("}") } + + protected fun recordLookup(name: Name, from: LookupLocation) { + c.components.lookupTracker.record(from, this, name) + } } diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt index e1f8a4b25fe..8fc1657b90a 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/kotlin/reflect/RuntimeModuleData.kt @@ -59,7 +59,7 @@ public class RuntimeModuleData private constructor(public val deserialization: D storageManager, ReflectJavaClassFinder(classLoader), reflectKotlinClassFinder, deserializedDescriptorResolver, ExternalAnnotationResolver.EMPTY, ExternalSignatureResolver.DO_NOTHING, RuntimeErrorReporter, JavaResolverCache.EMPTY, JavaPropertyInitializerEvaluator.DoNothing, SamConversionResolver, RuntimeSourceElementFactory, singleModuleClassResolver, - runtimePackageFacadeProvider, SupertypeLoopChecker.EMPTY + runtimePackageFacadeProvider, SupertypeLoopChecker.EMPTY, LookupTracker.DO_NOTHING ) val lazyJavaPackageFragmentProvider =