Merge LazyJavaResolverContext and LazyJavaResolverContextWithTypes

This commit is contained in:
Alexander Udalov
2014-11-24 11:34:11 +03:00
parent 60662e5831
commit b56076bd6a
10 changed files with 57 additions and 118 deletions
@@ -31,23 +31,7 @@ public class LazyJavaPackageFragmentProvider(
val module: ModuleDescriptor val module: ModuleDescriptor
) : PackageFragmentProvider { ) : PackageFragmentProvider {
private val c = LazyJavaResolverContext( private val c = LazyJavaResolverContext(outerContext, this, FragmentClassResolver(), TypeParameterResolver.EMPTY)
this,
FragmentClassResolver(),
outerContext.storageManager,
outerContext.finder,
outerContext.kotlinClassFinder,
outerContext.deserializedDescriptorResolver,
outerContext.externalAnnotationResolver,
outerContext.externalSignatureResolver,
outerContext.errorReporter,
outerContext.methodSignatureChecker,
outerContext.javaResolverCache,
outerContext.javaPropertyInitializerEvaluator,
outerContext.samConversionResolver,
outerContext.sourceElementFactory,
outerContext.moduleClassResolver
)
private val packageFragments: MemoizedFunctionToNullable<FqName, LazyJavaPackageFragment> = private val packageFragments: MemoizedFunctionToNullable<FqName, LazyJavaPackageFragment> =
c.storageManager.createMemoizedFunctionWithNullableValues { c.storageManager.createMemoizedFunctionWithNullableValues {
@@ -67,12 +51,7 @@ public class LazyJavaPackageFragmentProvider(
val packageFragment = getPackageFragment(fqName.parent()) val packageFragment = getPackageFragment(fqName.parent())
if (packageFragment == null) return@lambda null if (packageFragment == null) return@lambda null
LazyJavaClassDescriptor( LazyJavaClassDescriptor(c, packageFragment, fqName, jClass)
c.withTypes(TypeParameterResolver.EMPTY),
packageFragment,
fqName,
jClass
)
} }
private fun getPackageFragment(fqName: FqName) = packageFragments(fqName) private fun getPackageFragment(fqName: FqName) = packageFragments(fqName)
@@ -25,7 +25,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames
import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.resolveAnnotation import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.resolveAnnotation
class LazyJavaAnnotations( class LazyJavaAnnotations(
c: LazyJavaResolverContextWithTypes, c: LazyJavaResolverContext,
val annotationOwner: JavaAnnotationOwner, val annotationOwner: JavaAnnotationOwner,
private val extraLookup: (FqName) -> JavaAnnotation? = { null } private val extraLookup: (FqName) -> JavaAnnotation? = { null }
) : Annotations { ) : Annotations {
@@ -48,7 +48,7 @@ class LazyJavaAnnotations(
override fun isEmpty() = iterator().hasNext() override fun isEmpty() = iterator().hasNext()
} }
fun LazyJavaResolverContextWithTypes.resolveAnnotations(annotationsOwner: JavaAnnotationOwner): Annotations fun LazyJavaResolverContext.resolveAnnotations(annotationsOwner: JavaAnnotationOwner): Annotations
= LazyJavaAnnotations(this, annotationsOwner) { fqName -> externalAnnotationResolver.findExternalAnnotation(annotationsOwner, fqName) } = LazyJavaAnnotations(this, annotationsOwner) { fqName -> externalAnnotationResolver.findExternalAnnotation(annotationsOwner, fqName) }
private fun GlobalJavaResolverContext.hasAnnotation(owner: JavaAnnotationOwner, annotationFqName: FqName): Boolean private fun GlobalJavaResolverContext.hasAnnotation(owner: JavaAnnotationOwner, annotationFqName: FqName): Boolean
@@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver
import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder
import org.jetbrains.jet.lang.resolve.java.structure.JavaPropertyInitializerEvaluator import org.jetbrains.jet.lang.resolve.java.structure.JavaPropertyInitializerEvaluator
import org.jetbrains.jet.lang.resolve.java.sources.JavaSourceElementFactory import org.jetbrains.jet.lang.resolve.java.sources.JavaSourceElementFactory
import org.jetbrains.jet.lang.resolve.java.structure.JavaTypeParameterListOwner
open class GlobalJavaResolverContext( open class GlobalJavaResolverContext(
val storageManager: StorageManager, val storageManager: StorageManager,
@@ -44,72 +45,34 @@ open class GlobalJavaResolverContext(
) )
open class LazyJavaResolverContext( open class LazyJavaResolverContext(
globalContext: GlobalJavaResolverContext,
val packageFragmentProvider: LazyJavaPackageFragmentProvider, val packageFragmentProvider: LazyJavaPackageFragmentProvider,
val javaClassResolver: LazyJavaClassResolver, val javaClassResolver: LazyJavaClassResolver,
storageManager: StorageManager,
finder: JavaClassFinder,
kotlinClassFinder: KotlinClassFinder,
deserializedDescriptorResolver: DeserializedDescriptorResolver,
externalAnnotationResolver: ExternalAnnotationResolver,
externalSignatureResolver: ExternalSignatureResolver,
errorReporter: ErrorReporter,
methodSignatureChecker: MethodSignatureChecker,
javaResolverCache: JavaResolverCache,
javaPropertyInitializerEvaluator: JavaPropertyInitializerEvaluator,
samConversionResolver: SamConversionResolver,
sourceElementFactory: JavaSourceElementFactory,
moduleClassResolver: ModuleClassResolver
) : GlobalJavaResolverContext(storageManager, finder, kotlinClassFinder, deserializedDescriptorResolver,
externalAnnotationResolver, externalSignatureResolver,
errorReporter, methodSignatureChecker, javaResolverCache, javaPropertyInitializerEvaluator,
samConversionResolver, sourceElementFactory, moduleClassResolver)
fun LazyJavaResolverContext.withTypes(
typeParameterResolver: TypeParameterResolver = TypeParameterResolver.EMPTY
) = LazyJavaResolverContextWithTypes(
packageFragmentProvider,
javaClassResolver,
storageManager,
finder,
kotlinClassFinder,
deserializedDescriptorResolver,
externalAnnotationResolver,
externalSignatureResolver,
errorReporter,
methodSignatureChecker,
javaResolverCache,
javaPropertyInitializerEvaluator,
samConversionResolver,
sourceElementFactory,
moduleClassResolver,
LazyJavaTypeResolver(this, typeParameterResolver),
typeParameterResolver
)
class LazyJavaResolverContextWithTypes(
packageFragmentProvider: LazyJavaPackageFragmentProvider,
javaClassResolver: LazyJavaClassResolver,
storageManager: StorageManager,
finder: JavaClassFinder,
kotlinClassFinder: KotlinClassFinder,
deserializedDescriptorResolver: DeserializedDescriptorResolver,
externalAnnotationResolver: ExternalAnnotationResolver,
externalSignatureResolver: ExternalSignatureResolver,
errorReporter: ErrorReporter,
methodSignatureChecker: MethodSignatureChecker,
javaResolverCache: JavaResolverCache,
javaPropertyInitializerEvaluator: JavaPropertyInitializerEvaluator,
samConversionResolver: SamConversionResolver,
sourceElementFactory: JavaSourceElementFactory,
moduleClassResolver: ModuleClassResolver,
val typeResolver: LazyJavaTypeResolver,
val typeParameterResolver: TypeParameterResolver val typeParameterResolver: TypeParameterResolver
) : LazyJavaResolverContext(packageFragmentProvider, javaClassResolver, storageManager, finder, kotlinClassFinder, ) : GlobalJavaResolverContext(
deserializedDescriptorResolver, externalAnnotationResolver, externalSignatureResolver, errorReporter, globalContext.storageManager,
methodSignatureChecker, javaResolverCache, javaPropertyInitializerEvaluator, samConversionResolver, globalContext.finder,
sourceElementFactory, moduleClassResolver) globalContext.kotlinClassFinder,
globalContext.deserializedDescriptorResolver,
globalContext.externalAnnotationResolver,
globalContext.externalSignatureResolver,
globalContext.errorReporter,
globalContext.methodSignatureChecker,
globalContext.javaResolverCache,
globalContext.javaPropertyInitializerEvaluator,
globalContext.samConversionResolver,
globalContext.sourceElementFactory,
globalContext.moduleClassResolver
) {
val typeResolver = LazyJavaTypeResolver(this, typeParameterResolver)
}
fun LazyJavaResolverContextWithTypes.child( fun LazyJavaResolverContext.child(
typeParameterResolver: TypeParameterResolver
) = LazyJavaResolverContext(this, packageFragmentProvider, javaClassResolver, typeParameterResolver)
fun LazyJavaResolverContext.child(
containingDeclaration: DeclarationDescriptor, containingDeclaration: DeclarationDescriptor,
typeParameters: Set<JavaTypeParameter> typeParameterOwner: JavaTypeParameterListOwner
): LazyJavaResolverContextWithTypes = this.withTypes(LazyJavaTypeParameterResolver(this, containingDeclaration, typeParameters)) ) = this.child(LazyJavaTypeParameterResolver(this, containingDeclaration, typeParameterOwner))
@@ -19,7 +19,7 @@ package org.jetbrains.jet.lang.resolve.java.lazy.descriptors
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.jet.lang.types.* import org.jetbrains.jet.lang.types.*
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContextWithTypes import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext
import org.jetbrains.jet.lang.resolve.java.structure.* import org.jetbrains.jet.lang.resolve.java.structure.*
import org.jetbrains.jet.lang.resolve.constants.* import org.jetbrains.jet.lang.resolve.constants.*
import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.lang.resolve.name.Name
@@ -43,14 +43,14 @@ private object DEPRECATED_IN_JAVA : JavaLiteralAnnotationArgument {
override val value: Any? = "Deprecated in Java" override val value: Any? = "Deprecated in Java"
} }
fun LazyJavaResolverContextWithTypes.resolveAnnotation(annotation: JavaAnnotation): LazyJavaAnnotationDescriptor? { fun LazyJavaResolverContext.resolveAnnotation(annotation: JavaAnnotation): LazyJavaAnnotationDescriptor? {
val classId = annotation.getClassId() val classId = annotation.getClassId()
if (classId == null || JvmAnnotationNames.isSpecialAnnotation(classId, !PLATFORM_TYPES)) return null if (classId == null || JvmAnnotationNames.isSpecialAnnotation(classId, !PLATFORM_TYPES)) return null
return LazyJavaAnnotationDescriptor(this, annotation) return LazyJavaAnnotationDescriptor(this, annotation)
} }
class LazyJavaAnnotationDescriptor( class LazyJavaAnnotationDescriptor(
private val c: LazyJavaResolverContextWithTypes, private val c: LazyJavaResolverContext,
val javaAnnotation : JavaAnnotation val javaAnnotation : JavaAnnotation
) : AnnotationDescriptor { ) : AnnotationDescriptor {
@@ -23,7 +23,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase
import org.jetbrains.jet.lang.resolve.scopes.JetScope import org.jetbrains.jet.lang.resolve.scopes.JetScope
import org.jetbrains.jet.lang.types.JetType import org.jetbrains.jet.lang.types.JetType
import org.jetbrains.jet.lang.types.TypeConstructor import org.jetbrains.jet.lang.types.TypeConstructor
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContextWithTypes import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext
import org.jetbrains.jet.lang.resolve.java.lazy.child import org.jetbrains.jet.lang.resolve.java.lazy.child
import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage
import org.jetbrains.jet.lang.resolve.java.lazy.resolveAnnotations import org.jetbrains.jet.lang.resolve.java.lazy.resolveAnnotations
@@ -36,14 +36,14 @@ import org.jetbrains.jet.lang.descriptors.annotations.Annotations
import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor
class LazyJavaClassDescriptor( class LazyJavaClassDescriptor(
private val outerC: LazyJavaResolverContextWithTypes, private val outerC: LazyJavaResolverContext,
containingDeclaration: DeclarationDescriptor, containingDeclaration: DeclarationDescriptor,
internal val fqName: FqName, internal val fqName: FqName,
private val jClass: JavaClass private val jClass: JavaClass
) : ClassDescriptorBase(outerC.storageManager, containingDeclaration, fqName.shortName(), ) : ClassDescriptorBase(outerC.storageManager, containingDeclaration, fqName.shortName(),
outerC.sourceElementFactory.source(jClass)), JavaClassDescriptor { outerC.sourceElementFactory.source(jClass)), JavaClassDescriptor {
private val c: LazyJavaResolverContextWithTypes = outerC.child(this, jClass.getTypeParameters().toSet()); private val c: LazyJavaResolverContext = outerC.child(this, jClass);
{ {
c.javaResolverCache.recordClass(jClass, this) c.javaResolverCache.recordClass(jClass, this)
@@ -19,7 +19,7 @@ package org.jetbrains.jet.lang.resolve.java.lazy.descriptors
import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.descriptors.*
import org.jetbrains.jet.lang.resolve.name.Name import org.jetbrains.jet.lang.resolve.name.Name
import org.jetbrains.jet.lang.resolve.java.structure.* import org.jetbrains.jet.lang.resolve.java.structure.*
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContextWithTypes import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl
import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage
import org.jetbrains.jet.lang.descriptors.impl.ConstructorDescriptorImpl import org.jetbrains.jet.lang.descriptors.impl.ConstructorDescriptorImpl
@@ -38,7 +38,7 @@ import org.jetbrains.jet.lang.types.JetType
import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter
public class LazyJavaClassMemberScope( public class LazyJavaClassMemberScope(
c: LazyJavaResolverContextWithTypes, c: LazyJavaResolverContext,
containingDeclaration: ClassDescriptor, containingDeclaration: ClassDescriptor,
private val jClass: JavaClass private val jClass: JavaClass
) : LazyJavaMemberScope(c, containingDeclaration) { ) : LazyJavaMemberScope(c, containingDeclaration) {
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.resolve.name.Name
import org.jetbrains.jet.lang.resolve.scopes.JetScope import org.jetbrains.jet.lang.resolve.scopes.JetScope
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod
import org.jetbrains.jet.lang.resolve.java.structure.JavaField import org.jetbrains.jet.lang.resolve.java.structure.JavaField
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContextWithTypes import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor
import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.lang.resolve.java.lazy.child import org.jetbrains.jet.lang.resolve.java.lazy.child
@@ -48,7 +48,7 @@ import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter
import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindExclude.NonExtensions import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindExclude.NonExtensions
public abstract class LazyJavaMemberScope( public abstract class LazyJavaMemberScope(
protected val c: LazyJavaResolverContextWithTypes, protected val c: LazyJavaResolverContext,
private val containingDeclaration: DeclarationDescriptor private val containingDeclaration: DeclarationDescriptor
) : JetScope { ) : JetScope {
// this lazy value is not used at all in LazyPackageFragmentScopeForJavaPackage because we do not use caching there // this lazy value is not used at all in LazyPackageFragmentScopeForJavaPackage because we do not use caching there
@@ -115,7 +115,7 @@ public abstract class LazyJavaMemberScope(
containingDeclaration, annotations, method.getName(), c.sourceElementFactory.source(method) containingDeclaration, annotations, method.getName(), c.sourceElementFactory.source(method)
) )
val c = c.child(functionDescriptorImpl, method.getTypeParameters().toSet()) val c = c.child(functionDescriptorImpl, method)
val methodTypeParameters = method.getTypeParameters().map { p -> c.typeParameterResolver.resolveTypeParameter(p)!! } val methodTypeParameters = method.getTypeParameters().map { p -> c.typeParameterResolver.resolveTypeParameter(p)!! }
val valueParameters = resolveValueParameters(c, functionDescriptorImpl, method.getValueParameters()) val valueParameters = resolveValueParameters(c, functionDescriptorImpl, method.getValueParameters())
@@ -155,9 +155,10 @@ public abstract class LazyJavaMemberScope(
protected class ResolvedValueParameters(val descriptors: List<ValueParameterDescriptor>, val hasSynthesizedNames: Boolean) protected class ResolvedValueParameters(val descriptors: List<ValueParameterDescriptor>, val hasSynthesizedNames: Boolean)
protected fun resolveValueParameters( protected fun resolveValueParameters(
c: LazyJavaResolverContextWithTypes, c: LazyJavaResolverContext,
function: FunctionDescriptor, function: FunctionDescriptor,
jValueParameters: List<JavaValueParameter>): ResolvedValueParameters { jValueParameters: List<JavaValueParameter>
): ResolvedValueParameters {
var synthesizedNames = false var synthesizedNames = false
val descriptors = jValueParameters.withIndices().map { pair -> val descriptors = jValueParameters.withIndices().map { pair ->
val (index, javaParameter) = pair val (index, javaParameter) = pair
@@ -19,15 +19,13 @@ package org.jetbrains.jet.lang.resolve.java.lazy.descriptors
import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.descriptors.*
import org.jetbrains.jet.lang.resolve.name.* import org.jetbrains.jet.lang.resolve.name.*
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext
import org.jetbrains.jet.lang.resolve.java.lazy.withTypes
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod
import org.jetbrains.jet.lang.types.JetType import org.jetbrains.jet.lang.types.JetType
import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor
public abstract class LazyJavaStaticScope( public abstract class LazyJavaStaticScope(
c: LazyJavaResolverContext, c: LazyJavaResolverContext,
descriptor: ClassOrPackageFragmentDescriptor descriptor: ClassOrPackageFragmentDescriptor
) : LazyJavaMemberScope(c.withTypes(), descriptor) { ) : LazyJavaMemberScope(c, descriptor) {
override fun getDispatchReceiverParameter() = null override fun getDispatchReceiverParameter() = null
@@ -23,12 +23,12 @@ import org.jetbrains.jet.lang.types.JetType
import org.jetbrains.jet.lang.resolve.java.structure.JavaTypeParameter import org.jetbrains.jet.lang.resolve.java.structure.JavaTypeParameter
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContextWithTypes import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext
import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes
import org.jetbrains.jet.lang.descriptors.SourceElement import org.jetbrains.jet.lang.descriptors.SourceElement
class LazyJavaTypeParameterDescriptor( class LazyJavaTypeParameterDescriptor(
private val c: LazyJavaResolverContextWithTypes, private val c: LazyJavaResolverContext,
public val javaTypeParameter: JavaTypeParameter, public val javaTypeParameter: JavaTypeParameter,
containingDeclaration: DeclarationDescriptor containingDeclaration: DeclarationDescriptor
) : AbstractLazyTypeParameterDescriptor( ) : AbstractLazyTypeParameterDescriptor(
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader
import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass
import org.jetbrains.jet.lang.resolve.name.ClassId import org.jetbrains.jet.lang.resolve.name.ClassId
import org.jetbrains.jet.lang.resolve.java.structure.JavaTypeParameterListOwner
//TODO: (module refactoring) usages of this interface should be replaced by ModuleClassResolver //TODO: (module refactoring) usages of this interface should be replaced by ModuleClassResolver
trait LazyJavaClassResolver { trait LazyJavaClassResolver {
@@ -42,21 +43,18 @@ trait TypeParameterResolver {
} }
class LazyJavaTypeParameterResolver( class LazyJavaTypeParameterResolver(
val c: LazyJavaResolverContextWithTypes, private val c: LazyJavaResolverContext,
private val containingDeclaration: DeclarationDescriptor, private val containingDeclaration: DeclarationDescriptor,
private val typeParameters: Set<JavaTypeParameter> typeParameterOwner: JavaTypeParameterListOwner
) : TypeParameterResolver { ) : TypeParameterResolver {
private val typeParameters = typeParameterOwner.getTypeParameters().toSet()
private val resolve = c.storageManager.createMemoizedFunctionWithNullableValues { private val resolve = c.storageManager.createMemoizedFunctionWithNullableValues {
(javaTypeParameter: JavaTypeParameter) -> (javaTypeParameter: JavaTypeParameter) ->
if (javaTypeParameter in typeParameters) if (javaTypeParameter in typeParameters)
LazyJavaTypeParameterDescriptor( LazyJavaTypeParameterDescriptor(c.child(this), javaTypeParameter, containingDeclaration)
c.withTypes(this), else null
javaTypeParameter, }
containingDeclaration
)
else null
}
override fun resolveTypeParameter(javaTypeParameter: JavaTypeParameter): TypeParameterDescriptor? { override fun resolveTypeParameter(javaTypeParameter: JavaTypeParameter): TypeParameterDescriptor? {
return resolve(javaTypeParameter) ?: c.typeParameterResolver.resolveTypeParameter(javaTypeParameter) return resolve(javaTypeParameter) ?: c.typeParameterResolver.resolveTypeParameter(javaTypeParameter)