From 5a6bcea8260add750e4b93ce015b640ab5a544c5 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Fri, 30 Oct 2015 16:42:10 +0300 Subject: [PATCH] Introduce location in SamConversionResolver::resolveSamConstructor and provide right location in usages --- .../java/sam/SamConversionResolverImpl.kt | 26 +++++++++++-------- .../java/components/SamConversionResolver.kt | 5 ++-- .../lazy/descriptors/LazyJavaPackageScope.kt | 2 +- .../descriptors/LazyJavaStaticClassScope.kt | 6 ++--- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SamConversionResolverImpl.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SamConversionResolverImpl.kt index 57544fd50c6..4facfd04d5a 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SamConversionResolverImpl.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/SamConversionResolverImpl.kt @@ -16,24 +16,28 @@ package org.jetbrains.kotlin.load.java.sam -import org.jetbrains.kotlin.load.java.components.SamConversionResolver -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.scopes.KtScope -import org.jetbrains.kotlin.load.java.descriptors.* -import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.load.java.structure.JavaMethod -import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor +import org.jetbrains.kotlin.incremental.components.LookupLocation +import org.jetbrains.kotlin.load.java.components.SamConversionResolver +import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor +import org.jetbrains.kotlin.load.java.descriptors.JavaConstructorDescriptor +import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor +import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptor +import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaClassDescriptor import org.jetbrains.kotlin.load.java.sources.JavaSourceElement import org.jetbrains.kotlin.load.java.structure.JavaClass -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor +import org.jetbrains.kotlin.load.java.structure.JavaMethod +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.scopes.KtScope +import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils -import java.util.ArrayList import org.jetbrains.kotlin.types.checker.KotlinTypeChecker +import java.util.* public object SamConversionResolverImpl : SamConversionResolver { - override fun resolveSamConstructor(name: Name, scope: KtScope): SamConstructorDescriptor? { - val classifier = scope.getClassifier(name) as? LazyJavaClassDescriptor ?: return null + override fun resolveSamConstructor(name: Name, scope: KtScope, location: LookupLocation): SamConstructorDescriptor? { + val classifier = scope.getClassifier(name, location) as? LazyJavaClassDescriptor ?: return null if (classifier.getFunctionTypeForSamInterface() == null) return null return SingleAbstractMethodUtils.createSamConstructorFunction(scope.getContainingDeclaration(), classifier) } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/SamConversionResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/SamConversionResolver.kt index 7af0554688f..4002fad7d49 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/SamConversionResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/SamConversionResolver.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.load.java.components import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptor import org.jetbrains.kotlin.load.java.structure.JavaMethod @@ -27,13 +28,13 @@ import org.jetbrains.kotlin.types.KotlinType public interface SamConversionResolver { public companion object EMPTY : SamConversionResolver { override fun resolveSamAdapter(original: D) = null - override fun resolveSamConstructor(name: Name, scope: KtScope) = null + override fun resolveSamConstructor(name: Name, scope: KtScope, location: LookupLocation) = null override fun resolveFunctionTypeIfSamInterface( classDescriptor: JavaClassDescriptor, resolveMethod: (JavaMethod) -> FunctionDescriptor ): KotlinType? = null } - public fun resolveSamConstructor(name: Name, scope: KtScope): SamConstructorDescriptor? + public fun resolveSamConstructor(name: Name, scope: KtScope, location: LookupLocation): SamConstructorDescriptor? public fun resolveSamAdapter(original: D): D? 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 258e278f4a3..aac31bde1d5 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 @@ -151,7 +151,7 @@ public class LazyJavaPackageScope( ) override fun computeNonDeclaredFunctions(result: MutableCollection, name: Name) { - result.addIfNotNull(c.components.samConversionResolver.resolveSamConstructor(name, this)) + result.addIfNotNull(c.components.samConversionResolver.resolveSamConstructor(name, this, NoLookupLocation.FOR_ALREADY_TRACKED)) } override fun getSubPackages() = subPackages() diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt index 30920126b86..bdc5a8c3d65 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt @@ -28,9 +28,7 @@ import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValueOfMethod -import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValuesMethod -import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValuesProperty +import org.jetbrains.kotlin.resolve.DescriptorFactory.* import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.types.KotlinType @@ -71,7 +69,7 @@ public class LazyJavaStaticClassScope( override fun computeNonDeclaredFunctions(result: MutableCollection, name: Name) { val nestedClassesScope = getContainingDeclaration().getUnsubstitutedInnerClassesScope() - result.addIfNotNull(c.components.samConversionResolver.resolveSamConstructor(name, nestedClassesScope)) + result.addIfNotNull(c.components.samConversionResolver.resolveSamConstructor(name, nestedClassesScope, NoLookupLocation.FOR_ALREADY_TRACKED)) val functionsFromSupertypes = getStaticFunctionsFromJavaSuperClasses(name, getContainingDeclaration()) result.addAll(DescriptorResolverUtils.resolveOverrides(name, functionsFromSupertypes, result, getContainingDeclaration(), c.components.errorReporter))