From 5fd3a78dbebdc4143bfe2415fc40c2ee6a1cb884 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 12 Oct 2017 00:07:50 +0300 Subject: [PATCH] New J2K: Add basic tree structure and visitor generation script --- j2k/GenerateJKTreeVisitor.kts | 113 ++++++++++++++++++ .../kotlin/j2k/JavaToJKTreeBuilder.kt | 27 ++++- .../kotlin/j2k/tree/JKJavaKtVisitor.kt | 12 ++ .../kotlin/j2k/tree/JKJavaKtVisitorVoid.kt | 20 ++++ .../kotlin/j2k/tree/JKJavaVisitor.kt | 8 ++ .../kotlin/j2k/tree/JKJavaVisitorVoid.kt | 12 ++ .../jetbrains/kotlin/j2k/tree/JKKtVisitor.kt | 8 ++ .../kotlin/j2k/tree/JKKtVisitorVoid.kt | 12 ++ .../jetbrains/kotlin/j2k/tree/JKVisitor.kt | 11 ++ .../kotlin/j2k/tree/JKVisitorVoid.kt | 18 +++ .../org/jetbrains/kotlin/j2k/tree/impl/j.kt | 47 ++++++++ .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 38 ++++++ .../org/jetbrains/kotlin/j2k/tree/impl/k.kt | 18 +++ j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt | 25 ++++ .../org/jetbrains/kotlin/j2k/tree/jk.kt | 38 ++++++ j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt | 25 ++++ 16 files changed, 429 insertions(+), 3 deletions(-) create mode 100644 j2k/GenerateJKTreeVisitor.kts create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitor.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitorVoid.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitor.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitorVoid.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitor.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitorVoid.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitor.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitorVoid.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt diff --git a/j2k/GenerateJKTreeVisitor.kts b/j2k/GenerateJKTreeVisitor.kts new file mode 100644 index 00000000000..de50483380a --- /dev/null +++ b/j2k/GenerateJKTreeVisitor.kts @@ -0,0 +1,113 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File + + +val JK_ROOT = File("./j2k/newSrc/org/jetbrains/kotlin/j2k/tree") + +val JK_KT_FILE = File(JK_ROOT, "k.kt") +val JK_JAVA_FILE = File(JK_ROOT, "j.kt") +val JK_COMMON_FILE = File(JK_ROOT, "jk.kt") + + +val interfaceRegex = "interface (JK[a-zA-Z]+)".toRegex() + + +fun File.interfaceNames() = + sequenceOf(this) + .map { it.readText() } + .flatMap { interfaceRegex.findAll(it) } + .map { match -> match.groupValues[1] } + .toList() + + +fun String.safeVarName() = when (this) { + "class" -> "klass" + else -> this +} + +fun genVisitors(interfaceNames: List, visitorName: String, extends: String = "") { + + val outFile = File(JK_ROOT, "$visitorName.kt") + + outFile.writeText(buildString { + appendln("package org.jetbrains.kotlin.j2k.tree") + appendln() + val extends = if (extends.isNotBlank()) ": $extends" else "" + appendln("interface $visitorName $extends {") + interfaceNames.joinTo(this, separator = "\n") { name -> + val nameWithoutPrefix = name.removePrefix("JK") + """ + | fun visit$nameWithoutPrefix(${nameWithoutPrefix.decapitalize().safeVarName()}: $name, data: D): R + """.trimMargin() + } + appendln() + appendln("}") + }) + + + val outVoidFile = File(JK_ROOT, "${visitorName}Void.kt") + + outVoidFile.writeText(buildString { + appendln("package org.jetbrains.kotlin.j2k.tree") + appendln() + val extends = if (extends.isNotBlank()) ", ${extends}Void" else "" + appendln("interface ${visitorName}Void : $visitorName$extends {") + interfaceNames.joinTo(this, separator = "\n") { name -> + val nameWithoutPrefix = name.removePrefix("JK") + val argName = nameWithoutPrefix.decapitalize().safeVarName() + val arg = "$argName: $name" + """ + | fun visit$nameWithoutPrefix($arg) + | override fun visit$nameWithoutPrefix($arg, data: Nothing?) = visit$nameWithoutPrefix($argName) + """.trimMargin() + } + appendln() + appendln("}") + }) +} + +// JKVisitor + Void +genVisitors(JK_COMMON_FILE.interfaceNames(), "JKVisitor") +genVisitors(JK_JAVA_FILE.interfaceNames(), "JKJavaVisitor", "JKVisitor") +genVisitors(JK_KT_FILE.interfaceNames(), "JKKtVisitor", "JKVisitor") +genVisitors(JK_JAVA_FILE.interfaceNames() + JK_KT_FILE.interfaceNames(), "JKJavaKtVisitor", "JKVisitor") + +/* JKKtVisitor : JKVisitor + Void + JKJavaVisitor : JKVisitor + Void + JKJavaKtVisitor : JKVisitor + Void + */ + +//val visitNames = + + diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index b6c4bfd7d3d..8246a2f96df 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -18,16 +18,37 @@ package org.jetbrains.kotlin.j2k import com.intellij.lang.java.JavaLanguage import com.intellij.psi.JavaElementVisitor +import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement +import com.intellij.psi.PsiField +import org.jetbrains.kotlin.j2k.tree.JKClass +import org.jetbrains.kotlin.j2k.tree.JKElement +import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl +import org.jetbrains.kotlin.j2k.tree.impl.JKJavaFieldImpl class JavaToJKTreeBuilder { - private class ElementVisitor : JavaElementVisitor() - fun buildTree(psi: PsiElement): Nothing { + + private class ElementVisitor : JavaElementVisitor() { + + var currentClass: JKClass? = null + + override fun visitClass(aClass: PsiClass) { + currentClass = JKClassImpl() + super.visitClass(aClass) + } + + override fun visitField(field: PsiField) { + currentClass!!.declarations.add(JKJavaFieldImpl(field.name!!)) + super.visitField(field) + } + } + + fun buildTree(psi: PsiElement): JKElement? { assert(psi.language.`is`(JavaLanguage.INSTANCE)) { "Unable to build JK Tree using Java Visitor for language ${psi.language}" } val elementVisitor = ElementVisitor() psi.accept(elementVisitor) - TODO("Tree output type") + return elementVisitor.currentClass } } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitor.kt new file mode 100644 index 00000000000..6a4ff1ac053 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitor.kt @@ -0,0 +1,12 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKJavaKtVisitor : JKVisitor { + fun visitJavaElement(javaElement: JKJavaElement, data: D): R + fun visitJavaField(javaField: JKJavaField, data: D): R + fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R + fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): R + fun visitKtElement(ktElement: JKKtElement, data: D): R + fun visitKtFun(ktFun: JKKtFun, data: D): R + fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R + fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitorVoid.kt new file mode 100644 index 00000000000..27d4c8ce032 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaKtVisitorVoid.kt @@ -0,0 +1,20 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKJavaKtVisitorVoid : JKJavaKtVisitor, JKVisitorVoid { + fun visitJavaElement(javaElement: JKJavaElement) + override fun visitJavaElement(javaElement: JKJavaElement, data: Nothing?) = visitJavaElement(javaElement) + fun visitJavaField(javaField: JKJavaField) + override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField) + fun visitJavaMethod(javaMethod: JKJavaMethod) + override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?) = visitJavaMethod(javaMethod) + fun visitJavaForLoop(javaForLoop: JKJavaForLoop) + override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?) = visitJavaForLoop(javaForLoop) + fun visitKtElement(ktElement: JKKtElement) + override fun visitKtElement(ktElement: JKKtElement, data: Nothing?) = visitKtElement(ktElement) + fun visitKtFun(ktFun: JKKtFun) + override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun) + fun visitKtConstructor(ktConstructor: JKKtConstructor) + override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?) = visitKtConstructor(ktConstructor) + fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) + override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?) = visitKtPrimaryConstructor(ktPrimaryConstructor) +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitor.kt new file mode 100644 index 00000000000..4e85bdb2edc --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitor.kt @@ -0,0 +1,8 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKJavaVisitor : JKVisitor { + fun visitJavaElement(javaElement: JKJavaElement, data: D): R + fun visitJavaField(javaField: JKJavaField, data: D): R + fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R + fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: D): R +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitorVoid.kt new file mode 100644 index 00000000000..0efd2ae80a9 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKJavaVisitorVoid.kt @@ -0,0 +1,12 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKJavaVisitorVoid : JKJavaVisitor, JKVisitorVoid { + fun visitJavaElement(javaElement: JKJavaElement) + override fun visitJavaElement(javaElement: JKJavaElement, data: Nothing?) = visitJavaElement(javaElement) + fun visitJavaField(javaField: JKJavaField) + override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField) + fun visitJavaMethod(javaMethod: JKJavaMethod) + override fun visitJavaMethod(javaMethod: JKJavaMethod, data: Nothing?) = visitJavaMethod(javaMethod) + fun visitJavaForLoop(javaForLoop: JKJavaForLoop) + override fun visitJavaForLoop(javaForLoop: JKJavaForLoop, data: Nothing?) = visitJavaForLoop(javaForLoop) +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitor.kt new file mode 100644 index 00000000000..e47b58f2386 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitor.kt @@ -0,0 +1,8 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKKtVisitor : JKVisitor { + fun visitKtElement(ktElement: JKKtElement, data: D): R + fun visitKtFun(ktFun: JKKtFun, data: D): R + fun visitKtConstructor(ktConstructor: JKKtConstructor, data: D): R + fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: D): R +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitorVoid.kt new file mode 100644 index 00000000000..40d37c30405 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKKtVisitorVoid.kt @@ -0,0 +1,12 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKKtVisitorVoid : JKKtVisitor, JKVisitorVoid { + fun visitKtElement(ktElement: JKKtElement) + override fun visitKtElement(ktElement: JKKtElement, data: Nothing?) = visitKtElement(ktElement) + fun visitKtFun(ktFun: JKKtFun) + override fun visitKtFun(ktFun: JKKtFun, data: Nothing?) = visitKtFun(ktFun) + fun visitKtConstructor(ktConstructor: JKKtConstructor) + override fun visitKtConstructor(ktConstructor: JKKtConstructor, data: Nothing?) = visitKtConstructor(ktConstructor) + fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) + override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor, data: Nothing?) = visitKtPrimaryConstructor(ktPrimaryConstructor) +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitor.kt new file mode 100644 index 00000000000..27ebbdc2001 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitor.kt @@ -0,0 +1,11 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKVisitor { + fun visitElement(element: JKElement, data: D): R + fun visitClass(klass: JKClass, data: D): R + fun visitMember(member: JKMember, data: D): R + fun visitExpression(expression: JKExpression, data: D): R + fun visitStatement(statement: JKStatement, data: D): R + fun visitLoop(loop: JKLoop, data: D): R + fun visitDeclaration(declaration: JKDeclaration, data: D): R +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitorVoid.kt new file mode 100644 index 00000000000..8a29c9606c1 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/JKVisitorVoid.kt @@ -0,0 +1,18 @@ +package org.jetbrains.kotlin.j2k.tree + +interface JKVisitorVoid : JKVisitor { + fun visitElement(element: JKElement) + override fun visitElement(element: JKElement, data: Nothing?) = visitElement(element) + fun visitClass(klass: JKClass) + override fun visitClass(klass: JKClass, data: Nothing?) = visitClass(klass) + fun visitMember(member: JKMember) + override fun visitMember(member: JKMember, data: Nothing?) = visitMember(member) + fun visitExpression(expression: JKExpression) + override fun visitExpression(expression: JKExpression, data: Nothing?) = visitExpression(expression) + fun visitStatement(statement: JKStatement) + override fun visitStatement(statement: JKStatement, data: Nothing?) = visitStatement(statement) + fun visitLoop(loop: JKLoop) + override fun visitLoop(loop: JKLoop, data: Nothing?) = visitLoop(loop) + fun visitDeclaration(declaration: JKDeclaration) + override fun visitDeclaration(declaration: JKDeclaration, data: Nothing?) = visitDeclaration(declaration) +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt new file mode 100644 index 00000000000..17eacd9a7ba --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.j2k.tree.impl + +import org.jetbrains.kotlin.j2k.tree.JKJavaElement +import org.jetbrains.kotlin.j2k.tree.JKJavaField +import org.jetbrains.kotlin.j2k.tree.JKJavaVisitor +import org.jetbrains.kotlin.j2k.tree.JKVisitor + +abstract class JKJavaElementBase : JKJavaElement { + override fun accept(visitor: JKVisitor, data: D): R { + return if (visitor is JKJavaVisitor) { + visitor.visitJavaElement(this, data) + } + else { + visitor.visitElement(this, data) + } + } + + override fun acceptChildren(visitor: JKVisitor, data: D) {} +} + + +class JKJavaFieldImpl(val name: String) : JKJavaField, JKJavaElementBase() { + override fun accept(visitor: JKVisitor, data: D): R { + return if (visitor is JKJavaVisitor) { + visitor.visitJavaField(this, data) + } + else { + visitor.visitDeclaration(this, data) + } + } +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt new file mode 100644 index 00000000000..738deaa8ecb --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.j2k.tree.impl + +import org.jetbrains.kotlin.j2k.tree.JKClass +import org.jetbrains.kotlin.j2k.tree.JKDeclaration +import org.jetbrains.kotlin.j2k.tree.JKElement +import org.jetbrains.kotlin.j2k.tree.JKVisitor + +abstract class JKElementBase : JKElement { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitElement(this, data) + + override fun acceptChildren(visitor: JKVisitor, data: D) {} +} + +class JKClassImpl : JKClass, JKElementBase() { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitClass(this, data) + + override fun acceptChildren(visitor: JKVisitor, data: D) { + declarations.forEach { it.accept(visitor, data) } + } + + override val declarations = mutableListOf() +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt new file mode 100644 index 00000000000..6e93e36da06 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.j2k.tree.impl + diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt new file mode 100644 index 00000000000..86cebacb446 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.j2k.tree + +interface JKJavaElement : JKElement + +interface JKJavaField : JKJavaElement, JKDeclaration, JKMember + +interface JKJavaMethod : JKJavaElement, JKDeclaration, JKMember + +interface JKJavaForLoop : JKJavaElement, JKLoop \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt new file mode 100644 index 00000000000..e763bfa1150 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.j2k.tree + + +interface JKElement { + fun accept(visitor: JKVisitor, data: D): R + + fun acceptChildren(visitor: JKVisitor, data: D) +} + +interface JKClass : JKElement { + val declarations: MutableList +} + +interface JKMember : JKElement + +interface JKExpression : JKElement + +interface JKStatement : JKElement + +interface JKLoop : JKStatement + +interface JKDeclaration : JKElement diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt new file mode 100644 index 00000000000..e7196daa929 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/k.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.j2k.tree + +interface JKKtElement: JKElement + +interface JKKtFun: JKKtElement, JKDeclaration + +interface JKKtConstructor: JKKtElement, JKDeclaration + +interface JKKtPrimaryConstructor: JKKtElement, JKKtConstructor