diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 072ff7d67a4..421b62b8f9e 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -233,6 +233,12 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { } private inner class DeclarationMapper(val expressionTreeMapper: ExpressionTreeMapper) { + fun PsiTypeParameterList.toJK(): JKTypeParameterList = + JKTypeParameterListImpl(typeParameters.map { it.toJK() }) + + fun PsiTypeParameter.toJK(): JKTypeParameter = + JKTypeParameterImpl(JKNameIdentifierImpl(name!!)) + fun PsiClass.toJK(): JKClass { val classKind: JKClass.ClassKind = when { isAnnotationType -> JKClass.ClassKind.ANNOTATION diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index 6c6706486df..ab7478b48fa 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -304,6 +304,20 @@ class NewCodeBuilder { binaryExpression.right.accept(this) } + override fun visitTypeParameterList(typeParameterList: JKTypeParameterList) { + if (typeParameterList.typeParameters.isNotEmpty()) { + printer.par(ANGLE) { + renderList(typeParameterList.typeParameters) { + it.accept(this) + } + } + } + } + + override fun visitTypeParameter(typeParameter: JKTypeParameter) { + typeParameter.name.accept(this) + } + override fun visitLiteralExpression(literalExpression: JKLiteralExpression) { printer.printWithNoIndent(literalExpression.literal) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index edbdfaade17..7c909dffcb2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -446,3 +446,12 @@ val JKElement.psi: PsiElement? fun JKElement.psi(): Elem? = (this as? PsiOwner)?.psi as? Elem +class JKTypeParameterListImpl(typeParameters: List = emptyList()) : JKTypeParameterList, JKBranchElementBase() { + override var typeParameters by children(typeParameters) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitTypeParameterList(this, data) +} + +class JKTypeParameterImpl(name: JKNameIdentifier) : JKTypeParameter, JKBranchElementBase() { + override var name: JKNameIdentifier by child(name) + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitTypeParameter(this, data) +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index c05b6916dc8..0c0080e1b07 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -273,4 +273,16 @@ interface JKLabeledStatement : JKStatement { val labels: List } -interface JKEmptyStatement : JKStatement \ No newline at end of file +interface JKEmptyStatement : JKStatement + +interface JKTypeParameterList : JKTreeElement { + var typeParameters: List +} + +interface JKTypeParameter : JKTreeElement { + var name: JKNameIdentifier +} + +interface JKTypeParameterListOwner : JKTreeElement { + var typeParameterList: JKTypeParameterList +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt index 1f3248c2180..260f051330a 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -60,6 +60,9 @@ interface JKVisitor { fun visitContinueStatement(continueStatement: JKContinueStatement, data: D): R = visitStatement(continueStatement, data) fun visitLabeledStatement(labeledStatement: JKLabeledStatement, data: D): R = visitStatement(labeledStatement, data) fun visitEmptyStatement(emptyStatement: JKEmptyStatement, data: D): R = visitStatement(emptyStatement, data) + fun visitTypeParameterList(typeParameterList: JKTypeParameterList, data: D): R = visitTreeElement(typeParameterList, data) + fun visitTypeParameter(typeParameter: JKTypeParameter, data: D): R = visitTreeElement(typeParameter, data) + fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: D): R = visitTreeElement(typeParameterListOwner, data) fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data) fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data) fun visitJavaMethodCallExpression(javaMethodCallExpression: JKJavaMethodCallExpression, data: D): R = visitMethodCallExpression(javaMethodCallExpression, data) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt index 320e93cc89a..b35849b0aaf 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -117,6 +117,12 @@ interface JKVisitorVoid : JKVisitor { override fun visitLabeledStatement(labeledStatement: JKLabeledStatement, data: Nothing?) = visitLabeledStatement(labeledStatement) fun visitEmptyStatement(emptyStatement: JKEmptyStatement) = visitStatement(emptyStatement, null) override fun visitEmptyStatement(emptyStatement: JKEmptyStatement, data: Nothing?) = visitEmptyStatement(emptyStatement) + fun visitTypeParameterList(typeParameterList: JKTypeParameterList) = visitTreeElement(typeParameterList, null) + override fun visitTypeParameterList(typeParameterList: JKTypeParameterList, data: Nothing?) = visitTypeParameterList(typeParameterList) + fun visitTypeParameter(typeParameter: JKTypeParameter) = visitTreeElement(typeParameter, null) + override fun visitTypeParameter(typeParameter: JKTypeParameter, data: Nothing?) = visitTypeParameter(typeParameter) + fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner) = visitTreeElement(typeParameterListOwner, null) + override fun visitTypeParameterListOwner(typeParameterListOwner: JKTypeParameterListOwner, data: Nothing?) = visitTypeParameterListOwner(typeParameterListOwner) fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null) override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField) fun visitJavaMethod(javaMethod: JKJavaMethod) = visitMethod(javaMethod, null)