New J2K: If expression improvements.

Fixed field resolve.
This commit is contained in:
Dimach
2018-06-01 15:52:04 +03:00
committed by Ilya Kirillov
parent 986cb5be27
commit 4fe9b6a7c6
5 changed files with 34 additions and 16 deletions
@@ -56,7 +56,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
is PsiThisExpression -> JKThisExpressionImpl() is PsiThisExpression -> JKThisExpressionImpl()
is PsiSuperExpression -> JKSuperExpressionImpl() is PsiSuperExpression -> JKSuperExpressionImpl()
is PsiConditionalExpression -> JKIfElseExpressionImpl( is PsiConditionalExpression -> JKIfElseExpressionImpl(
condition.toJK(), JKExpressionStatementImpl(thenExpression.toJK()), JKExpressionStatementImpl(elseExpression.toJK()) condition.toJK(), thenExpression.toJK(), elseExpression.toJK()
) )
else -> { else -> {
throw RuntimeException("Not supported: ${this::class}") throw RuntimeException("Not supported: ${this::class}")
@@ -122,7 +122,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
return JKNullLiteral() // TODO !!! return JKNullLiteral() // TODO !!!
} }
val access = JKJavaFieldAccessExpressionImpl(JKMultiverseFieldSymbol(impl.resolve() as PsiField)) val access = JKJavaFieldAccessExpressionImpl(symbolProvider.provideSymbol(impl.resolve() ?: TODO()) as JKFieldSymbol)
return when { return when {
impl.findChildByRole(ChildRole.DOT) != null && impl.findChildByRole(ChildRole.DOT) != null &&
(impl.qualifierExpression as? PsiReferenceExpression)?.resolve() !is PsiClass -> (impl.qualifierExpression as? PsiReferenceExpression)?.resolve() !is PsiClass ->
@@ -293,12 +293,12 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK()) is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK())
is PsiAssertStatement -> JKJavaAssertStatementImpl(with(expressionTreeMapper) { assertCondition.toJK() }, is PsiAssertStatement -> JKJavaAssertStatementImpl(with(expressionTreeMapper) { assertCondition.toJK() },
with(expressionTreeMapper) { assertDescription.toJK() }) with(expressionTreeMapper) { assertDescription.toJK() })
is PsiIfStatement -> JKExpressionStatementImpl( is PsiIfStatement ->
if (elseElement == null) if (elseElement == null)
JKIfExpressionImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK()) JKIfStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK())
else else
JKIfElseExpressionImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK(), elseBranch.toJK()) JKIfElseStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK(), elseBranch.toJK())
)
is PsiForStatement -> JKJavaForLoopStatementImpl( is PsiForStatement -> JKJavaForLoopStatementImpl(
initialization.toJK(), with(expressionTreeMapper) { condition.toJK() }, update.toJK(), body.toJK() initialization.toJK(), with(expressionTreeMapper) { condition.toJK() }, update.toJK(), body.toJK()
) )
@@ -243,14 +243,23 @@ class JKBreakStatementImpl : JKBreakStatement, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakStatement(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBreakStatement(this, data)
} }
class JKIfExpressionImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfExpression, JKBranchElementBase() { class JKIfStatementImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfStatement, JKBranchElementBase() {
override var thenBranch by child(thenBranch) override var thenBranch by child(thenBranch)
override var condition by child(condition) override var condition by child(condition)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitIfExpression(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitIfStatement(this, data)
} }
class JKIfElseExpressionImpl(condition: JKExpression, thenBranch: JKStatement, elseBranch: JKStatement) : JKIfElseExpression, class JKIfElseStatementImpl(condition: JKExpression, thenBranch: JKStatement, elseBranch: JKStatement) : JKIfElseStatement,
JKBranchElementBase() {
override var elseBranch by child(elseBranch)
override var thenBranch by child(thenBranch)
override var condition by child(condition)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitIfElseStatement(this, data)
}
class JKIfElseExpressionImpl(condition: JKExpression, thenBranch: JKExpression, elseBranch: JKExpression) : JKIfElseExpression,
JKBranchElementBase() { JKBranchElementBase() {
override var elseBranch by child(elseBranch) override var elseBranch by child(elseBranch)
override var thenBranch by child(thenBranch) override var thenBranch by child(thenBranch)
@@ -189,11 +189,17 @@ interface JKSwitchDefaultLabelStatement : JKStatement
interface JKBreakStatement : JKStatement interface JKBreakStatement : JKStatement
interface JKIfExpression : JKExpression { interface JKIfStatement : JKStatement {
var condition: JKExpression var condition: JKExpression
var thenBranch: JKStatement var thenBranch: JKStatement
} }
interface JKIfElseExpression : JKIfExpression { interface JKIfElseStatement : JKIfStatement {
var elseBranch: JKStatement var elseBranch: JKStatement
}
interface JKIfElseExpression : JKExpression {
var condition: JKExpression
var thenBranch: JKExpression
var elseBranch: JKExpression
} }
@@ -46,8 +46,9 @@ interface JKVisitor<out R, in D> {
fun visitSwitchLabelStatement(switchLabelStatement: JKSwitchLabelStatement, data: D): R = visitStatement(switchLabelStatement, data) fun visitSwitchLabelStatement(switchLabelStatement: JKSwitchLabelStatement, data: D): R = visitStatement(switchLabelStatement, data)
fun visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement, data: D): R = visitStatement(switchDefaultLabelStatement, data) fun visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement, data: D): R = visitStatement(switchDefaultLabelStatement, data)
fun visitBreakStatement(breakStatement: JKBreakStatement, data: D): R = visitStatement(breakStatement, data) fun visitBreakStatement(breakStatement: JKBreakStatement, data: D): R = visitStatement(breakStatement, data)
fun visitIfExpression(ifExpression: JKIfExpression, data: D): R = visitExpression(ifExpression, data) fun visitIfStatement(ifStatement: JKIfStatement, data: D): R = visitStatement(ifStatement, data)
fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: D): R = visitIfExpression(ifElseExpression, data) fun visitIfElseStatement(ifElseStatement: JKIfElseStatement, data: D): R = visitIfStatement(ifElseStatement, data)
fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: D): R = visitExpression(ifElseExpression, data)
fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data) fun visitJavaField(javaField: JKJavaField, data: D): R = visitField(javaField, data)
fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data) fun visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, data)
fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, data) fun visitJavaAssignmentExpression(javaAssignmentExpression: JKJavaAssignmentExpression, data: D): R = visitExpression(javaAssignmentExpression, data)
@@ -89,9 +89,11 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement, data: Nothing?) = visitSwitchDefaultLabelStatement(switchDefaultLabelStatement) override fun visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement, data: Nothing?) = visitSwitchDefaultLabelStatement(switchDefaultLabelStatement)
fun visitBreakStatement(breakStatement: JKBreakStatement) = visitStatement(breakStatement, null) fun visitBreakStatement(breakStatement: JKBreakStatement) = visitStatement(breakStatement, null)
override fun visitBreakStatement(breakStatement: JKBreakStatement, data: Nothing?) = visitBreakStatement(breakStatement) override fun visitBreakStatement(breakStatement: JKBreakStatement, data: Nothing?) = visitBreakStatement(breakStatement)
fun visitIfExpression(ifExpression: JKIfExpression) = visitExpression(ifExpression, null) fun visitIfStatement(ifStatement: JKIfStatement) = visitStatement(ifStatement, null)
override fun visitIfExpression(ifExpression: JKIfExpression, data: Nothing?) = visitIfExpression(ifExpression) override fun visitIfStatement(ifStatement: JKIfStatement, data: Nothing?) = visitIfStatement(ifStatement)
fun visitIfElseExpression(ifElseExpression: JKIfElseExpression) = visitIfExpression(ifElseExpression, null) fun visitIfElseStatement(ifElseStatement: JKIfElseStatement) = visitIfStatement(ifElseStatement, null)
override fun visitIfElseStatement(ifElseStatement: JKIfElseStatement, data: Nothing?) = visitIfElseStatement(ifElseStatement)
fun visitIfElseExpression(ifElseExpression: JKIfElseExpression) = visitExpression(ifElseExpression, null)
override fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: Nothing?) = visitIfElseExpression(ifElseExpression) override fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: Nothing?) = visitIfElseExpression(ifElseExpression)
fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null) fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null)
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField) override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)