New J2K: Add body stub for abstract methods & set return type to void for <init>

This commit is contained in:
Simon Ogorodnik
2018-05-29 19:08:52 +03:00
committed by Ilya Kirillov
parent cb4474b9a4
commit 607d9820e7
2 changed files with 25 additions and 2 deletions
@@ -248,10 +248,14 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
fun PsiMethod.toJK(): JKJavaMethod {
return JKJavaMethodImpl(
with(modifierMapper) { modifierList.toJK() },
with(expressionTreeMapper) { returnTypeElement?.toJK() ?: TODO() },
with(expressionTreeMapper) {
returnTypeElement?.toJK()
?: JKTypeElementImpl(JKJavaVoidType).takeIf { isConstructor }
?: TODO()
},
JKNameIdentifierImpl(name),
parameterList.parameters.map { it -> it.toJK() },
body?.toJK() ?: TODO()
body?.toJK() ?: JKBodyStub
).also {
(symbolProvider.provideSymbol(this) as? JKUniverseMethodSymbol)?.run { target = it }
}
@@ -173,4 +173,23 @@ class JKAssertStatementImpl(condition: JKExpression, description: JKExpression)
override val condition by child(condition)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitAssertStatement(this, data)
}
object JKBodyStub : JKBlock, JKTreeElement {
override var statements: List<JKStatement>
get() = emptyList()
set(value) {}
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlock(this, data)
override fun <D> acceptChildren(visitor: JKVisitor<Unit, D>, data: D) {}
override val parent: JKElement?
get() = null
override fun detach(from: JKElement) {
}
override fun attach(to: JKElement) {
}
}