From 36a3b9374a683f57d033a41a5db6ef24d3f7f8d1 Mon Sep 17 00:00:00 2001 From: Oleg Golberg Date: Sun, 14 Apr 2024 09:53:03 -0400 Subject: [PATCH] Delete MemberType, remove extraneous generic parameters --- .../com/toasttab/expediter/Expediter.kt | 9 +++--- .../toasttab/expediter/parser/TypeParsers.kt | 2 +- .../com/toasttab/expediter/issue/Issue.kt | 10 +++--- .../toasttab/expediter/types/MemberAccess.kt | 8 ++--- .../toasttab/expediter/types/MemberType.kt | 31 ------------------- .../com/toasttab/expediter/types/Type.kt | 2 +- 6 files changed, 15 insertions(+), 47 deletions(-) delete mode 100644 model/src/main/kotlin/com/toasttab/expediter/types/MemberType.kt diff --git a/core/src/main/kotlin/com/toasttab/expediter/Expediter.kt b/core/src/main/kotlin/com/toasttab/expediter/Expediter.kt index 0c873d8..4662246 100644 --- a/core/src/main/kotlin/com/toasttab/expediter/Expediter.kt +++ b/core/src/main/kotlin/com/toasttab/expediter/Expediter.kt @@ -25,7 +25,6 @@ import com.toasttab.expediter.types.ApplicationType import com.toasttab.expediter.types.ApplicationTypeContainer import com.toasttab.expediter.types.InspectedTypes import com.toasttab.expediter.types.MemberAccess -import com.toasttab.expediter.types.MemberType import com.toasttab.expediter.types.MethodAccessType import com.toasttab.expediter.types.OptionalResolvedTypeHierarchy import com.toasttab.expediter.types.PlatformType @@ -128,10 +127,10 @@ class Expediter( .toSet() } - fun findIssue( + fun findIssue( type: ApplicationType, hierarchy: ResolvedTypeHierarchy, - access: MemberAccess, + access: MemberAccess, chain: OptionalResolvedTypeHierarchy ): Issue? { return when (chain) { @@ -183,7 +182,7 @@ private class MemberWithDeclaringType( val declaringType: Type ) -private fun ResolvedTypeHierarchy.CompleteTypeHierarchy.filterToAccessType(access: MemberAccess): Sequence { +private fun ResolvedTypeHierarchy.CompleteTypeHierarchy.filterToAccessType(access: MemberAccess): Sequence { return if (access is MemberAccess.MethodAccess && access.accessType == MethodAccessType.SPECIAL) { // invokespecial dispatches statically, i.e. the method must be declared on the target type; // it is used to invoke constructors, super methods, and private methods @@ -194,7 +193,7 @@ private fun ResolvedTypeHierarchy.CompleteTypeHierarchy.filterT } } -private fun ResolvedTypeHierarchy.CompleteTypeHierarchy.resolveMember(access: MemberAccess): MemberWithDeclaringType? { +private fun ResolvedTypeHierarchy.CompleteTypeHierarchy.resolveMember(access: MemberAccess): MemberWithDeclaringType? { for (cls in filterToAccessType(access)) { for (m in cls.descriptor.members) { if (access.ref.same(m.ref)) { diff --git a/core/src/main/kotlin/com/toasttab/expediter/parser/TypeParsers.kt b/core/src/main/kotlin/com/toasttab/expediter/parser/TypeParsers.kt index aef4aad..86ea1dc 100644 --- a/core/src/main/kotlin/com/toasttab/expediter/parser/TypeParsers.kt +++ b/core/src/main/kotlin/com/toasttab/expediter/parser/TypeParsers.kt @@ -46,7 +46,7 @@ object TypeParsers { } private class ApplicationTypeParser(private val source: ClassfileSource) : ClassVisitor(ASM9, TypeDescriptorParser()) { - private val refs: MutableSet> = hashSetOf() + private val refs: MutableSet = hashSetOf() private val referencedTypes: MutableSet = hashSetOf() fun get() = ApplicationType((cv as TypeDescriptorParser).get(), refs, referencedTypes, source) diff --git a/model/src/main/kotlin/com/toasttab/expediter/issue/Issue.kt b/model/src/main/kotlin/com/toasttab/expediter/issue/Issue.kt index 1119c88..58bba14 100644 --- a/model/src/main/kotlin/com/toasttab/expediter/issue/Issue.kt +++ b/model/src/main/kotlin/com/toasttab/expediter/issue/Issue.kt @@ -61,19 +61,19 @@ sealed interface Issue { } interface WithMemberAccess { - val member: MemberAccess<*> + val member: MemberAccess } @Serializable @SerialName("member-missing") - data class MissingMember(override val caller: String, override val member: MemberAccess<*>) : Issue, WithMemberAccess { + data class MissingMember(override val caller: String, override val member: MemberAccess) : Issue, WithMemberAccess { override val target: String get() = member.targetType override fun toString() = "$caller accesses missing $member" } @Serializable @SerialName("static-member") - data class AccessStaticMemberNonStatically(override val caller: String, override val member: MemberAccess<*>) : Issue, WithMemberAccess { + data class AccessStaticMemberNonStatically(override val caller: String, override val member: MemberAccess) : Issue, WithMemberAccess { override val target: String get() = member.targetType override fun toString() = "$caller accesses static $member non-statically" @@ -81,14 +81,14 @@ sealed interface Issue { @Serializable @SerialName("instance-member") - data class AccessInstanceMemberStatically(override val caller: String, override val member: MemberAccess<*>) : Issue, WithMemberAccess { + data class AccessInstanceMemberStatically(override val caller: String, override val member: MemberAccess) : Issue, WithMemberAccess { override val target: String get() = member.targetType override fun toString() = "$caller accesses instance $member statically" } @Serializable @SerialName("member-inaccessible") - data class AccessInaccessibleMember(override val caller: String, override val member: MemberAccess<*>) : Issue, WithMemberAccess { + data class AccessInaccessibleMember(override val caller: String, override val member: MemberAccess) : Issue, WithMemberAccess { override val target: String get() = member.targetType override fun toString() = "$caller accesses inaccessible $member" } diff --git a/model/src/main/kotlin/com/toasttab/expediter/types/MemberAccess.kt b/model/src/main/kotlin/com/toasttab/expediter/types/MemberAccess.kt index b7dfb65..659d1f7 100644 --- a/model/src/main/kotlin/com/toasttab/expediter/types/MemberAccess.kt +++ b/model/src/main/kotlin/com/toasttab/expediter/types/MemberAccess.kt @@ -19,7 +19,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -sealed interface MemberAccess { +sealed interface MemberAccess { /** * The type via which the member is accessed. E.g. for `"a".hashCode()`, the target type is `String`. */ @@ -41,7 +41,7 @@ sealed interface MemberAccess { */ val accessType: MemberAccessType - fun withDeclaringType(declaringType: String): MemberAccess + fun withDeclaringType(declaringType: String): MemberAccess fun description(): String { return if (declaringType == null || declaringType == targetType) { @@ -58,7 +58,7 @@ sealed interface MemberAccess { override val declaringType: String? = null, override val ref: MemberSymbolicReference, override val accessType: MethodAccessType - ) : MemberAccess { + ) : MemberAccess { override fun toString() = description() override fun withDeclaringType(declaringType: String) = copy(declaringType = declaringType) } @@ -70,7 +70,7 @@ sealed interface MemberAccess { override val declaringType: String? = null, override val ref: MemberSymbolicReference, override val accessType: FieldAccessType - ) : MemberAccess { + ) : MemberAccess { override fun toString() = description() override fun withDeclaringType(declaringType: String) = copy(declaringType = declaringType) } diff --git a/model/src/main/kotlin/com/toasttab/expediter/types/MemberType.kt b/model/src/main/kotlin/com/toasttab/expediter/types/MemberType.kt deleted file mode 100644 index 19c65aa..0000000 --- a/model/src/main/kotlin/com/toasttab/expediter/types/MemberType.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2023 Toast Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.toasttab.expediter.types - -import kotlinx.serialization.Serializable - -@Serializable -sealed interface MemberType { - @Serializable - object Field : MemberType { - override fun toString() = "field" - } - - @Serializable - object Method : MemberType { - override fun toString() = "method" - } -} diff --git a/model/src/main/kotlin/com/toasttab/expediter/types/Type.kt b/model/src/main/kotlin/com/toasttab/expediter/types/Type.kt index 7b02925..270fdc3 100644 --- a/model/src/main/kotlin/com/toasttab/expediter/types/Type.kt +++ b/model/src/main/kotlin/com/toasttab/expediter/types/Type.kt @@ -33,7 +33,7 @@ sealed interface Type : IdentifiesType { */ class ApplicationType( override val descriptor: TypeDescriptor, - val memberAccess: Set>, + val memberAccess: Set, val referencedTypes: Set, val source: ClassfileSource ) : Type {