Support type aliases in stub builder

This commit is contained in:
Denis Zharkov
2016-06-27 18:23:42 +03:00
parent daa356860c
commit e24f0653fb
14 changed files with 262 additions and 14 deletions
@@ -7,4 +7,6 @@ public final class TypeAliases public constructor() {
public final fun foo(a: dependency.A /* = () -> kotlin.Unit */, b: test.TypeAliases.B /* = (dependency.A /* = () -> kotlin.Unit */) -> kotlin.Unit */, ta: test.Outer<kotlin.String, kotlin.Double>.Inner<kotlin.Int>.TA<kotlin.Boolean> /* = kotlin.collections.Map<kotlin.collections.Map<kotlin.String, out kotlin.Double>, kotlin.collections.Map<kotlin.Int, out kotlin.Boolean>> */): kotlin.Unit { /* compiled code */ }
public typealias B = (dependency.A) -> kotlin.Unit
private typealias Parametrized<E, F> = kotlin.collections.Map<E, F>
}
@@ -8,10 +8,16 @@ class Outer<E, F> {
}
}
annotation class Ann
class TypeAliases {
typealias B = (A) -> Unit
fun foo(a: A, b: B, ta: Outer<String, Double>.Inner<Int>.TA<Boolean>) {
b.invoke(a)
}
// TODO: annotations are unsupported yet
@Ann
private typealias Parametrized<E, F> = Map<E, F>
}
@@ -24,4 +24,6 @@ private fun probablyNothing(): Nothing = throw IllegalStateException()
private val certainlyNothing: kotlin.Nothing = throw IllegalStateException()
class Nothing
private typealias Alias<E> = (E) -> E
class Nothing
@@ -117,3 +117,17 @@ PsiJetFileStubImpl[package=foo.TopLevelMembers]
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Int]
TYPEALIAS:[fqName=foo.TopLevelMembers.Alias, isTopLevel=true, name=Alias]
MODIFIER_LIST:[private]
TYPE_PARAMETER_LIST:
TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=E]
TYPE_REFERENCE:
FUNCTION_TYPE:
VALUE_PARAMETER_LIST:
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=null]
TYPE_REFERENCE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=E]
TYPE_REFERENCE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=E]
@@ -0,0 +1,7 @@
package dependency
typealias A = () -> Unit
fun foo(a: A) {
a.invoke()
}
@@ -0,0 +1,23 @@
package test
import dependency.*
class Outer<E, F> {
inner class Inner<G> {
typealias TA<H> = Map<Map<E, F>, Map<G, H>>
}
}
annotation class Ann
class TypeAliases {
typealias B = (A) -> Unit
fun foo(a: A, b: B, ta: Outer<String, Double>.Inner<Int>.TA<Boolean>) {
b.invoke(a)
}
// TODO: annotations are unsupported yet
@Ann
private typealias Parametrized<E, F> = Map<E, F>
}
@@ -0,0 +1,106 @@
PsiJetFileStubImpl[package=test]
PACKAGE_DIRECTIVE:
REFERENCE_EXPRESSION:[referencedName=test]
IMPORT_LIST:
CLASS:[fqName=test.TypeAliases, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=TypeAliases, superNames=[]]
MODIFIER_LIST:[public final]
PRIMARY_CONSTRUCTOR:
MODIFIER_LIST:[public]
VALUE_PARAMETER_LIST:
CLASS_BODY:
FUN:[fqName=test.TypeAliases.foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=foo]
MODIFIER_LIST:[public final]
VALUE_PARAMETER_LIST:
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=a]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=dependency]
REFERENCE_EXPRESSION:[referencedName=A]
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=b]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=test]
REFERENCE_EXPRESSION:[referencedName=TypeAliases]
REFERENCE_EXPRESSION:[referencedName=B]
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=ta]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=test]
REFERENCE_EXPRESSION:[referencedName=Outer]
TYPE_ARGUMENT_LIST:
TYPE_PROJECTION:[projectionKind=NONE]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=String]
TYPE_PROJECTION:[projectionKind=NONE]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Double]
REFERENCE_EXPRESSION:[referencedName=Inner]
TYPE_ARGUMENT_LIST:
TYPE_PROJECTION:[projectionKind=NONE]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Int]
REFERENCE_EXPRESSION:[referencedName=TA]
TYPE_ARGUMENT_LIST:
TYPE_PROJECTION:[projectionKind=NONE]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Boolean]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Unit]
TYPEALIAS:[fqName=test.TypeAliases.B, isTopLevel=false, name=B]
MODIFIER_LIST:[public]
TYPE_REFERENCE:
FUNCTION_TYPE:
VALUE_PARAMETER_LIST:
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=null]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=dependency]
REFERENCE_EXPRESSION:[referencedName=A]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=Unit]
TYPEALIAS:[fqName=test.TypeAliases.Parametrized, isTopLevel=false, name=Parametrized]
MODIFIER_LIST:[private]
TYPE_PARAMETER_LIST:
TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=E]
TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=F]
TYPE_REFERENCE:
USER_TYPE:
USER_TYPE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=kotlin]
REFERENCE_EXPRESSION:[referencedName=collections]
REFERENCE_EXPRESSION:[referencedName=Map]
TYPE_ARGUMENT_LIST:
TYPE_PROJECTION:[projectionKind=NONE]
TYPE_REFERENCE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=E]
TYPE_PROJECTION:[projectionKind=NONE]
TYPE_REFERENCE:
USER_TYPE:
REFERENCE_EXPRESSION:[referencedName=F]