From 012c704d9aeeab9b950b92819c8a7b85bad4e1fb Mon Sep 17 00:00:00 2001 From: ChrisUMB Date: Mon, 20 Mar 2023 19:06:30 -0700 Subject: [PATCH] Fixed Ty.eachTopClass and TyClass.subTypeOf to properly handle generics Updated build.gradle.kts --- build.gradle.kts | 10 ++++++++-- src/main/java/com/tang/intellij/lua/ty/Ty.kt | 5 +++++ src/main/java/com/tang/intellij/lua/ty/TyClass.kt | 6 +++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index bdd52df11..4d5335987 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,9 +19,9 @@ import org.apache.tools.ant.taskdefs.condition.Os import java.io.ByteArrayOutputStream plugins { - id("org.jetbrains.intellij").version("1.10.0") - id("org.jetbrains.kotlin.jvm").version("1.7.22") + id("org.jetbrains.intellij").version("1.13.2") id("de.undercouch.download").version("5.3.0") + kotlin("jvm") version "1.7.22" } data class BuildData( @@ -266,3 +266,9 @@ project(":") { } } } +dependencies { + implementation(kotlin("stdlib")) +} +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/src/main/java/com/tang/intellij/lua/ty/Ty.kt b/src/main/java/com/tang/intellij/lua/ty/Ty.kt index 81b5abe28..08f73f38e 100644 --- a/src/main/java/com/tang/intellij/lua/ty/Ty.kt +++ b/src/main/java/com/tang/intellij/lua/ty/Ty.kt @@ -177,6 +177,11 @@ abstract class Ty(override val kind: TyKind) : ITy { override fun eachTopClass(fn: Processor) { when (this) { is ITyClass -> fn.process(this) + is ITyGeneric -> { + if(this.base is ITyClass) { + fn.process(this.base as ITyClass) + } + } is TyUnion -> { ContainerUtil.process(getChildTypes()) { if (it is ITyClass && !fn.process(it)) diff --git a/src/main/java/com/tang/intellij/lua/ty/TyClass.kt b/src/main/java/com/tang/intellij/lua/ty/TyClass.kt index 21de9134f..ade61f485 100644 --- a/src/main/java/com/tang/intellij/lua/ty/TyClass.kt +++ b/src/main/java/com/tang/intellij/lua/ty/TyClass.kt @@ -165,6 +165,10 @@ abstract class TyClass(override val className: String, if (other == Ty.TABLE) return true if (super.subTypeOf(other, context, strict)) return true + if (other is ITyGeneric) { + return subTypeOf(other.base, context, strict) + } + // Lazy init for superclass this.doLazyInit(context) // Check if any of the superclasses are type @@ -189,7 +193,7 @@ abstract class TyClass(override val className: String, * to be initialized. So the JVM can't run `createSerializedClass` without * having `TyClass`, and it can't use `TyClass` without running `createSerializedClass`. * Thus the JVM deadlocks during classloading, resulting in frozen indexing... - * + * * Workaround this by using Kotlin lazy properties, * so `createSerializedClass` is not run until TyClass.G is actually accessed. *