New J2K: Type system.

This commit is contained in:
Dimach
2018-03-06 05:30:21 +02:00
committed by Ilya Kirillov
parent dfd745d55b
commit 09d52d13b8
14 changed files with 83 additions and 104 deletions
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.conveersionCache.JKMultiverseClass
import org.jetbrains.kotlin.j2k.tree.conveersionCache.ReferenceTargetProvider
import org.jetbrains.kotlin.j2k.tree.impl.*
import java.util.*
class JavaToJKTreeBuilder : ReferenceTargetProvider {
@@ -187,7 +186,7 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
}
fun PsiTypeCastExpression.toJK(): JKExpression {
return JKTypeCastExpressionImpl(operand?.toJK(), castType?.toJK())
return JKTypeCastExpressionImpl(operand?.toJK(), castType?.type?.toJK())
}
fun PsiParenthesizedExpression.toJK(): JKExpression {
@@ -198,10 +197,10 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
return JKExpressionListImpl(this?.expressions?.map { it.toJK() }?.toTypedArray() ?: emptyArray())
}
fun PsiElement?.convertReference(): JKReference = when(this){
fun PsiElement?.convertReference(): JKReference = when (this) {
is PsiMethod -> convertMethodReference()
is PsiField -> convertFieldReference()
is PsiClass -> convertType()
is PsiClass -> convertClassReference()
else -> throw Exception("Invalid PSI")
}
@@ -215,32 +214,18 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
return JKFieldReferenceImpl(clazz, this@JavaToJKTreeBuilder.resolveFieldReference(clazz, this))
}
fun PsiClass.convertType(): JKJavaClassReference {
fun PsiClass.convertClassReference(): JKJavaClassReference {
return JKClassReferenceImpl(this@JavaToJKTreeBuilder.resolveClassReference(this))
}
fun PsiTypeElement.toJK(): JKType? {
return innermostComponentReferenceElement?.convertType()
}
fun PsiJavaCodeReferenceElement.convertType(): JKType {
val classReference = JKClassReferenceImpl(this@JavaToJKTreeBuilder.resolveClassReference(this.resolve() as? PsiClass ?: TODO()))
val typeArguments = ArrayList<JKType>()
parameterList?.typeParameterElements?.forEach { it ->
kotlin.run {
val type = it.toJK()
if (type != null) typeArguments.add(type)
}
}
return JKTypeImpl(classReference, typeArguments)
fun PsiType.toJK(): JKType {
val ref = JKClassReferenceImpl(this@JavaToJKTreeBuilder.resolveClassReference((this as PsiClassType).resolve() ?: TODO())) //TODO support other types
return JKClassTypeImpl(ref, parameters.map { it.toJK() })
}
}
private inner class DeclarationMapper(val expressionTreeMapper: ExpressionTreeMapper) {
val declarationMapper = this
fun PsiClass.toJK(): JKClass {
val classKind: JKClass.ClassKind = when {
isAnnotationType -> JKClass.ClassKind.ANNOTATION
@@ -248,34 +233,19 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
isInterface -> JKClass.ClassKind.INTERFACE
else -> JKClass.ClassKind.CLASS
}
return JKClassImpl(with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(this.name!!), classKind).apply {
declarations = children.mapNotNull { ElementVisitor(declarationMapper).apply { it.accept(this) }.resultElement as? JKDeclaration }
return JKClassImpl(with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(name!!), classKind).apply {
declarations = children.mapNotNull { ElementVisitor(this@DeclarationMapper).apply { it.accept(this) }.resultElement as? JKDeclaration }
}
}
fun PsiField.toJK(): JKJavaField {
val initializer = with(expressionTreeMapper) {
initializer?.toJK()
}
val type = JKJavaTypeIdentifierImpl(this.type.canonicalText)
val name = JKNameIdentifierImpl(this.name!!)
val modifierList = with(modifierMapper) {
modifierList.toJK()
}
return JKJavaFieldImpl(modifierList, type, name, initializer)
return JKJavaFieldImpl(with(modifierMapper) { modifierList.toJK() }, with(expressionTreeMapper) { type.toJK() },
JKNameIdentifierImpl(this.name!!), with(expressionTreeMapper) { initializer?.toJK() })
}
fun PsiMethod.toJK(): JKJavaMethod {
val modifierList = with(modifierMapper) { modifierList.toJK() }
val name = JKNameIdentifierImpl(name)
val valueArgumentList = this.parameterList.parameters.map { it -> it.toJK() }
val block = body?.toJK()
return JKJavaMethodImpl(modifierList, name, valueArgumentList, block)
return JKJavaMethodImpl(with(modifierMapper) { modifierList.toJK() }, JKNameIdentifierImpl(name),
parameterList.parameters.map { it -> it.toJK() }, body?.toJK())
}
fun PsiMember.toJK(): JKDeclaration? = when (this) {
@@ -285,8 +255,7 @@ class JavaToJKTreeBuilder : ReferenceTargetProvider {
}
fun PsiParameter.toJK(): JKValueArgumentImpl {
//TODO implement PsiType mapping for type name
return JKValueArgumentImpl(JKJavaTypeIdentifierImpl("this.type.getCanonicalText()"), this.name!!)
return JKValueArgumentImpl(with(expressionTreeMapper) { type.toJK() }, name!!)
}
fun PsiCodeBlock.toJK(): JKBlock {
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.j2k.tree.conveersionCache
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.impl.JKElementBase
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaTypeIdentifierImpl
import org.jetbrains.kotlin.j2k.tree.impl.JKJavaPrimitiveTypeImpl
import org.jetbrains.kotlin.j2k.tree.impl.JKModifierListImpl
import org.jetbrains.kotlin.j2k.tree.impl.JKReferenceType
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
class JKMultiverseField(override var name: JKNameIdentifier) : JKMultiverseDeclaration, JKJavaField {
override var initializer: JKExpression? = null
override var modifierList: JKModifierList = JKModifierListImpl()
override var type: JKTypeIdentifier = JKJavaTypeIdentifierImpl("") //TODO
override var type: JKType = JKJavaPrimitiveTypeImpl.BOOLEAN //TODO
override val valid: Boolean
get() = true
}
@@ -30,20 +30,12 @@ interface ReferenceTargetProvider {
fun putUniverseClass(clazz: JKClass)
fun putMultiverseClass(clazz: JKMultiverseClass)
fun resolveMethodReference(clazz: JKClass, method: PsiMethod): JKMethod {
return clazz.declarations.asSequence().filter { it is JKMethod && it.name.name == method.name }.firstOrNull() as JKMethod? ?: run {
val met = JKMultiverseMethod(JKNameIdentifierImpl(method.name))
clazz.declarations += met
met
}
return clazz.declarations.asSequence().filter { it is JKMethod && it.name.name == method.name }.firstOrNull() as JKMethod?
?: JKMultiverseMethod(JKNameIdentifierImpl(method.name)).also { clazz.declarations += it }
}
fun resolveFieldReference(clazz: JKClass, field: PsiField): JKJavaField {
return clazz.declarations.asSequence().filter { it is JKJavaField && it.name.name == field.name }.firstOrNull() as JKJavaField?
?: run {
val field = JKMultiverseField(JKNameIdentifierImpl(field.name!!))
clazz.declarations += field
field
}
?: JKMultiverseField(JKNameIdentifierImpl(field.name!!)).also { clazz.declarations += it }
}
}
@@ -20,12 +20,10 @@ import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
class JKJavaFieldImpl(
override var modifierList: JKModifierList,
override var type: JKTypeIdentifier,
override var name: JKNameIdentifier,
override var initializer: JKExpression?
) : JKJavaField, JKElementBase() {
class JKJavaFieldImpl(override var modifierList: JKModifierList,
override var type: JKType,
override var name: JKNameIdentifier,
override var initializer: JKExpression?) : JKJavaField, JKElementBase() {
override val valid: Boolean
get() = true
@@ -41,12 +39,6 @@ class JKJavaFieldImpl(
}
}
class JKJavaTypeIdentifierImpl(override val typeName: String) : JKJavaTypeIdentifier, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaTypeIdentifier(this, data)
}
class JKJavaStringLiteralExpressionImpl(override val text: String) : JKJavaStringLiteralExpression, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaStringLiteralExpression(this, data)
}
@@ -158,4 +150,26 @@ class JKJavaNewArrayImpl(override var initializer: List<JKExpression>) : JKJavaN
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {
initializer = initializer.map { it.transform<JKLiteralExpression, D>(transformer, data) }
}
}
sealed class JKJavaPrimitiveTypeImpl(override val name: String) : JKJavaPrimitiveType, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaPrimitiveType(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
}
object BYTE : JKJavaPrimitiveTypeImpl("byte")
object BOOLEAN : JKJavaPrimitiveTypeImpl("boolean")
object INT : JKJavaPrimitiveTypeImpl("int")
}
class JKJavaArrayTypeImpl(override val type: JKType, override val dimensionCount: Int) : JKJavaArrayType, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaArrayType(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
}
}
@@ -75,10 +75,8 @@ class JKModifierListImpl : JKModifierList, JKElementBase() {
}
}
class JKValueArgumentImpl(
override var type: JKTypeIdentifier,
override val name: String
) : JKValueArgument, JKElementBase() {
class JKValueArgumentImpl(override var type: JKType,
override val name: String) : JKValueArgument, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitValueArgument(this, data)
override fun <D> transformChildren(transformer: JKTransformer<D>, data: D) {
type = type.transform(transformer, data)
@@ -228,12 +226,9 @@ class JKTypeCastExpressionImpl(override var expression: JKExpression?, override
}
}
class JKTypeImpl(
override val classReference: JKClassReference, override val parameters: List<JKType>,
override val nullability: Nullability = Nullability.Default
) : JKType, JKElementBase() {
class JKClassTypeImpl(override val classReference: JKClassReference, override val parameters: List<JKType>, override val nullability: Nullability = Nullability.Default) : JKClassType, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitType(this, data)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitClassType(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.j2k.tree.visitors.JKTransformer
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
class JKKtPropertyImpl(override var modifierList: JKModifierList,
override var type: JKTypeIdentifier,
override var type: JKType,
override var name: JKNameIdentifier,
override var initializer: JKExpression? = null,
override var getter: JKBlock? = null,
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.j2k.tree
interface JKJavaField : JKDeclaration, JKModifierListOwner {
val type: JKTypeIdentifier
val type: JKType
val name: JKNameIdentifier
val initializer: JKExpression?
}
@@ -28,8 +28,13 @@ interface JKJavaForLoop : JKLoop
interface JKJavaAssignmentExpression : JKExpression
interface JKJavaTypeIdentifier : JKTypeIdentifier {
val typeName: String
interface JKJavaPrimitiveType : JKType {
val name: String
}
interface JKJavaArrayType : JKType {
val type: JKType
val dimensionCount : Int
}
interface JKJavaStringLiteralExpression : JKLiteralExpression {
@@ -113,13 +113,14 @@ interface JKClassReference : JKReference {
override val target: JKClass
}
interface JKType : JKElement {
interface JKType : JKElement
interface JKClassType : JKType {
val classReference: JKClassReference
val nullability: Nullability
val parameters: List<JKType>
}
interface JKOperatorIdentifier : JKIdentifier
interface JKQualificationIdentifier : JKIdentifier
@@ -134,8 +135,6 @@ interface JKBlock : JKElement {
interface JKIdentifier : JKElement
interface JKTypeIdentifier : JKIdentifier
interface JKNameIdentifier : JKIdentifier {
val name: String
}
@@ -151,7 +150,7 @@ interface JKModifier : JKElement
interface JKAccessModifier : JKModifier
interface JKValueArgument : JKElement {
val type: JKTypeIdentifier
val type: JKType
val name: String
}
@@ -27,7 +27,7 @@ interface JKKtAssignmentStatement : JKStatement
interface JKKtCall : JKMethodCallExpression
interface JKKtProperty : JKDeclaration, JKModifierListOwner {
val type: JKTypeIdentifier
val type: JKType
val name: JKNameIdentifier
val initializer: JKExpression?
val getter: JKBlock?
@@ -35,12 +35,11 @@ interface JKKtProperty : JKDeclaration, JKModifierListOwner {
}
interface JKKtFunction : JKDeclaration, JKModifierListOwner {
val returnType: JKTypeIdentifier
val returnType: JKType
val name: JKNameIdentifier
val valueArguments: List<JKValueArgument>
val block: JKBlock?
}
interface JKKtModifier : JKModifier {
val type: KtModifierType
@@ -23,13 +23,13 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitFieldReference(fieldReference: JKFieldReference, data: D): JKFieldReference = visitReference(fieldReference, data) as JKFieldReference
override fun visitClassReference(classReference: JKClassReference, data: D): JKClassReference = visitReference(classReference, data) as JKClassReference
override fun visitType(type: JKType, data: D): JKType = visitElement(type, data) as JKType
override fun visitClassType(classType: JKClassType, data: D): JKClassType = visitType(classType, data) as JKClassType
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: D): JKOperatorIdentifier = visitIdentifier(operatorIdentifier, data) as JKOperatorIdentifier
override fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): JKQualificationIdentifier = visitIdentifier(qualificationIdentifier, data) as JKQualificationIdentifier
override fun visitLoop(loop: JKLoop, data: D): JKLoop = visitStatement(loop, data) as JKLoop
override fun visitDeclaration(declaration: JKDeclaration, data: D): JKDeclaration = visitElement(declaration, data) as JKDeclaration
override fun visitBlock(block: JKBlock, data: D): JKBlock = visitElement(block, data) as JKBlock
override fun visitIdentifier(identifier: JKIdentifier, data: D): JKIdentifier = visitElement(identifier, data) as JKIdentifier
override fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: D): JKTypeIdentifier = visitIdentifier(typeIdentifier, data) as JKTypeIdentifier
override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): JKNameIdentifier = visitIdentifier(nameIdentifier, data) as JKNameIdentifier
override fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): JKLiteralExpression = visitExpression(literalExpression, data) as JKLiteralExpression
override fun visitModifierList(modifierList: JKModifierList, data: D): JKModifierList = visitElement(modifierList, data) as JKModifierList
@@ -44,7 +44,8 @@ interface JKTransformer<in D> : JKVisitor<JKElement, D> {
override fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): JKMethod = visitMethod(javaMethod, data)
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): JKLoop = visitLoop(javaForLoop, data)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): JKExpression = visitExpression(javaAssignmentExpression, data)
override fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: D): JKTypeIdentifier = visitTypeIdentifier(javaTypeIdentifier, data)
override fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType, data: D): JKType = visitType(javaPrimitiveType, data)
override fun visitJavaArrayType(javaArrayType: JKJavaArrayType, data: D): JKType = visitType(javaArrayType, data)
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: D): JKLiteralExpression = visitLiteralExpression(javaStringLiteralExpression, data)
override fun visitJavaOperatorIdentifier(javaOperatorIdentifier: JKJavaOperatorIdentifier, data: D): JKOperatorIdentifier = visitOperatorIdentifier(javaOperatorIdentifier, data)
override fun visitJavaQualificationIdentifier(javaQualificationIdentifier: JKJavaQualificationIdentifier, data: D): JKQualificationIdentifier = visitQualificationIdentifier(javaQualificationIdentifier, data)
@@ -43,6 +43,8 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitClassReference(classReference: JKClassReference, data: Nothing?): JKClassReference = visitClassReference(classReference)
fun visitType(type: JKType): JKType = visitElement(type) as JKType
override fun visitType(type: JKType, data: Nothing?): JKType = visitType(type)
fun visitClassType(classType: JKClassType): JKClassType = visitType(classType) as JKClassType
override fun visitClassType(classType: JKClassType, data: Nothing?): JKClassType = visitClassType(classType)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier): JKOperatorIdentifier = visitIdentifier(operatorIdentifier) as JKOperatorIdentifier
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?): JKOperatorIdentifier = visitOperatorIdentifier(operatorIdentifier)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier): JKQualificationIdentifier = visitIdentifier(qualificationIdentifier) as JKQualificationIdentifier
@@ -55,8 +57,6 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitBlock(block: JKBlock, data: Nothing?): JKBlock = visitBlock(block)
fun visitIdentifier(identifier: JKIdentifier): JKIdentifier = visitElement(identifier) as JKIdentifier
override fun visitIdentifier(identifier: JKIdentifier, data: Nothing?): JKIdentifier = visitIdentifier(identifier)
fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier): JKTypeIdentifier = visitIdentifier(typeIdentifier) as JKTypeIdentifier
override fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: Nothing?): JKTypeIdentifier = visitTypeIdentifier(typeIdentifier)
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier): JKNameIdentifier = visitIdentifier(nameIdentifier) as JKNameIdentifier
override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: Nothing?): JKNameIdentifier = visitNameIdentifier(nameIdentifier)
fun visitLiteralExpression(literalExpression: JKLiteralExpression): JKLiteralExpression = visitExpression(literalExpression) as JKLiteralExpression
@@ -85,8 +85,10 @@ interface JKTransformerVoid : JKTransformer<Nothing?> {
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?): JKLoop = visitJavaForLoop(javaForLoop)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression): JKExpression = visitExpression(javaAssignmentExpression)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?): JKExpression = visitJavaAssignmentExpression(javaAssignmentExpression)
fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier): JKTypeIdentifier = visitTypeIdentifier(javaTypeIdentifier)
override fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: Nothing?): JKTypeIdentifier = visitJavaTypeIdentifier(javaTypeIdentifier)
fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType): JKType = visitType(javaPrimitiveType)
override fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType, data: Nothing?): JKType = visitJavaPrimitiveType(javaPrimitiveType)
fun visitJavaArrayType(javaArrayType: JKJavaArrayType): JKType = visitType(javaArrayType)
override fun visitJavaArrayType(javaArrayType: JKJavaArrayType, data: Nothing?): JKType = visitJavaArrayType(javaArrayType)
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression): JKLiteralExpression = visitLiteralExpression(javaStringLiteralExpression)
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: Nothing?): JKLiteralExpression = visitJavaStringLiteralExpression(javaStringLiteralExpression)
fun visitJavaOperatorIdentifier(javaOperatorIdentifier: JKJavaOperatorIdentifier): JKOperatorIdentifier = visitOperatorIdentifier(javaOperatorIdentifier)
@@ -23,13 +23,13 @@ interface JKVisitor<out R, in D> {
fun visitFieldReference(fieldReference: JKFieldReference, data: D): R = visitReference(fieldReference, data)
fun visitClassReference(classReference: JKClassReference, data: D): R = visitReference(classReference, data)
fun visitType(type: JKType, data: D): R = visitElement(type, data)
fun visitClassType(classType: JKClassType, data: D): R = visitType(classType, data)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: D): R = visitIdentifier(operatorIdentifier, data)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier, data: D): R = visitIdentifier(qualificationIdentifier, data)
fun visitLoop(loop: JKLoop, data: D): R = visitStatement(loop, data)
fun visitDeclaration(declaration: JKDeclaration, data: D): R = visitElement(declaration, data)
fun visitBlock(block: JKBlock, data: D): R = visitElement(block, data)
fun visitIdentifier(identifier: JKIdentifier, data: D): R = visitElement(identifier, data)
fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: D): R = visitIdentifier(typeIdentifier, data)
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: D): R = visitIdentifier(nameIdentifier, data)
fun visitLiteralExpression(literalExpression: JKLiteralExpression, data: D): R = visitExpression(literalExpression, data)
fun visitModifierList(modifierList: JKModifierList, data: D): R = visitElement(modifierList, data)
@@ -44,7 +44,8 @@ interface JKVisitor<out R, in D> {
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): R = visitLoop(javaForLoop, data)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, data)
fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: D): R = visitTypeIdentifier(javaTypeIdentifier, data)
fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType, data: D): R = visitType(javaPrimitiveType, data)
fun visitJavaArrayType(javaArrayType: JKJavaArrayType, data: D): R = visitType(javaArrayType, data)
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: D): R = visitLiteralExpression(javaStringLiteralExpression, data)
fun visitJavaOperatorIdentifier(javaOperatorIdentifier: JKJavaOperatorIdentifier, data: D): R = visitOperatorIdentifier(javaOperatorIdentifier, data)
fun visitJavaQualificationIdentifier(javaQualificationIdentifier: JKJavaQualificationIdentifier, data: D): R = visitQualificationIdentifier(javaQualificationIdentifier, data)
@@ -43,6 +43,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitClassReference(classReference: JKClassReference, data: Nothing?) = visitClassReference(classReference)
fun visitType(type: JKType) = visitElement(type, null)
override fun visitType(type: JKType, data: Nothing?) = visitType(type)
fun visitClassType(classType: JKClassType) = visitType(classType, null)
override fun visitClassType(classType: JKClassType, data: Nothing?) = visitClassType(classType)
fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier) = visitIdentifier(operatorIdentifier, null)
override fun visitOperatorIdentifier(operatorIdentifier: JKOperatorIdentifier, data: Nothing?) = visitOperatorIdentifier(operatorIdentifier)
fun visitQualificationIdentifier(qualificationIdentifier: JKQualificationIdentifier) = visitIdentifier(qualificationIdentifier, null)
@@ -55,8 +57,6 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitBlock(block: JKBlock, data: Nothing?) = visitBlock(block)
fun visitIdentifier(identifier: JKIdentifier) = visitElement(identifier, null)
override fun visitIdentifier(identifier: JKIdentifier, data: Nothing?) = visitIdentifier(identifier)
fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier) = visitIdentifier(typeIdentifier, null)
override fun visitTypeIdentifier(typeIdentifier: JKTypeIdentifier, data: Nothing?) = visitTypeIdentifier(typeIdentifier)
fun visitNameIdentifier(nameIdentifier: JKNameIdentifier) = visitIdentifier(nameIdentifier, null)
override fun visitNameIdentifier(nameIdentifier: JKNameIdentifier, data: Nothing?) = visitNameIdentifier(nameIdentifier)
fun visitLiteralExpression(literalExpression: JKLiteralExpression) = visitExpression(literalExpression, null)
@@ -85,8 +85,10 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?) = visitJavaForLoop(javaForLoop)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression) = visitExpression(javaAssignmentExpression, null)
override fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: Nothing?) = visitJavaAssignmentExpression(javaAssignmentExpression)
fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier) = visitTypeIdentifier(javaTypeIdentifier, null)
override fun visitJavaTypeIdentifier(javaTypeIdentifier: JKJavaTypeIdentifier, data: Nothing?) = visitJavaTypeIdentifier(javaTypeIdentifier)
fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType) = visitType(javaPrimitiveType, null)
override fun visitJavaPrimitiveType(javaPrimitiveType: JKJavaPrimitiveType, data: Nothing?) = visitJavaPrimitiveType(javaPrimitiveType)
fun visitJavaArrayType(javaArrayType: JKJavaArrayType) = visitType(javaArrayType, null)
override fun visitJavaArrayType(javaArrayType: JKJavaArrayType, data: Nothing?) = visitJavaArrayType(javaArrayType)
fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression) = visitLiteralExpression(javaStringLiteralExpression, null)
override fun visitJavaStringLiteralExpression(javaStringLiteralExpression: JKJavaStringLiteralExpression, data: Nothing?) = visitJavaStringLiteralExpression(javaStringLiteralExpression)
fun visitJavaOperatorIdentifier(javaOperatorIdentifier: JKJavaOperatorIdentifier) = visitOperatorIdentifier(javaOperatorIdentifier, null)
+1 -1
View File
@@ -3,7 +3,7 @@ package p;
public class Some {
public String test=""+"a";
public static void main(String[] args) {
public static void main(String args) {
System.out.println("Test");
}
}