diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index 406d7bc2e86..34ee3870744 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -204,16 +204,16 @@ class NewCodeBuilder { if (isInInterface) { renderList(extendTypes) { renderType(it) } } else { - extendTypes.singleOrNull()?.also { - renderType(it) + extendTypes.singleOrNull()?.also { superType -> + renderType(superType) + val primaryConstructor = parentClass.primaryConstructor() val delegationCall = - parentClass - .primaryConstructor() + primaryConstructor ?.delegationCall ?.let { it as? JKDelegationConstructorCall } if (delegationCall != null) { printer.par { delegationCall.arguments.accept(this) } - } else { + } else if (!superType.isInterface()) { printer.printWithNoIndent("()") } } @@ -608,7 +608,7 @@ class NewCodeBuilder { } printer.printWithNoIndent(javaNewExpression.classSymbol.displayName().escapedAsQualifiedName()) javaNewExpression.typeArgumentList.accept(this) - if (javaNewExpression.constructorIsPresent() || !javaNewExpression.isAnonymousClass()) { + if (!javaNewExpression.classSymbol.isInterface()) { printer.par(ROUND) { javaNewExpression.arguments.accept(this) } @@ -709,6 +709,8 @@ class NewCodeBuilder { printer.printWithNoIndent(" constructor ") if (ktPrimaryConstructor.parameters.isNotEmpty()) { renderParameterList(ktPrimaryConstructor.parameters) + } else { + printer.print("()") } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt index 5a67848bd5c..801f369af35 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/j.kt @@ -44,17 +44,6 @@ interface JKJavaNewExpression : JKExpression, JKTypeArgumentListOwner, PsiOwner fun JKJavaNewExpression.isAnonymousClass() = classBody !is JKEmptyClassBody -fun JKJavaNewExpression.constructorIsPresent(): Boolean { - if (arguments.expressions.isNotEmpty()) return true - val symbol = classSymbol - return when (symbol) { - is JKMultiverseClassSymbol -> symbol.target.constructors.isNotEmpty() - is JKMultiverseKtClassSymbol -> symbol.target.constructor != null - is JKUniverseClassSymbol -> symbol.target.classBody.declarations.any { it is JKKtConstructor } - is JKUnresolvedClassSymbol -> true //TODO ??? - else -> TODO(symbol::class.toString()) - } -} interface JKJavaDefaultNewExpression : JKExpression { val classSymbol: JKClassSymbol diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt index a6385b9f650..5b75e55f9b6 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt @@ -296,4 +296,17 @@ fun JKType.arrayInnerType(): JKType? = val namesOfPrimitiveTypes by lazy { KotlinBuiltIns.FQ_NAMES.primitiveTypeShortNames.map { it.identifier.decapitalize() } -} \ No newline at end of file +} + +fun JKClassSymbol.isInterface(): Boolean { + val target = target + return when (target) { + is PsiClass -> target.isInterface + is KtClass -> target.isInterface() + is JKClass -> target.classKind == JKClass.ClassKind.INTERFACE + else -> false + } +} + +fun JKType.isInterface(): Boolean = + (this as? JKClassType)?.classReference?.isInterface() ?: false \ No newline at end of file