Add insert default constructor conversion
diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt
index 92e1cb9..0e7b2c3 100644
--- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt
+++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt
@@ -35,6 +35,7 @@
             +AssignmentStatementOperatorConversion()
             +ConstructorConversion(context)
             +PrimaryConstructorDetectConversion(context)
+            +InsertDefaultPrimaryConstructorConversion(context)
             +JavaMethodToKotlinFunctionConversion()
             +LiteralConversion()
             +InnerClassConversion()
diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt
index e022361..9c26db4 100644
--- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt
+++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt
@@ -120,7 +120,7 @@
             printer.printWithNoIndent(klass.name.value)
 
             val primaryConstructor = klass.primaryConstructor()
-            if (primaryConstructor != null) {
+            if (primaryConstructor != null && primaryConstructor.parameters.isNotEmpty()) {
                 renderParameterList(primaryConstructor.parameters)
             }
 
@@ -138,7 +138,7 @@
                 }
             }
 
-            if (klass.declarationList.isNotEmpty()) {
+            if (klass.declarationList.any { it !is JKKtPrimaryConstructor }) {
                 printer.block(multiline = true) {
                     klass.declarationList.forEach { it.accept(this) }
                 }
diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt
new file mode 100644
index 0000000..b5b7208
--- /dev/null
+++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
+ * that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.j2k.conversions
+
+import org.jetbrains.kotlin.j2k.ConversionContext
+import org.jetbrains.kotlin.j2k.tree.*
+import org.jetbrains.kotlin.j2k.tree.JKModalityModifier.Modality.*
+import org.jetbrains.kotlin.j2k.tree.impl.*
+
+class InsertDefaultPrimaryConstructorConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
+    override fun applyToElement(element: JKTreeElement): JKTreeElement {
+        if (element !is JKClass) return recurse(element)
+        if (element.classKind != JKClass.ClassKind.CLASS && element.declarationList.none { it is JKKtConstructor }) return recurse(element)
+
+        val constructor = JKKtPrimaryConstructorImpl(
+            JKNameIdentifierImpl(element.name.value), emptyList(), JKBodyStub,
+            JKModifierListImpl().also {
+                it.modality = FINAL
+                it.visibility = JKAccessModifier.Visibility.PUBLIC
+            },
+            JKStubExpressionImpl()
+        )
+
+        element.declarationList += constructor
+
+        val superClassSymbol = element.inheritance.inherit.map { it.type }
+            .filterIsInstance<JKClassType>()
+            .mapNotNull { (it.classReference as? JKClassSymbol) }
+            .firstOrNull { it.kind == JKClass.ClassKind.CLASS }
+
+        if (superClassSymbol is JKUniverseClassSymbol) {
+            val superClass = recurse(superClassSymbol.target)
+            val superConstructor = context.symbolProvider.provideUniverseSymbol(
+                superClass.declarationList.single { it is JKKtConstructor && it.parameters.isEmpty() } as JKMethod
+            )
+            constructor.delegationCall = JKDelegationConstructorCallImpl(superConstructor, JKSuperExpressionImpl(), JKExpressionListImpl())
+        }
+
+        return recurse(element)
+    }
+
+    private val JKClassSymbol.kind
+        get() = when (this) {
+            is JKUniverseClassSymbol -> target.classKind
+            else -> null
+        }
+}
\ No newline at end of file