New J2K: Correctly resolve references to default constructor
This commit is contained in:
committed by
Ilya Kirillov
parent
0e2dac0899
commit
c53f56629e
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user