diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 052aa7538a6..fbc271f2423 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -827,7 +827,9 @@ public class KotlinBuiltIns { private static boolean isConstructedFromGivenClass(@NotNull JetType type, @NotNull FqNameUnsafe fqName) { ClassifierDescriptor descriptor = type.getConstructor().getDeclarationDescriptor(); - return descriptor != null && fqName.equals(getFqName(descriptor)); + return descriptor != null && + /* quick check to avoid creation of full FqName instance */ descriptor.getName().equals(fqName.shortName()) && + fqName.equals(getFqName(descriptor)); } private static boolean isNotNullConstructedFromGivenClass(@NotNull JetType type, @NotNull FqNameUnsafe fqName) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java index 52d9db76396..f70c831b2be 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractClassTypeConstructor.java @@ -23,9 +23,16 @@ import org.jetbrains.kotlin.name.FqNameUnsafe; import org.jetbrains.kotlin.resolve.DescriptorUtils; public abstract class AbstractClassTypeConstructor implements TypeConstructor { + private boolean hashCodeComputed; + private int hashCode; + @Override public final int hashCode() { - return hashCode(this); + if (!hashCodeComputed) { + hashCodeComputed = true; + hashCode = hashCode(this); + } + return hashCode; } @Override