[cls] write flexible type information to cls

^KTIJ-25172
this information would be used to create resolved FirElements from stubs,
so no ProtoBuf would be kept in memory
This commit is contained in:
Anna Kozlova
2023-04-05 13:02:47 +02:00
committed by Space Team
parent ffb705fe2f
commit f810d435f4
19 changed files with 706 additions and 131 deletions
@@ -0,0 +1,9 @@
package test
public class AnnotatedFlexibleTypes(val javaClass: d.JavaClass) {
fun foo() = javaClass.foo()
val bar = javaClass.bar()
val baz = javaClass.baz()
}
@@ -0,0 +1,72 @@
PsiJetFileStubImpl[package=test]
KotlinStub$PACKAGE_DIRECTIVE
KotlinStub$REFERENCE_EXPRESSION[referencedName=test]
KotlinStub$IMPORT_LIST
KotlinStub$CLASS[classId=test/AnnotatedFlexibleTypes, fqName=test.AnnotatedFlexibleTypes, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=AnnotatedFlexibleTypes, superNames=[]]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$PRIMARY_CONSTRUCTOR[fqName=null, hasBody=false, isDelegatedCallToThis=false, isExtension=false, isTopLevel=false, name=AnnotatedFlexibleTypes]
KotlinStub$MODIFIER_LIST[public]
KotlinStub$VALUE_PARAMETER_LIST
KotlinStub$VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=javaClass]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=d]
KotlinStub$REFERENCE_EXPRESSION[referencedName=JavaClass]
KotlinStub$CLASS_BODY
KotlinStub$PROPERTY[fqName=test.AnnotatedFlexibleTypes.bar, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=bar]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.collections.Collection<kotlin.Int .. kotlin.Int?>?
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=collections]
KotlinStub$REFERENCE_EXPRESSION[referencedName=MutableCollection]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.Int?
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=Int]
KotlinStub$PROPERTY[fqName=test.AnnotatedFlexibleTypes.baz, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=baz]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.collections.Collection<kotlin.collections.MutableCollection<kotlin.Int .. kotlin.Int?> .. kotlin.collections.Collection<kotlin.Int .. kotlin.Int?>?>?
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=collections]
KotlinStub$REFERENCE_EXPRESSION[referencedName=MutableCollection]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.collections.Collection<kotlin.Int .. kotlin.Int?>?
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=collections]
KotlinStub$REFERENCE_EXPRESSION[referencedName=MutableCollection]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.Int?
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=Int]
KotlinStub$PROPERTY[fqName=test.AnnotatedFlexibleTypes.javaClass, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=javaClass]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=d]
KotlinStub$REFERENCE_EXPRESSION[referencedName=JavaClass]
KotlinStub$FUN[fqName=test.AnnotatedFlexibleTypes.foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, mayHaveContract=false, name=foo]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$VALUE_PARAMETER_LIST
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.Int?
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=Int]
@@ -0,0 +1,15 @@
package d;
import org.jetbrains.annotations.*;
import kotlin.annotations.jvm.*;
public abstract class JavaClass {
@Nullable
public abstract Integer foo();
@Mutable
public abstract java.util.Collection<Integer> bar();
@Mutable
public abstract java.util.Collection<java.util.Collection<Integer>> baz();
}
@@ -0,0 +1,5 @@
package test
public class OuterClassesWithFlexibleArgs<K, L>(k: K, l: L) {
val baz = d.JavaClass.baz(k, l)
}
@@ -0,0 +1,40 @@
PsiJetFileStubImpl[package=test]
KotlinStub$PACKAGE_DIRECTIVE
KotlinStub$REFERENCE_EXPRESSION[referencedName=test]
KotlinStub$IMPORT_LIST
KotlinStub$CLASS[classId=test/OuterClassesWithFlexibleArgs, fqName=test.OuterClassesWithFlexibleArgs, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=OuterClassesWithFlexibleArgs, superNames=[]]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_PARAMETER_LIST
KotlinStub$TYPE_PARAMETER[fqName=null, isInVariance=false, isOutVariance=false, name=K]
KotlinStub$TYPE_PARAMETER[fqName=null, isInVariance=false, isOutVariance=false, name=L]
KotlinStub$PRIMARY_CONSTRUCTOR[fqName=null, hasBody=false, isDelegatedCallToThis=false, isExtension=false, isTopLevel=false, name=OuterClassesWithFlexibleArgs]
KotlinStub$MODIFIER_LIST[public]
KotlinStub$VALUE_PARAMETER_LIST
KotlinStub$VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=k]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=K]
KotlinStub$VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=l]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=L]
KotlinStub$CLASS_BODY
KotlinStub$PROPERTY[fqName=test.OuterClassesWithFlexibleArgs.baz, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=baz]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: d.JavaClass.InnerClass<L .. L?>?
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=d]
KotlinStub$REFERENCE_EXPRESSION[referencedName=JavaClass]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: K?
KotlinStub$REFERENCE_EXPRESSION[referencedName=K]
KotlinStub$REFERENCE_EXPRESSION[referencedName=InnerClass]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: L?
KotlinStub$REFERENCE_EXPRESSION[referencedName=L]
@@ -0,0 +1,13 @@
package d;
import org.jetbrains.annotations.*;
import kotlin.annotations.jvm.*;
public abstract class JavaClass<T> {
public class InnerClass<M> {}
@Mutable
public static <K, L> JavaClass<K>.InnerClass<L> baz(K k, L l) {
return null;
}
}
@@ -0,0 +1,9 @@
package test
public class TypeParametersInFlexibleTypes<A, D>(val javaClass: d.JavaClass<A>, val t: D & Any) {
fun foo() = javaClass.foo()
val bar = javaClass.bar()
val baz = d.JavaClass.baz(t)
}
@@ -0,0 +1,94 @@
PsiJetFileStubImpl[package=test]
KotlinStub$PACKAGE_DIRECTIVE
KotlinStub$REFERENCE_EXPRESSION[referencedName=test]
KotlinStub$IMPORT_LIST
KotlinStub$CLASS[classId=test/TypeParametersInFlexibleTypes, fqName=test.TypeParametersInFlexibleTypes, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=TypeParametersInFlexibleTypes, superNames=[]]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_PARAMETER_LIST
KotlinStub$TYPE_PARAMETER[fqName=null, isInVariance=false, isOutVariance=false, name=A]
KotlinStub$TYPE_PARAMETER[fqName=null, isInVariance=false, isOutVariance=false, name=D]
KotlinStub$PRIMARY_CONSTRUCTOR[fqName=null, hasBody=false, isDelegatedCallToThis=false, isExtension=false, isTopLevel=false, name=TypeParametersInFlexibleTypes]
KotlinStub$MODIFIER_LIST[public]
KotlinStub$VALUE_PARAMETER_LIST
KotlinStub$VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=javaClass]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=d]
KotlinStub$REFERENCE_EXPRESSION[referencedName=JavaClass]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=A]
KotlinStub$VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=t]
KotlinStub$TYPE_REFERENCE
KotlinStub$INTERSECTION_TYPE
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=D]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=Any]
KotlinStub$CLASS_BODY
KotlinStub$PROPERTY[fqName=test.TypeParametersInFlexibleTypes.bar, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=bar]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.collections.Collection<A .. A?>?
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=collections]
KotlinStub$REFERENCE_EXPRESSION[referencedName=MutableCollection]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: A?
KotlinStub$REFERENCE_EXPRESSION[referencedName=A]
KotlinStub$PROPERTY[fqName=test.TypeParametersInFlexibleTypes.baz, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=baz]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: kotlin.collections.Collection<D & Any .. D?>?
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=kotlin]
KotlinStub$REFERENCE_EXPRESSION[referencedName=collections]
KotlinStub$REFERENCE_EXPRESSION[referencedName=MutableCollection]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$INTERSECTION_TYPE
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: D?
KotlinStub$REFERENCE_EXPRESSION[referencedName=D]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=Any]
KotlinStub$PROPERTY[fqName=test.TypeParametersInFlexibleTypes.javaClass, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=javaClass]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=d]
KotlinStub$REFERENCE_EXPRESSION[referencedName=JavaClass]
KotlinStub$TYPE_ARGUMENT_LIST
KotlinStub$TYPE_PROJECTION[projectionKind=NONE]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=A]
KotlinStub$PROPERTY[fqName=test.TypeParametersInFlexibleTypes.t, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=t]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$TYPE_REFERENCE
KotlinStub$INTERSECTION_TYPE
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=D]
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE
KotlinStub$REFERENCE_EXPRESSION[referencedName=Any]
KotlinStub$FUN[fqName=test.TypeParametersInFlexibleTypes.foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, mayHaveContract=false, name=foo]
KotlinStub$MODIFIER_LIST[public final]
KotlinStub$VALUE_PARAMETER_LIST
KotlinStub$TYPE_REFERENCE
KotlinStub$USER_TYPE ft: A?
KotlinStub$REFERENCE_EXPRESSION[referencedName=A]
@@ -0,0 +1,17 @@
package d;
import org.jetbrains.annotations.*;
import kotlin.annotations.jvm.*;
public abstract class JavaClass<T> {
@Nullable
public abstract T foo();
@Mutable
public abstract java.util.Collection<T> bar();
@Mutable
public static <K> java.util.Collection<K> baz(K t) {
return new java.util.ArrayList<>();
}
}