New J2K: Correctly resolve references to default constructor

This commit is contained in:
Simon Ogorodnik
2018-05-30 18:38:36 +03:00
committed by Ilya Kirillov
parent 0e2dac0899
commit c53f56629e
3 changed files with 19 additions and 1 deletions
@@ -161,8 +161,17 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
return JKJavaNewEmptyArrayImpl(dimensions.map { it?.toJK() })
}
}
val constructedClass = classOrAnonymousClassReference?.resolve()
val constructor = constructorFakeReference.resolve()
if (constructor == null && constructedClass != null) {
return JKJavaDefaultNewExpressionImpl(
symbolProvider.provideSymbol(constructedClass) as JKClassSymbol
)
}
return JKJavaNewExpressionImpl(
symbolProvider.provideSymbol(constructorFakeReference.resolve()!!) as JKMethodSymbol,
symbolProvider.provideSymbol(constructor!!) as JKMethodSymbol,
argumentList.toJK()
)
}
@@ -101,6 +101,10 @@ class JKJavaNewExpressionImpl(
override var arguments by child(arguments)
}
class JKJavaDefaultNewExpressionImpl(
override val classSymbol: JKClassSymbol
) : JKJavaDefaultNewExpression, JKElementBase()
class JKJavaNewEmptyArrayImpl(override var initializer: List<JKLiteralExpression?>) : JKJavaNewEmptyArray, JKElementBase() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewEmptyArray(this, data)
}
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.j2k.tree
import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol
import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol
interface JKJavaField : JKField, JKBranchElement
@@ -38,6 +39,10 @@ interface JKJavaNewExpression : JKExpression {
val arguments: JKExpressionList
}
interface JKJavaDefaultNewExpression : JKExpression {
val classSymbol: JKClassSymbol
}
interface JKJavaAccessModifier : JKAccessModifier {
val type: AccessModifierType