diff --git a/j2k/src/org/jetbrains/jet/j2k/ConstructorConverter.kt b/j2k/src/org/jetbrains/jet/j2k/ConstructorConverter.kt index ed0ddc59d95..230ac653562 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ConstructorConverter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ConstructorConverter.kt @@ -43,10 +43,10 @@ class ConstructorConverter(private val converter: Converter) { val member = expression.getReference()?.resolve() as? PsiMember if (member != null && !member.isConstructor() && - member.getContainingClass() == constructor.getContainingClass() && - !member.hasModifierProperty(PsiModifier.STATIC)) { + member.getContainingClass() == constructor.getContainingClass()) { val isNullable = member is PsiField && typeConverter.variableNullability(member).isNullable(converter.settings) - result = QualifiedExpression(tempValIdentifier(), Identifier(expression.getReferenceName()!!, isNullable).assignNoPrototype()) + val qualifier = if (member.hasModifierProperty(PsiModifier.STATIC)) constructor.declarationIdentifier() else tempValIdentifier() + result = QualifiedExpression(qualifier, Identifier(expression.getReferenceName()!!, isNullable).assignNoPrototype()) return } } @@ -61,7 +61,7 @@ class ConstructorConverter(private val converter: Converter) { typeParameterList.parameters, Nullability.NotNull, converter.settings).assignNoPrototype() - return FactoryFunction(annotations, modifiers, factoryFunctionType, params, typeParameterList, body) + return FactoryFunction(constructor.declarationIdentifier(), annotations, modifiers, factoryFunctionType, params, typeParameterList, body) } } @@ -176,12 +176,13 @@ class ConstructorConverter(private val converter: Converter) { assert(classBody.primaryConstructorSignature == null) val fieldsToInitialize = classBody.members.filterIsInstance(javaClass()).filter { it.isVal } - for (factoryFunction in classBody.factoryFunctions()) { + for (factoryFunction in classBody.factoryFunctions) { val body = factoryFunction.body!! // 2 cases: secondary constructor either calls another constructor or does not call any val newStatements = replaceConstructorCallInFactoryFunction(body, className) ?: insertCallToArtificialPrimary(body, className, fieldsToInitialize) factoryFunction.body = Block(newStatements, LBrace().assignNoPrototype(), RBrace().assignNoPrototype()).assignNoPrototype() + //TODO: no assignment here } val parameters = fieldsToInitialize.map { field -> @@ -189,15 +190,17 @@ class ConstructorConverter(private val converter: Converter) { Parameter(field.identifier, field.`type`, varValModifier, field.annotations, field.modifiers.filter { it in ACCESS_MODIFIERS }).assignPrototypesFrom(field) } - val modifiers = Modifiers(listOf(Modifier.PRIVATE)).assignNoPrototype() + val modifiers = Modifiers.Empty + //TODO: we can generate it private when secondary constructors are supported by Kotlin + //val modifiers = Modifiers(listOf(Modifier.PRIVATE)).assignNoPrototype() val parameterList = ParameterList(parameters).assignNoPrototype() val constructorSignature = PrimaryConstructorSignature(modifiers, parameterList).assignNoPrototype() val updatedMembers = classBody.members.filter { !fieldsToInitialize.contains(it) } - return ClassBody(constructorSignature, updatedMembers, classBody.classObjectMembers, classBody.lBrace, classBody.rBrace) + return ClassBody(constructorSignature, updatedMembers, classBody.classObjectMembers, classBody.factoryFunctions, classBody.lBrace, classBody.rBrace) } private fun replaceConstructorCallsInFactoryFunctions(classBody: ClassBody, className: String) { - for (factoryFunction in classBody.factoryFunctions()) { + for (factoryFunction in classBody.factoryFunctions) { val body = factoryFunction.body!! val statements = replaceConstructorCallInFactoryFunction(body, className) if (statements != null) { @@ -278,8 +281,6 @@ class ConstructorConverter(private val converter: Converter) { return statements } - private fun ClassBody.factoryFunctions() = classObjectMembers.filterIsInstance(javaClass()) - private val tempValName: String = "__" private fun tempValIdentifier(): Identifier = Identifier(tempValName, false).assignNoPrototype() } \ No newline at end of file diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index 686c1a14daf..f04f06dc9bc 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -125,6 +125,7 @@ public class Converter private(val project: Project, val settings: ConverterSett val members = ArrayList() val classObjectMembers = ArrayList() + val factoryFunctions = ArrayList() var primaryConstructorSignature: PrimaryConstructorSignature? = null for ((psiMember, member) in convertedMembers) { if (member is PrimaryConstructor) { @@ -135,8 +136,10 @@ public class Converter private(val project: Project, val settings: ConverterSett members.add(initializer) } } - else if (useClassObject && psiMember !is PsiClass && psiMember.hasModifierProperty(PsiModifier.STATIC) || - member is FactoryFunction) { + else if (member is FactoryFunction) { + factoryFunctions.add(member) + } + else if (useClassObject && psiMember !is PsiClass && psiMember.hasModifierProperty(PsiModifier.STATIC)) { classObjectMembers.add(member) } else { @@ -146,13 +149,12 @@ public class Converter private(val project: Project, val settings: ConverterSett val lBrace = LBrace().assignPrototype(psiClass.getLBrace()) val rBrace = RBrace().assignPrototype(psiClass.getRBrace()) - return ClassBody(primaryConstructorSignature, members, classObjectMembers, lBrace, rBrace) + return ClassBody(primaryConstructorSignature, members, classObjectMembers, factoryFunctions, lBrace, rBrace) } // do not convert private static methods into class object if possible private fun shouldGenerateClassObject(psiClass: PsiClass, convertedMembers: Map): Boolean { if (psiClass.isEnum()) return false - if (convertedMembers.values().any { it is FactoryFunction }) return true val members = convertedMembers.keySet().filter { !it.isConstructor() } val classObjectMembers = members.filter { it !is PsiClass && it.hasModifierProperty(PsiModifier.STATIC) } val nestedClasses = members.filterIsInstance(javaClass()).filter { it.hasModifierProperty(PsiModifier.STATIC) } diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt index a0e809f9b13..5a2a9e9f725 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt @@ -30,17 +30,22 @@ open class Class( ) : Member(annotations, modifiers) { override fun generateCode(builder: CodeBuilder) { + builder.append(body.factoryFunctions, "\n", "", "\n\n") + builder.append(annotations) .appendWithSpaceAfter(presentationModifiers()) .append(keyword) .append(" ") .append(name) .append(typeParameterList) + if (body.primaryConstructorSignature != null) { builder.append(body.primaryConstructorSignature) } + appendBaseTypes(builder) typeParameterList.appendWhere(builder) + body.append(builder) } diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/ClassBody.kt b/j2k/src/org/jetbrains/jet/j2k/ast/ClassBody.kt index eb6a4c16062..d91763afbf5 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/ClassBody.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/ClassBody.kt @@ -25,6 +25,7 @@ class ClassBody ( val primaryConstructorSignature: PrimaryConstructorSignature?, val members: List, val classObjectMembers: List, + val factoryFunctions: List, val lBrace: LBrace, val rBrace: RBrace) { diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt index dbccac34977..ec171121904 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt @@ -52,10 +52,11 @@ class PrimaryConstructorSignature(val modifiers: Modifiers, val parameterList: P } } -class FactoryFunction(annotations: Annotations, +class FactoryFunction(name: Identifier, + annotations: Annotations, modifiers: Modifiers, returnType: Type, parameterList: ParameterList, typeParameterList: TypeParameterList, block: Block) -: Function(Identifier("create").assignNoPrototype(), annotations, modifiers, returnType, typeParameterList, parameterList, block, false) \ No newline at end of file +: Function(name, annotations, modifiers, returnType, typeParameterList, parameterList, block, false) \ No newline at end of file diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt index 63804d3f685..b65c2ab88ac 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt @@ -31,12 +31,18 @@ class Enum( extendsTypes, baseClassParams, implementsTypes, body) { override fun generateCode(builder: CodeBuilder) { + builder.append(body.factoryFunctions, "\n", "", "\n\n") + builder append annotations appendWithSpaceAfter presentationModifiers() append "enum class " append name + if (body.primaryConstructorSignature != null) { builder.append(body.primaryConstructorSignature) } + builder append typeParameterList + appendBaseTypes(builder) + body.append(builder) } } \ No newline at end of file diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 5d78057af27..8be8382ac11 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -264,18 +264,6 @@ open class ExpressionVisitor(private val converter: Converter, private fun createNewClassExpression(expression: PsiNewExpression): Expression { val anonymousClass = expression.getAnonymousClass() val classReference = expression.getClassOrAnonymousClassReference() - var arguments = expression.getArgumentList()?.getExpressions() ?: array() - - val constructor = expression.resolveMethod() - if (constructor != null && converter.conversionScope.contains(constructor) && !constructor.isPrimaryConstructor()) { - //TODO: handle anonymous class! - // non-primary constructor converted to factory method in class object - val reference = expression.getClassReference() - val typeParameters = if (reference != null) typeConverter.convertTypes(reference.getTypeParameters()) else listOf() - return QualifiedExpression(Identifier(constructor.getName(), false).assignNoPrototype(), - MethodCallExpression.buildNotNull(null, "create", converter.convertExpressions(arguments), typeParameters).assignNoPrototype()) - } - return NewClassExpression(converter.convertElement(classReference), convertArguments(expression), converter.convertExpression(expression.getQualifier()), diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt b/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt index 9c61398b6d1..3b444edf8f4 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt @@ -94,10 +94,7 @@ abstract class AbstractJavaToKotlinConverterTest() : LightIdeaTestCase() { "using the first line of test data file") } - val reformatInFun = when (prefix) { - "element", "expression", "statement" -> true - else -> false - } + val reformatInFun = prefix in setOf("element", "expression", "statement") val actual = reformat(rawConverted, project, reformatInFun) val kotlinPath = javaPath.replace(".java", ".kt") diff --git a/j2k/tests/testData/ast/class/kt-639.kt b/j2k/tests/testData/ast/class/kt-639.kt index 4a34310adf7..c6c0e1703a3 100644 --- a/j2k/tests/testData/ast/class/kt-639.kt +++ b/j2k/tests/testData/ast/class/kt-639.kt @@ -2,23 +2,21 @@ package demo import java.util.HashMap -class Test private() { - class object { - fun create(): Test { - return Test() - } - fun create(s: String): Test { - return Test() - } - } +fun Test(): Test { + return Test() } +fun Test(s: String): Test { + return Test() +} + +class Test class User { fun main() { val m = HashMap(1) val m2 = HashMap(10) - val t1 = Test.create() - val t2 = Test.create("") + val t1 = Test() + val t2 = Test("") } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/comments/commentsForConstructors.kt b/j2k/tests/testData/ast/comments/commentsForConstructors.kt index d59c1250e69..734e30d3719 100644 --- a/j2k/tests/testData/ast/comments/commentsForConstructors.kt +++ b/j2k/tests/testData/ast/comments/commentsForConstructors.kt @@ -1,3 +1,8 @@ +// this is a secondary constructor +fun A(): A { + return A(1) +} // end of secondary constructor body + class A// this is a primary constructor (p: Int) { private val v: Int @@ -5,14 +10,6 @@ class A// this is a primary constructor { v = 1 } // end of primary constructor body - - class object { - - // this is a secondary constructor - fun create(): A { - return A(1) - } // end of secondary constructor body - } } class B// this constructor will disappear diff --git a/j2k/tests/testData/ast/constructors/allCallsPrimary.java b/j2k/tests/testData/ast/constructors/allCallsPrimary.java index 91b45345b1d..a74961b4ebb 100644 --- a/j2k/tests/testData/ast/constructors/allCallsPrimary.java +++ b/j2k/tests/testData/ast/constructors/allCallsPrimary.java @@ -1,4 +1,6 @@ //file +package pack + class C { C(int arg1, int arg2, int arg3) { } diff --git a/j2k/tests/testData/ast/constructors/allCallsPrimary.kt b/j2k/tests/testData/ast/constructors/allCallsPrimary.kt index e6ced935f21..76c130f5fc4 100644 --- a/j2k/tests/testData/ast/constructors/allCallsPrimary.kt +++ b/j2k/tests/testData/ast/constructors/allCallsPrimary.kt @@ -1,22 +1,22 @@ -class C(arg1: Int, arg2: Int, arg3: Int) { - class object { +package pack - fun create(arg1: Int, arg2: Int): C { - return C(arg1, arg2, 0) - } - fun create(arg1: Int): C { - return C(arg1, 0, 0) - } - } +fun C(arg1: Int, arg2: Int): C { + return C(arg1, arg2, 0) } +fun C(arg1: Int): C { + return C(arg1, 0, 0) +} + +class C(arg1: Int, arg2: Int, arg3: Int) + public class User { class object { public fun main() { val c1 = C(100, 100, 100) - val c2 = C.create(100, 100) - val c3 = C.create(100) + val c2 = C(100, 100) + val c3 = C(100) } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/allCallsPrimary2.kt b/j2k/tests/testData/ast/constructors/allCallsPrimary2.kt index f0ee3e1a303..397d3be0246 100644 --- a/j2k/tests/testData/ast/constructors/allCallsPrimary2.kt +++ b/j2k/tests/testData/ast/constructors/allCallsPrimary2.kt @@ -1,3 +1,17 @@ +fun C(arg1: Int, arg2: Int, arg3: Int): C { + val __ = C(arg1) + __.myArg2 = arg2 + __.myArg3 = arg3 + return __ +} + +fun C(arg1: Int, arg2: Int): C { + val __ = C(arg1) + __.myArg2 = arg2 + __.myArg3 = 0 + return __ +} + class C(val myArg1: Int) { var myArg2: Int = 0 var myArg3: Int = 0 @@ -6,30 +20,13 @@ class C(val myArg1: Int) { myArg2 = 0 myArg3 = 0 } - - class object { - - fun create(arg1: Int, arg2: Int, arg3: Int): C { - val __ = C(arg1) - __.myArg2 = arg2 - __.myArg3 = arg3 - return __ - } - - fun create(arg1: Int, arg2: Int): C { - val __ = C(arg1) - __.myArg2 = arg2 - __.myArg3 = 0 - return __ - } - } } public class User { class object { public fun main() { - val c1 = C.create(100, 100, 100) - val c2 = C.create(100, 100) + val c1 = C(100, 100, 100) + val c2 = C(100, 100) val c3 = C(100) } } diff --git a/j2k/tests/testData/ast/constructors/chain.kt b/j2k/tests/testData/ast/constructors/chain.kt index 73db6c12498..7989e566539 100644 --- a/j2k/tests/testData/ast/constructors/chain.kt +++ b/j2k/tests/testData/ast/constructors/chain.kt @@ -1,26 +1,23 @@ -class C(arg1: Int, arg2: Int, arg3: Int) { - class object { - - fun create(arg1: Int, arg2: Int): C { - val __ = C(arg1, arg2, 0) - System.out.println() - return __ - } - - fun create(arg1: Int): C { - val __ = C(arg1, 0) - System.out.println() - return __ - } - } +fun C(arg1: Int, arg2: Int): C { + val __ = C(arg1, arg2, 0) + System.out.println() + return __ } +fun C(arg1: Int): C { + val __ = C(arg1, 0) + System.out.println() + return __ +} + +class C(arg1: Int, arg2: Int, arg3: Int) + public class User { class object { public fun main() { val c1 = C(1, 2, 3) - val c2 = C.create(5, 6) - val c3 = C.create(7) + val c2 = C(5, 6) + val c3 = C(7) } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/genericIdentifier.kt b/j2k/tests/testData/ast/constructors/genericIdentifier.kt index 55266db039e..efc865c8815 100644 --- a/j2k/tests/testData/ast/constructors/genericIdentifier.kt +++ b/j2k/tests/testData/ast/constructors/genericIdentifier.kt @@ -1,36 +1,33 @@ -public class Identifier private(private val myName: T, private val myHasDollar: Boolean) { +public fun Identifier(name: T): Identifier { + return Identifier(name, false) +} + +public fun Identifier(name: T, isNullable: Boolean): Identifier { + val __ = Identifier(name, false) + __.myNullable = isNullable + return __ +} + +public fun Identifier(name: T, hasDollar: Boolean, isNullable: Boolean): Identifier { + val __ = Identifier(name, hasDollar) + __.myNullable = isNullable + return __ +} + +public class Identifier(private val myName: T, private val myHasDollar: Boolean) { private var myNullable = true public fun getName(): T { return myName } - - class object { - - public fun create(name: T): Identifier { - return Identifier(name, false) - } - - public fun create(name: T, isNullable: Boolean): Identifier { - val __ = Identifier(name, false) - __.myNullable = isNullable - return __ - } - - public fun create(name: T, hasDollar: Boolean, isNullable: Boolean): Identifier { - val __ = Identifier(name, hasDollar) - __.myNullable = isNullable - return __ - } - } } public class User { class object { public fun main() { - val i1 = Identifier.create("name", false, true) - val i2 = Identifier.create("name", false) - val i3 = Identifier.create("name") + val i1 = Identifier("name", false, true) + val i2 = Identifier("name", false) + val i3 = Identifier("name") } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/identifier.kt b/j2k/tests/testData/ast/constructors/identifier.kt index a7144fa3d94..ec47a181791 100644 --- a/j2k/tests/testData/ast/constructors/identifier.kt +++ b/j2k/tests/testData/ast/constructors/identifier.kt @@ -1,36 +1,33 @@ -public class Identifier private(private val myName: String, private val myHasDollar: Boolean) { +public fun Identifier(name: String): Identifier { + return Identifier(name, false) +} + +public fun Identifier(name: String, isNullable: Boolean): Identifier { + val __ = Identifier(name, false) + __.myNullable = isNullable + return __ +} + +public fun Identifier(name: String, hasDollar: Boolean, isNullable: Boolean): Identifier { + val __ = Identifier(name, hasDollar) + __.myNullable = isNullable + return __ +} + +public class Identifier(private val myName: String, private val myHasDollar: Boolean) { private var myNullable = true public fun getName(): String { return myName } - - class object { - - public fun create(name: String): Identifier { - return Identifier(name, false) - } - - public fun create(name: String, isNullable: Boolean): Identifier { - val __ = Identifier(name, false) - __.myNullable = isNullable - return __ - } - - public fun create(name: String, hasDollar: Boolean, isNullable: Boolean): Identifier { - val __ = Identifier(name, hasDollar) - __.myNullable = isNullable - return __ - } - } } public class User { class object { public fun main() { - val i1 = Identifier.create("name", false, true) - val i2 = Identifier.create("name", false) - val i3 = Identifier.create("name") + val i1 = Identifier("name", false, true) + val i2 = Identifier("name", false) + val i3 = Identifier("name") } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt b/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt index 0cba1ae34c3..734a8b3a98e 100644 --- a/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt +++ b/j2k/tests/testData/ast/constructors/methodCallInFactoryFun.kt @@ -1,18 +1,15 @@ +fun C(arg1: Int, arg2: Int, other: C): C { + val __ = C(arg1, arg2, 0) + System.out.println(__.foo(1) + __.foo(2) + other.foo(3) + C.staticFoo(4) + C.staticFoo(5)) + return __ +} + class C(private val arg1: Int, private val arg2: Int, private val arg3: Int) { fun foo(p: Int): Int { return p } - - class object { - private fun staticFoo(p: Int): Int { - return p - } - - fun create(arg1: Int, arg2: Int, other: C): C { - val __ = C(arg1, arg2, 0) - System.out.println(__.foo(1) + __.foo(2) + other.foo(3) + staticFoo(4) + C.staticFoo(5)) - return __ - } + private fun staticFoo(p: Int): Int { + return p } -} \ No newline at end of file +} diff --git a/j2k/tests/testData/ast/constructors/noPrimary.kt b/j2k/tests/testData/ast/constructors/noPrimary.kt index d597d5cbd43..bb2091236c1 100644 --- a/j2k/tests/testData/ast/constructors/noPrimary.kt +++ b/j2k/tests/testData/ast/constructors/noPrimary.kt @@ -1,29 +1,27 @@ -class C private() { - class object { - fun create(arg1: Int, arg2: Int, arg3: Int): C { - return C() - } - - fun create(arg1: Int, arg2: Int): C { - val __ = C(arg1, arg2, 0) - System.out.println() - return __ - } - - fun create(arg: Int): C { - val __ = C() - System.out.println(arg) - return __ - } - } +fun C(arg1: Int, arg2: Int, arg3: Int): C { + return C() } +fun C(arg1: Int, arg2: Int): C { + val __ = C(arg1, arg2, 0) + System.out.println() + return __ +} + +fun C(arg: Int): C { + val __ = C() + System.out.println(arg) + return __ +} + +class C + public class User { class object { public fun main() { - val c1 = C.create(1, 2, 3) - val c2 = C.create(5, 6) - val c3 = C.create(7) + val c1 = C(1, 2, 3) + val c2 = C(5, 6) + val c3 = C(7) } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/parameterModification.java b/j2k/tests/testData/ast/constructors/parameterModification.java index 25c4ea2d9bc..7570b83cd3f 100644 --- a/j2k/tests/testData/ast/constructors/parameterModification.java +++ b/j2k/tests/testData/ast/constructors/parameterModification.java @@ -1,6 +1,6 @@ //file class C { - private val field; + private int field; C(int arg1, int arg2, int arg3) { arg1++; diff --git a/j2k/tests/testData/ast/constructors/parameterModification.kt b/j2k/tests/testData/ast/constructors/parameterModification.kt index c02ef0d78d0..a492e796456 100644 --- a/j2k/tests/testData/ast/constructors/parameterModification.kt +++ b/j2k/tests/testData/ast/constructors/parameterModification.kt @@ -1,5 +1,16 @@ +fun C(arg1: Int, arg2: Int): C { + var arg2 = arg2 + val __ = C(arg1, arg2, 0) + arg2++ + return __ +} + +fun C(arg1: Int): C { + return C(arg1, 0, 0) +} + class C(arg1: Int, arg2: Int, arg3: Int) { - private val field: `val` + private val field: Int { var arg1 = arg1 @@ -9,28 +20,14 @@ class C(arg1: Int, arg2: Int, arg3: Int) { field = arg3 arg3++ } - - class object { - - fun create(arg1: Int, arg2: Int): C { - var arg2 = arg2 - val __ = C(arg1, arg2, 0) - arg2++ - return __ - } - - fun create(arg1: Int): C { - return C(arg1, 0, 0) - } - } } public class User { class object { public fun main() { val c1 = C(100, 100, 100) - val c2 = C.create(100, 100) - val c3 = C.create(100) + val c2 = C(100, 100) + val c3 = C(100) } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/privateConstructors.kt b/j2k/tests/testData/ast/constructors/privateConstructors.kt index ca99c27862e..9286fa57d58 100644 --- a/j2k/tests/testData/ast/constructors/privateConstructors.kt +++ b/j2k/tests/testData/ast/constructors/privateConstructors.kt @@ -1,12 +1,9 @@ -class C private(arg1: Int, arg2: Int, arg3: Int) { - class object { - - private fun create(arg1: Int, arg2: Int): C { - return C(arg1, arg2, 0) - } - - public fun create(arg1: Int): C { - return C(arg1, 0, 0) - } - } +private fun C(arg1: Int, arg2: Int): C { + return C(arg1, arg2, 0) } + +public fun C(arg1: Int): C { + return C(arg1, 0, 0) +} + +class C private(arg1: Int, arg2: Int, arg3: Int) diff --git a/j2k/tests/testData/ast/constructors/qualifiedRefInFactoryFun.kt b/j2k/tests/testData/ast/constructors/qualifiedRefInFactoryFun.kt index 1de8e8850ba..ac9346c6e84 100644 --- a/j2k/tests/testData/ast/constructors/qualifiedRefInFactoryFun.kt +++ b/j2k/tests/testData/ast/constructors/qualifiedRefInFactoryFun.kt @@ -1,17 +1,14 @@ -class C(private val arg1: Int, private val arg2: Int, private val arg3: Int) { - class object { - - fun create(arg1: Int, arg2: Int, other: C): C { - val __ = C(arg1, arg2, 0) - System.out.println(__.arg1 + other.arg2) - return __ - } - } +fun C(arg1: Int, arg2: Int, other: C): C { + val __ = C(arg1, arg2, 0) + System.out.println(__.arg1 + other.arg2) + return __ } +class C(private val arg1: Int, private val arg2: Int, private val arg3: Int) + class User { fun foo() { val c1 = C(100, 100, 100) - val c2 = C.create(100, 100, c1) + val c2 = C(100, 100, c1) } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/staticFieldRefInFactoryFun.kt b/j2k/tests/testData/ast/constructors/staticFieldRefInFactoryFun.kt index a772e96c17d..3e5f305fbfa 100644 --- a/j2k/tests/testData/ast/constructors/staticFieldRefInFactoryFun.kt +++ b/j2k/tests/testData/ast/constructors/staticFieldRefInFactoryFun.kt @@ -1,12 +1,12 @@ +fun C(p: Int): C { + val __ = C() + System.out.println(C.staticField1 + C.staticField2) + return __ +} + class C { class object { private val staticField1 = 0 private val staticField2 = 0 - - fun create(p: Int): C { - val __ = C() - System.out.println(staticField1 + C.staticField2) - return __ - } } -} \ No newline at end of file +} diff --git a/j2k/tests/testData/ast/constructors/withManyDefaultParams.kt b/j2k/tests/testData/ast/constructors/withManyDefaultParams.kt index 7a12d708661..7c3912f6f7b 100644 --- a/j2k/tests/testData/ast/constructors/withManyDefaultParams.kt +++ b/j2k/tests/testData/ast/constructors/withManyDefaultParams.kt @@ -1,4 +1,12 @@ -public class Test private(private val myName: String) { +public fun Test(): Test { + return Test(null) +} + +public fun Test(name: String): Test { + return Test(Test.foo(name)) +} + +public class Test(private val myName: String) { var a: Boolean = false var b: Double = 0.toDouble() var c: Float = 0.toFloat() @@ -9,14 +17,6 @@ public class Test private(private val myName: String) { class object { - public fun create(): Test { - return Test(null) - } - - public fun create(name: String): Test { - return Test(foo(name)) - } - fun foo(n: String): String { return "" } @@ -26,7 +26,7 @@ public class Test private(private val myName: String) { public class User { class object { public fun main() { - val t = Test.create("name") + val t = Test("name") } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/issues/kt-638.kt b/j2k/tests/testData/ast/issues/kt-638.kt index 9e08fbd3e6f..0a1e2e8c56d 100644 --- a/j2k/tests/testData/ast/issues/kt-638.kt +++ b/j2k/tests/testData/ast/issues/kt-638.kt @@ -1,36 +1,33 @@ -public class Identifier private(private val myName: T, private val myHasDollar: Boolean) { +public fun Identifier(name: T): Identifier { + return Identifier(name, false) +} + +public fun Identifier(name: T, isNullable: Boolean): Identifier { + val __ = Identifier(name, false) + __.myNullable = isNullable + return __ +} + +public fun Identifier(name: T, hasDollar: Boolean, isNullable: Boolean): Identifier { + val __ = Identifier(name, hasDollar) + __.myNullable = isNullable + return __ +} + +public class Identifier(private val myName: T, private val myHasDollar: Boolean) { private var myNullable = true public fun getName(): T { return myName } - - class object { - - public fun create(name: T): Identifier { - return Identifier(name, false) - } - - public fun create(name: T, isNullable: Boolean): Identifier { - val __ = Identifier(name, false) - __.myNullable = isNullable - return __ - } - - public fun create(name: T, hasDollar: Boolean, isNullable: Boolean): Identifier { - val __ = Identifier(name, hasDollar) - __.myNullable = isNullable - return __ - } - } } public class User { class object { public fun main(args: Array) { - val i1 = Identifier.create("name", false, true) - val i2 = Identifier.create("name", false) - val i3 = Identifier.create("name") + val i1 = Identifier("name", false, true) + val i2 = Identifier("name", false) + val i3 = Identifier("name") } } }