New J2K: If expression improvements.
Fixed field resolve.
This commit is contained in:
@@ -56,7 +56,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
is PsiThisExpression -> JKThisExpressionImpl()
|
||||
is PsiSuperExpression -> JKSuperExpressionImpl()
|
||||
is PsiConditionalExpression -> JKIfElseExpressionImpl(
|
||||
condition.toJK(), JKExpressionStatementImpl(thenExpression.toJK()), JKExpressionStatementImpl(elseExpression.toJK())
|
||||
condition.toJK(), thenExpression.toJK(), elseExpression.toJK()
|
||||
)
|
||||
else -> {
|
||||
throw RuntimeException("Not supported: ${this::class}")
|
||||
@@ -122,7 +122,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
return JKNullLiteral() // TODO !!!
|
||||
}
|
||||
|
||||
val access = JKJavaFieldAccessExpressionImpl(JKMultiverseFieldSymbol(impl.resolve() as PsiField))
|
||||
val access = JKJavaFieldAccessExpressionImpl(symbolProvider.provideSymbol(impl.resolve() ?: TODO()) as JKFieldSymbol)
|
||||
return when {
|
||||
impl.findChildByRole(ChildRole.DOT) != null &&
|
||||
(impl.qualifierExpression as? PsiReferenceExpression)?.resolve() !is PsiClass ->
|
||||
@@ -293,12 +293,12 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
is PsiDeclarationStatement -> JKDeclarationStatementImpl(declaredElements.toJK())
|
||||
is PsiAssertStatement -> JKJavaAssertStatementImpl(with(expressionTreeMapper) { assertCondition.toJK() },
|
||||
with(expressionTreeMapper) { assertDescription.toJK() })
|
||||
is PsiIfStatement -> JKExpressionStatementImpl(
|
||||
is PsiIfStatement ->
|
||||
if (elseElement == null)
|
||||
JKIfExpressionImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK())
|
||||
JKIfStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK())
|
||||
else
|
||||
JKIfElseExpressionImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK(), elseBranch.toJK())
|
||||
)
|
||||
JKIfElseStatementImpl(with(expressionTreeMapper) { condition.toJK() }, thenBranch.toJK(), elseBranch.toJK())
|
||||
|
||||
is PsiForStatement -> JKJavaForLoopStatementImpl(
|
||||
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)
|
||||
}
|
||||
|
||||
class JKIfExpressionImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfExpression, JKBranchElementBase() {
|
||||
class JKIfStatementImpl(condition: JKExpression, thenBranch: JKStatement) : JKIfStatement, JKBranchElementBase() {
|
||||
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.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() {
|
||||
override var elseBranch by child(elseBranch)
|
||||
override var thenBranch by child(thenBranch)
|
||||
|
||||
@@ -189,11 +189,17 @@ interface JKSwitchDefaultLabelStatement : JKStatement
|
||||
|
||||
interface JKBreakStatement : JKStatement
|
||||
|
||||
interface JKIfExpression : JKExpression {
|
||||
interface JKIfStatement : JKStatement {
|
||||
var condition: JKExpression
|
||||
var thenBranch: JKStatement
|
||||
}
|
||||
|
||||
interface JKIfElseExpression : JKIfExpression {
|
||||
interface JKIfElseStatement : JKIfStatement {
|
||||
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 visitSwitchDefaultLabelStatement(switchDefaultLabelStatement: JKSwitchDefaultLabelStatement, data: D): R = visitStatement(switchDefaultLabelStatement, data)
|
||||
fun visitBreakStatement(breakStatement: JKBreakStatement, data: D): R = visitStatement(breakStatement, data)
|
||||
fun visitIfExpression(ifExpression: JKIfExpression, data: D): R = visitExpression(ifExpression, data)
|
||||
fun visitIfElseExpression(ifElseExpression: JKIfElseExpression, data: D): R = visitIfExpression(ifElseExpression, data)
|
||||
fun visitIfStatement(ifStatement: JKIfStatement, data: D): R = visitStatement(ifStatement, 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 visitJavaMethod(javaMethod: JKJavaMethod, data: D): R = visitMethod(javaMethod, 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)
|
||||
fun visitBreakStatement(breakStatement: JKBreakStatement) = visitStatement(breakStatement, null)
|
||||
override fun visitBreakStatement(breakStatement: JKBreakStatement, data: Nothing?) = visitBreakStatement(breakStatement)
|
||||
fun visitIfExpression(ifExpression: JKIfExpression) = visitExpression(ifExpression, null)
|
||||
override fun visitIfExpression(ifExpression: JKIfExpression, data: Nothing?) = visitIfExpression(ifExpression)
|
||||
fun visitIfElseExpression(ifElseExpression: JKIfElseExpression) = visitIfExpression(ifElseExpression, null)
|
||||
fun visitIfStatement(ifStatement: JKIfStatement) = visitStatement(ifStatement, null)
|
||||
override fun visitIfStatement(ifStatement: JKIfStatement, data: Nothing?) = visitIfStatement(ifStatement)
|
||||
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)
|
||||
fun visitJavaField(javaField: JKJavaField) = visitField(javaField, null)
|
||||
override fun visitJavaField(javaField: JKJavaField, data: Nothing?) = visitJavaField(javaField)
|
||||
|
||||
Reference in New Issue
Block a user