diff --git a/tasty/runtime/data/parameter/HKT.scala b/tasty/runtime/data/parameter/HKT.scala new file mode 100644 index 00000000000..076b2fe5526 --- /dev/null +++ b/tasty/runtime/data/parameter/HKT.scala @@ -0,0 +1,37 @@ +package parameter + +trait HKT { + trait T1[A[_]] + + trait T2[A[_], B[_]] + + trait T3[A[_, _]] + + trait T4[A[_[_]]] + + trait T5[A[X]] + + trait T6[A[X], B[Y]] + + trait T7[A[X, Y]] + + trait T8[A[X[Z]]] + + type t0[_] + + type t1[_[_]] + + type t2[_[_], _[_]] + + type t3[_[_, _]] + + type t4[_[_[_]]] + + type t5[A[X]] + + type t6[A[X], B[Y]] + + type t7[A[X, Y]] + + type t8[A[X[Z]]] +} \ No newline at end of file diff --git a/tasty/runtime/data/parameter/HKT.tasty b/tasty/runtime/data/parameter/HKT.tasty new file mode 100644 index 00000000000..23bd1c53a24 Binary files /dev/null and b/tasty/runtime/data/parameter/HKT.tasty differ diff --git a/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TastyReaderTest.scala b/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TastyReaderTest.scala index 29b8ca2dafa..50450a0b034 100644 --- a/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TastyReaderTest.scala +++ b/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TastyReaderTest.scala @@ -27,10 +27,10 @@ object TastyReaderTest { "member/Type", "member/Val", "member/Var", - "package1/Members", - "package1/topLevel", "package1/package2/Chained", "package1/package2/Flat", + "package1/Members", + "package1/topLevel", "parameter/Bounds", "parameter/ByName", "parameter/CaseClass", @@ -41,11 +41,12 @@ object TastyReaderTest { "parameter/EnumCaseClass", "parameter/Extension", "parameter/ExtensionMethod", + "parameter/HKT", + "parameter/InlineModifier", + "parameter/Modifiers", "parameter/Repeated", "parameter/Trait", "parameter/Type", - "parameter/InlineModifier", - "parameter/Modifiers", "parameter/Variance", // TODO TypeMember "typeDefinition/Class", "typeDefinition/Companions", diff --git a/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TreePrinter.scala b/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TreePrinter.scala index df52965f155..91b58386fec 100644 --- a/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TreePrinter.scala +++ b/tasty/runtime/src/org/jetbrains/plugins/scala/tasty/TreePrinter.scala @@ -49,7 +49,7 @@ object TreePrinter { val modifiers = modifiersIn(if (isObject) node.previousSibling.getOrElse(node) else node, if (isGivenImplicitClass) Set(GIVEN) else (if (isEnum) Set(ABSTRACT, SEALED, CASE, FINAL) else (if (isTypeMember) Set.empty else Set(OPAQUE))), isParameter = false) + (if (isImplicitClass) "implicit " else "") modifiers + keyword + (if (isAnonymousGiven) "" else identifier) + (if (!isTypeMember) textOf(template, Some(node)) else { - val repr = node.children.headOption.filter(_.is(LAMBDAtpt)).getOrElse(node) + val repr = node.children.headOption.filter(_.is(LAMBDAtpt)).getOrElse(node) // TODO handle LAMBDAtpt in parametersIn? val bounds = repr.children.find(_.is(TYPEBOUNDStpt)) parametersIn(repr, Some(repr)) + (if (bounds.isDefined) boundsIn(bounds.get) else " = " + (if (node.hasFlag(OPAQUE)) "???" else simple(textOfType(repr.children.findLast(_.isTypeTree).get)))) // TODO parameter, { /* compiled code */ } @@ -200,7 +200,7 @@ object TreePrinter { var next = false tps.foreach { - case Node(TYPEPARAM, Seq(name), Seq(bounds @ Node(TYPEBOUNDStpt, _, _: _*), _: _*)) => + case node @ Node(TYPEPARAM, Seq(name), _: _*) => if (!open) { params += "[" open = true @@ -217,8 +217,14 @@ object TreePrinter { params += "-" } } - params += name - params += boundsIn(bounds) + params += (if (name.startsWith("_$")) "_" else name) // TODO detect Unique name + node.children match { + case Seq(lambda @ Node(LAMBDAtpt, _, _: _*), _: _*) => + params += parametersIn(lambda) + case Seq(bounds @ Node(TYPEBOUNDStpt, _, _: _*), _: _*) => + params += boundsIn(bounds) + } + next = true case _ => }