From aa224558bd22b8673bb01269d05713b3eb513685 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Wed, 21 Nov 2018 12:55:10 +0300 Subject: [PATCH] Convert and simplify `IntersectionTypeConstructor` --- .../types/IntersectionTypeConstructor.kt | 128 ++++++------------ 1 file changed, 41 insertions(+), 87 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt b/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt index a4d6887ea76..d3a23fef7fa 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/IntersectionTypeConstructor.kt @@ -14,98 +14,52 @@ * limitations under the License. */ -package org.jetbrains.kotlin.types; +package org.jetbrains.kotlin.types -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.builtins.KotlinBuiltIns; -import org.jetbrains.kotlin.descriptors.ClassifierDescriptor; -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor; -import org.jetbrains.kotlin.resolve.scopes.MemberScope; -import org.jetbrains.kotlin.resolve.scopes.TypeIntersectionScope; +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.ClassifierDescriptor +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.resolve.scopes.MemberScope +import org.jetbrains.kotlin.resolve.scopes.TypeIntersectionScope -import java.util.*; +import java.util.* -public class IntersectionTypeConstructor implements TypeConstructor { - private final Set intersectedTypes; - private final int hashCode; - - public IntersectionTypeConstructor(Collection typesToIntersect) { - assert !typesToIntersect.isEmpty() : "Attempt to create an empty intersection"; - - this.intersectedTypes = new LinkedHashSet(typesToIntersect); - this.hashCode = intersectedTypes.hashCode(); +class IntersectionTypeConstructor(typesToIntersect: Collection) : TypeConstructor { + init { + assert(!typesToIntersect.isEmpty()) { "Attempt to create an empty intersection" } } - @NotNull - @Override - public List getParameters() { - return Collections.emptyList(); + private val intersectedTypes = LinkedHashSet(typesToIntersect) + private val hashCode = intersectedTypes.hashCode() + + override fun getParameters(): List = emptyList() + + override fun getSupertypes(): Collection = intersectedTypes + + fun createScopeForKotlinType(): MemberScope = + TypeIntersectionScope.create("member scope for intersection type $this", intersectedTypes) + + override fun isFinal(): Boolean = false + + override fun isDenotable(): Boolean = false + + override fun getDeclarationDescriptor(): ClassifierDescriptor? = null + + override fun getBuiltIns(): KotlinBuiltIns = + intersectedTypes.iterator().next().constructor.builtIns + + override fun toString(): String = + makeDebugNameForIntersectionType(intersectedTypes) + + private fun makeDebugNameForIntersectionType(resultingTypes: Iterable): String = + resultingTypes.joinToString(separator = " & ", prefix = "{", postfix = "}") + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is IntersectionTypeConstructor) return false + + return intersectedTypes == other.intersectedTypes } - @NotNull - @Override - public Collection getSupertypes() { - return intersectedTypes; - } - - public MemberScope createScopeForKotlinType() { - return TypeIntersectionScope.create("member scope for intersection type " + this, intersectedTypes); - } - - @Override - public boolean isFinal() { - return false; - } - - @Override - public boolean isDenotable() { - return false; - } - - @Override - public ClassifierDescriptor getDeclarationDescriptor() { - return null; - } - - @NotNull - @Override - public KotlinBuiltIns getBuiltIns() { - return intersectedTypes.iterator().next().getConstructor().getBuiltIns(); - } - - @Override - public String toString() { - return makeDebugNameForIntersectionType(intersectedTypes); - } - - private static String makeDebugNameForIntersectionType(Iterable resultingTypes) { - StringBuilder debugName = new StringBuilder("{"); - for (Iterator iterator = resultingTypes.iterator(); iterator.hasNext(); ) { - KotlinType type = iterator.next(); - - debugName.append(type.toString()); - if (iterator.hasNext()) { - debugName.append(" & "); - } - } - debugName.append("}"); - return debugName.toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - IntersectionTypeConstructor that = (IntersectionTypeConstructor) o; - - if (intersectedTypes != null ? !intersectedTypes.equals(that.intersectedTypes) : that.intersectedTypes != null) return false; - - return true; - } - - @Override - public int hashCode() { - return hashCode; - } + override fun hashCode(): Int = hashCode }