Skip to content

Commit

Permalink
Delete MemberType, remove extraneous generic parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
ogolberg authored Apr 14, 2024
1 parent bfc6c8c commit 36a3b93
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 47 deletions.
9 changes: 4 additions & 5 deletions core/src/main/kotlin/com/toasttab/expediter/Expediter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -128,10 +127,10 @@ class Expediter(
.toSet()
}

fun <M : MemberType> findIssue(
fun findIssue(
type: ApplicationType,
hierarchy: ResolvedTypeHierarchy,
access: MemberAccess<M>,
access: MemberAccess,
chain: OptionalResolvedTypeHierarchy
): Issue? {
return when (chain) {
Expand Down Expand Up @@ -183,7 +182,7 @@ private class MemberWithDeclaringType(
val declaringType: Type
)

private fun <M : MemberType> ResolvedTypeHierarchy.CompleteTypeHierarchy.filterToAccessType(access: MemberAccess<M>): Sequence<Type> {
private fun ResolvedTypeHierarchy.CompleteTypeHierarchy.filterToAccessType(access: MemberAccess): Sequence<Type> {
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
Expand All @@ -194,7 +193,7 @@ private fun <M : MemberType> ResolvedTypeHierarchy.CompleteTypeHierarchy.filterT
}
}

private fun <M : MemberType> ResolvedTypeHierarchy.CompleteTypeHierarchy.resolveMember(access: MemberAccess<M>): 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)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ object TypeParsers {
}

private class ApplicationTypeParser(private val source: ClassfileSource) : ClassVisitor(ASM9, TypeDescriptorParser()) {
private val refs: MutableSet<MemberAccess<*>> = hashSetOf()
private val refs: MutableSet<MemberAccess> = hashSetOf()
private val referencedTypes: MutableSet<String> = hashSetOf()

fun get() = ApplicationType((cv as TypeDescriptorParser).get(), refs, referencedTypes, source)
Expand Down
10 changes: 5 additions & 5 deletions model/src/main/kotlin/com/toasttab/expediter/issue/Issue.kt
Original file line number Diff line number Diff line change
Expand Up @@ -61,34 +61,34 @@ 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"
}

@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"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
sealed interface MemberAccess<M : MemberType> {
sealed interface MemberAccess {
/**
* The type via which the member is accessed. E.g. for `"a".hashCode()`, the target type is `String`.
*/
Expand All @@ -41,7 +41,7 @@ sealed interface MemberAccess<M : MemberType> {
*/
val accessType: MemberAccessType

fun withDeclaringType(declaringType: String): MemberAccess<M>
fun withDeclaringType(declaringType: String): MemberAccess

fun description(): String {
return if (declaringType == null || declaringType == targetType) {
Expand All @@ -58,7 +58,7 @@ sealed interface MemberAccess<M : MemberType> {
override val declaringType: String? = null,
override val ref: MemberSymbolicReference,
override val accessType: MethodAccessType
) : MemberAccess<MemberType.Method> {
) : MemberAccess {
override fun toString() = description()
override fun withDeclaringType(declaringType: String) = copy(declaringType = declaringType)
}
Expand All @@ -70,7 +70,7 @@ sealed interface MemberAccess<M : MemberType> {
override val declaringType: String? = null,
override val ref: MemberSymbolicReference,
override val accessType: FieldAccessType
) : MemberAccess<MemberType.Field> {
) : MemberAccess {
override fun toString() = description()
override fun withDeclaringType(declaringType: String) = copy(declaringType = declaringType)
}
Expand Down
31 changes: 0 additions & 31 deletions model/src/main/kotlin/com/toasttab/expediter/types/MemberType.kt

This file was deleted.

2 changes: 1 addition & 1 deletion model/src/main/kotlin/com/toasttab/expediter/types/Type.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ sealed interface Type : IdentifiesType {
*/
class ApplicationType(
override val descriptor: TypeDescriptor,
val memberAccess: Set<MemberAccess<*>>,
val memberAccess: Set<MemberAccess>,
val referencedTypes: Set<String>,
val source: ClassfileSource
) : Type {
Expand Down

0 comments on commit 36a3b93

Please sign in to comment.