diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java index bd89ad13ce3..85964c9526b 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/structure/impl/JavaTypeParameterImpl.java @@ -31,11 +31,6 @@ public class JavaTypeParameterImpl extends JavaClassifierImpl super(psiTypeParameter); } - @Override - public int getIndex() { - return getPsi().getIndex(); - } - @NotNull @Override public Name getName() { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaTypeParameterDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaTypeParameterDescriptor.kt index e62e5bd856e..bce6447e63f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaTypeParameterDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaTypeParameterDescriptor.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.descriptors.SourceElement class LazyJavaTypeParameterDescriptor( private val c: LazyJavaResolverContext, public val javaTypeParameter: JavaTypeParameter, + index: Int, containingDeclaration: DeclarationDescriptor ) : AbstractLazyTypeParameterDescriptor( c.storageManager, @@ -37,7 +38,7 @@ class LazyJavaTypeParameterDescriptor( javaTypeParameter.getName(), Variance.INVARIANT, /* isReified = */ false, - javaTypeParameter.getIndex(), + index, SourceElement.NO_SOURCE ) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt index 7aa3da653be..09f81b5e43f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt @@ -16,16 +16,17 @@ package org.jetbrains.kotlin.load.java.lazy -import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter -import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaTypeParameterDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader -import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass -import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaTypeParameterDescriptor +import org.jetbrains.kotlin.load.java.structure.JavaClass +import org.jetbrains.kotlin.load.java.structure.JavaTypeParameter import org.jetbrains.kotlin.load.java.structure.JavaTypeParameterListOwner +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.utils.mapToIndex //TODO: (module refactoring) usages of this interface should be replaced by ModuleClassResolver trait LazyJavaClassResolver { @@ -45,13 +46,13 @@ class LazyJavaTypeParameterResolver( private val containingDeclaration: DeclarationDescriptor, typeParameterOwner: JavaTypeParameterListOwner ) : TypeParameterResolver { - private val typeParameters = typeParameterOwner.getTypeParameters().toSet() + private val typeParameters: Map = typeParameterOwner.getTypeParameters().mapToIndex() private val resolve = c.storageManager.createMemoizedFunctionWithNullableValues { - (javaTypeParameter: JavaTypeParameter) -> - if (javaTypeParameter in typeParameters) - LazyJavaTypeParameterDescriptor(c.child(this), javaTypeParameter, containingDeclaration) - else null + (typeParameter: JavaTypeParameter) -> + typeParameters[typeParameter]?.let { index -> + LazyJavaTypeParameterDescriptor(c.child(this), typeParameter, index, containingDeclaration) + } } override fun resolveTypeParameter(javaTypeParameter: JavaTypeParameter): TypeParameterDescriptor? { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/structure/JavaTypeParameter.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/structure/JavaTypeParameter.java index 7693b2484a1..246eb79751b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/structure/JavaTypeParameter.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/structure/JavaTypeParameter.java @@ -22,8 +22,6 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; public interface JavaTypeParameter extends JavaClassifier { - int getIndex(); - @NotNull Collection getUpperBounds(); diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt index 09cdc6c3b83..6c2627a5603 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt @@ -77,6 +77,14 @@ public fun Iterable.keysToMapExceptNulls(value: (K) -> V?): Map Iterable.mapToIndex(): Map { + val map = LinkedHashMap() + for ((index, k) in this.withIndex()) { + map[k] = index + } + return map +} + public fun > C.ifEmpty(body: () -> C): C = if (isEmpty()) body() else this public fun emptyOrSingletonList(item: T?): List = if (item == null) listOf() else listOf(item)