Java to Kotlin converter: do not generate redundant parenthesis for empty constructor parameters

This commit is contained in:
Valentin Kipyatkov
2014-06-25 18:21:15 +04:00
parent 947bf3c0ed
commit 5a5e553367
207 changed files with 266 additions and 268 deletions
@@ -39,9 +39,6 @@ open class Class(
if (body.primaryConstructorSignature != null) { if (body.primaryConstructorSignature != null) {
builder.append(body.primaryConstructorSignature) builder.append(body.primaryConstructorSignature)
} }
else if (this !is Trait) { //TODO: drop this
builder.append("()")
}
appendBaseTypes(builder) appendBaseTypes(builder)
typeParameterList.appendWhere(builder) typeParameterList.appendWhere(builder)
body.append(builder, this) body.append(builder, this)
@@ -55,6 +55,7 @@ class PrimaryConstructor(converter: Converter,
class PrimaryConstructorSignature(val modifiers: Modifiers, val parameterList: ParameterList) : Element() { class PrimaryConstructorSignature(val modifiers: Modifiers, val parameterList: ParameterList) : Element() {
override fun generateCode(builder: CodeBuilder) { override fun generateCode(builder: CodeBuilder) {
val accessModifier = modifiers.filter { it in ACCESS_MODIFIERS && it != Modifier.PUBLIC } val accessModifier = modifiers.filter { it in ACCESS_MODIFIERS && it != Modifier.PUBLIC }
if (accessModifier.isEmpty && parameterList.parameters.isEmpty()) return
if (!accessModifier.isEmpty) { if (!accessModifier.isEmpty) {
builder append " " append accessModifier builder append " " append accessModifier
} }
@@ -135,7 +135,7 @@ abstract class AbstractJavaToKotlinConverterTest() : LightIdeaTestCase() {
} }
private fun methodToKotlin(text: String, settings: ConverterSettings, project: Project): String { private fun methodToKotlin(text: String, settings: ConverterSettings, project: Project): String {
val result = fileToKotlin("final class C {" + text + "}", settings, project).replaceAll("class C\\(\\) \\{", "") val result = fileToKotlin("final class C {" + text + "}", settings, project).replaceAll("class C \\{", "")
return result.substring(0, (result.lastIndexOf("}"))).trim() return result.substring(0, (result.lastIndexOf("}"))).trim()
} }
@@ -8,7 +8,7 @@ Anon5(1)
Anon6(array("x", "y")) Anon6(array("x", "y"))
Anon7(javaClass<String>(), javaClass<StringBuilder>()) Anon7(javaClass<String>(), javaClass<StringBuilder>())
Anon8(classes = *array(javaClass<String>(), javaClass<StringBuilder>())) Anon8(classes = *array(javaClass<String>(), javaClass<StringBuilder>()))
class C() { class C {
Anon5(1) deprecated("") private val field1 = 0 Anon5(1) deprecated("") private val field1 = 0
Anon5(1) Anon5(1)
@@ -2,17 +2,17 @@
// !specifyLocalVariableTypeByDefault: true // !specifyLocalVariableTypeByDefault: true
package test package test
class Foo() { class Foo {
fun execute() { fun execute() {
} }
} }
class Bar() { class Bar {
var fooNotNull = Foo() var fooNotNull = Foo()
var fooNullable: Foo? = null var fooNullable: Foo? = null
} }
class Test() { class Test {
public fun test(barNotNull: Bar, barNullable: Bar?) { public fun test(barNotNull: Bar, barNullable: Bar?) {
barNotNull.fooNotNull.execute() barNotNull.fooNotNull.execute()
barNotNull.fooNullable!!.execute() barNotNull.fooNullable!!.execute()
@@ -1,4 +1,4 @@
class Test() { class Test {
var str: String = 0 var str: String = 0
{ {
str = "Ola" str = "Ola"
@@ -1,4 +1,4 @@
class Test() { class Test {
var str: String = 0 var str: String = 0
class object { class object {
@@ -2,7 +2,7 @@
// !specifyLocalVariableTypeByDefault: true // !specifyLocalVariableTypeByDefault: true
import java.util.BitSet import java.util.BitSet
class Foo() { class Foo {
fun foo(o: BitSet?) { fun foo(o: BitSet?) {
val o2: BitSet? = o val o2: BitSet? = o
var foo: Int = 0 var foo: Int = 0
@@ -1,6 +1,6 @@
import java.util.BitSet import java.util.BitSet
class Foo() { class Foo {
fun foo(o: BitSet) { fun foo(o: BitSet) {
val o2 = o val o2 = o
var foo = 0 var foo = 0
+1 -1
View File
@@ -1,6 +1,6 @@
import java.util.ArrayList import java.util.ArrayList
class Boxing() { class Boxing {
fun test() { fun test() {
var i: Int? = 0 var i: Int? = 0
val n = 0.0.toFloat() val n = 0.0.toFloat()
+1 -1
View File
@@ -1,6 +1,6 @@
package demo package demo
class Test() { class Test {
fun test() { fun test() {
val i = Integer.valueOf(100) val i = Integer.valueOf(100)
val s = 3 val s = 3
@@ -1,10 +1,10 @@
class Library() { class Library {
class object { class object {
val ourOut: java.io.PrintStream = 0 val ourOut: java.io.PrintStream = 0
} }
} }
class User() { class User {
fun main() { fun main() {
Library.ourOut.print() Library.ourOut.print()
} }
@@ -1,4 +1,4 @@
class Library() { class Library {
class object { class object {
fun call() { fun call() {
} }
@@ -9,7 +9,7 @@ class Library() {
} }
} }
class User() { class User {
fun main() { fun main() {
Library.call() Library.call()
Library.getString().isEmpty() Library.getString().isEmpty()
@@ -1,6 +1,6 @@
// !forceNotNullTypes: false // !forceNotNullTypes: false
// !specifyLocalVariableTypeByDefault: true // !specifyLocalVariableTypeByDefault: true
class Library() { class Library {
fun call() { fun call() {
} }
@@ -9,7 +9,7 @@ class Library() {
} }
} }
class User() { class User {
fun main() { fun main() {
val lib: Library = Library() val lib: Library = Library()
lib.call() lib.call()
@@ -1,4 +1,4 @@
class Library() { class Library {
fun call() { fun call() {
} }
@@ -7,7 +7,7 @@ class Library() {
} }
} }
class User() { class User {
fun main() { fun main() {
val lib = Library() val lib = Library()
lib.call() lib.call()
@@ -1,8 +1,8 @@
class Library() { class Library {
public val myString: String = 0 public val myString: String = 0
} }
class User() { class User {
fun main() { fun main() {
Library.myString.isEmpty() Library.myString.isEmpty()
} }
@@ -1,6 +1,6 @@
package test package test
public class Short() { public class Short {
class object { class object {
public fun valueOf(value: String): Short { public fun valueOf(value: String): Short {
return Short() return Short()
@@ -8,7 +8,7 @@ public class Short() {
} }
} }
class Test() { class Test {
class object { class object {
public fun test() { public fun test() {
test.Short.valueOf("1") test.Short.valueOf("1")
@@ -1,4 +1,4 @@
abstract class A() { abstract class A {
abstract fun callme() abstract fun callme()
fun callmetoo() { fun callmetoo() {
@@ -1,4 +1,4 @@
abstract class Shape() { abstract class Shape {
public var color: String = 0 public var color: String = 0
public fun setColor(c: String) { public fun setColor(c: String) {
color = c color = c
+1 -1
View File
@@ -1 +1 @@
class Test() class Test
@@ -1,4 +1,4 @@
class T() { class T {
fun main() { fun main() {
} }
fun i(): Int { fun i(): Int {
@@ -1,4 +1,4 @@
class T() { class T {
var a = "abc" var a = "abc"
var b = 10 var b = 10
} }
@@ -1,4 +1,4 @@
class T() { class T {
var a: String = 0 var a: String = 0
var b: String = 0 var b: String = 0
var c = "abc" var c = "abc"
+1 -1
View File
@@ -1 +1 @@
class A() class A
@@ -1 +1 @@
class A() : Base(), I class A : Base(), I
@@ -1 +1 @@
class A() : Base(), I0, I1, I2 class A : Base(), I0, I1, I2
+1 -1
View File
@@ -1 +1 @@
class Test() class Test
+1 -1
View File
@@ -1 +1 @@
class Entry<K, V>() class Entry<K, V>
@@ -1,3 +1,3 @@
trait A { trait A {
public class B() public class B
} }
@@ -1,3 +1,3 @@
class A() { class A {
inner class B() inner class B
} }
+1 -1
View File
@@ -1,4 +1,4 @@
class A() { class A {
enum class E { enum class E {
A A
B B
@@ -1,3 +1,3 @@
class A() { class A {
trait I trait I
} }
@@ -1,3 +1,3 @@
class S() { class S {
class Inner() class Inner
} }
@@ -1 +1 @@
class Test() class Test
+1 -1
View File
@@ -15,7 +15,7 @@ class Test private() {
} }
} }
class User() { class User {
fun main() { fun main() {
val m = HashMap(1) val m = HashMap(1)
val m2 = HashMap(10) val m2 = HashMap(10)
@@ -1,4 +1,4 @@
class S() { class S {
fun sB(): Boolean { fun sB(): Boolean {
return true return true
} }
@@ -1,4 +1,4 @@
class S() { class S {
class object { class object {
fun staticF(): Boolean { fun staticF(): Boolean {
return true return true
@@ -1,4 +1,4 @@
class S() { class S {
fun sB(): Boolean { fun sB(): Boolean {
return true return true
} }
+1 -1
View File
@@ -1 +1 @@
private class Test() private class Test
+1 -1
View File
@@ -1,4 +1,4 @@
public class MyClass() { public class MyClass {
private fun init(arg1: Int, arg2: Int, arg3: Int) { private fun init(arg1: Int, arg2: Int, arg3: Int) {
} }
} }
@@ -1 +1 @@
protected class Test() protected class Test
+1 -1
View File
@@ -1 +1 @@
public class Test() public class Test
@@ -1 +1 @@
class A() : Base() class A : Base()
@@ -1,4 +1,4 @@
class S() { class S {
class object { class object {
fun sB(): Boolean { fun sB(): Boolean {
return true return true
+1 -1
View File
@@ -8,7 +8,7 @@ import java.util.ArrayList
// we need ArrayList // we need ArrayList
// let's declare a class: // let's declare a class:
class A /* just a sample name*/() : Runnable /* let's implement Runnable */ { class A /* just a sample name*/ : Runnable /* let's implement Runnable */ {
fun foo/* again a sample name */(p: Int /* parameter p */, c: Char /* parameter c */) { fun foo/* again a sample name */(p: Int /* parameter p */, c: Char /* parameter c */) {
// let's print something: // let's print something:
System.out.println("1") // print 1 System.out.println("1") // print 1
+1 -1
View File
@@ -1,6 +1,6 @@
package foo package foo
class A() { class A {
fun /* nothing to return */ foo(/* no parameters at all */) { fun /* nothing to return */ foo(/* no parameters at all */) {
// let declare a variable // let declare a variable
// with 2 comments before // with 2 comments before
@@ -1,3 +1,3 @@
class A() { class A {
private val isOpen = true // ideally should be atomic boolean private val isOpen = true // ideally should be atomic boolean
} }
@@ -13,7 +13,7 @@ class C(arg1: Int, arg2: Int, arg3: Int) {
} }
} }
public class User() { public class User {
class object { class object {
public fun main() { public fun main() {
val c1 = C(100, 100, 100) val c1 = C(100, 100, 100)
@@ -25,7 +25,7 @@ class C(val myArg1: Int) {
} }
} }
public class User() { public class User {
class object { class object {
public fun main() { public fun main() {
val c1 = C.create(100, 100, 100) val c1 = C.create(100, 100, 100)
@@ -21,7 +21,7 @@ class Customer(public val _firstName: String, public val _lastName: String) {
} }
} }
class CustomerBuilder() { class CustomerBuilder {
public var _firstName: String = "Homer" public var _firstName: String = "Homer"
public var _lastName: String = "Simpson" public var _lastName: String = "Simpson"
@@ -40,7 +40,7 @@ class CustomerBuilder() {
} }
} }
public class User() { public class User {
class object { class object {
public fun main() { public fun main() {
val customer = CustomerBuilder().WithFirstName("Homer").WithLastName("Simpson").Build() val customer = CustomerBuilder().WithFirstName("Homer").WithLastName("Simpson").Build()
@@ -26,7 +26,7 @@ public class Identifier<T> private(private val myName: T, private val myHasDolla
} }
} }
public class User() { public class User {
class object { class object {
public fun main() { public fun main() {
val i1 = Identifier.create<String>("name", false, true) val i1 = Identifier.create<String>("name", false, true)
@@ -26,7 +26,7 @@ public class Identifier private(private val myName: String, private val myHasDol
} }
} }
public class User() { public class User {
class object { class object {
public fun main() { public fun main() {
val i1 = Identifier.create("name", false, true) val i1 = Identifier.create("name", false, true)
@@ -26,7 +26,7 @@ class C(arg1: Int, arg2: Int, arg3: Int) {
} }
} }
public class User() { public class User {
class object { class object {
public fun main() { public fun main() {
val c1 = C(100, 100, 100) val c1 = C(100, 100, 100)
@@ -17,7 +17,7 @@ public class Test private(private val myName: String, var a: Boolean, var b: Dou
} }
} }
public class User() { public class User {
class object { class object {
public fun main() { public fun main() {
val t = Test.create("name") val t = Test.create("name")
+1 -1
View File
@@ -1,6 +1,6 @@
trait I trait I
class C() { class C {
fun foo1(i1: I, i2: I): Boolean { fun foo1(i1: I, i2: I): Boolean {
return i1 == i2 return i1 == i2
} }
+1 -1
View File
@@ -1,4 +1,4 @@
class C() { class C {
fun foo1(s1: String, s2: String): Boolean { fun foo1(s1: String, s2: String): Boolean {
return s1 == s2 return s1 == s2
} }
+1 -1
View File
@@ -1,4 +1,4 @@
class C() { class C {
public fun equals(c: C): Boolean { public fun equals(c: C): Boolean {
return false return false
} }
+1 -1
View File
@@ -1,4 +1,4 @@
class C() { class C {
fun foo(s1: String, s2: String, s3: String, s4: String): Boolean { fun foo(s1: String, s2: String, s3: String, s4: String): Boolean {
return s1 == s2 == (s3 != s4) return s1 == s2 == (s3 != s4)
} }
@@ -1,7 +1,7 @@
class Base() { class Base {
private val myFirst: String = 0 private val myFirst: String = 0
} }
class Child() : Base() { class Child : Base() {
private val mySecond: String = 0 private val mySecond: String = 0
} }
+1 -1
View File
@@ -1,4 +1,4 @@
class A() { class A {
private var i: Int? = getByte().toInt() private var i: Int? = getByte().toInt()
fun foo() { fun foo() {
@@ -1,3 +1,3 @@
class C() { class C {
var f: Foo = 0 var f: Foo = 0
} }
+1 -1
View File
@@ -1,3 +1,3 @@
class C() { class C {
private val f: Foo = 0 private val f: Foo = 0
} }
@@ -1,3 +1,3 @@
class C() { class C {
protected var f: Foo = 0 protected var f: Foo = 0
} }
+1 -1
View File
@@ -1,3 +1,3 @@
class C() { class C {
public var f: Foo = 0 public var f: Foo = 0
} }
+1 -1
View File
@@ -1,7 +1,7 @@
import java.util.* import java.util.*
import kotlin.List import kotlin.List
class A() { class A {
private val field1 = ArrayList<String>() private val field1 = ArrayList<String>()
val field2: List<String> = ArrayList<String>() val field2: List<String> = ArrayList<String>()
public val field3: Int = 0 public val field3: Int = 0
+1 -1
View File
@@ -1,3 +1,3 @@
class C() { class C {
val f = Foo(1, 2) val f = Foo(1, 2)
} }
+1 -1
View File
@@ -1,3 +1,3 @@
class C() { class C {
var f = Foo(1, 2) var f = Foo(1, 2)
} }
@@ -1,3 +1,3 @@
class C() { class C {
var f: Foo = 0 var f: Foo = 0
} }
@@ -1,4 +1,4 @@
class F() { class F {
fun f1() { fun f1() {
} }
@@ -1,4 +1,4 @@
class F() { class F {
//c1 //c1
@@ -1,4 +1,4 @@
class F() { class F {
//c3 //c3
@@ -1,4 +1,4 @@
class F() { class F {
class object { class object {
//c1 //c1
@@ -1,6 +1,6 @@
package test package test
class Test() : Base() { class Test : Base() {
override fun hashCode(): Int { override fun hashCode(): Int {
return super.hashCode() return super.hashCode()
} }
@@ -24,7 +24,7 @@ class Test() : Base() {
} }
} }
class Base() { class Base {
override fun hashCode(): Int { override fun hashCode(): Int {
return super.hashCode() return super.hashCode()
} }
@@ -1,6 +1,6 @@
package demo package demo
class Final() { class Final {
fun test() { fun test() {
} }
} }
+2 -2
View File
@@ -1,8 +1,8 @@
class A() { class A {
fun a() { fun a() {
} }
} }
class B() : A() { class B : A() {
override fun a() { override fun a() {
} }
} }
@@ -1,14 +1,14 @@
class A() { class A {
fun foo() { fun foo() {
} }
} }
class B() : A() { class B : A() {
override fun foo() { override fun foo() {
} }
} }
class C() : B() { class C : B() {
override fun foo() { override fun foo() {
} }
} }
@@ -1,4 +1,4 @@
class X() { class X {
override fun hashCode(): Int { override fun hashCode(): Int {
return super.hashCode() return super.hashCode()
} }
@@ -17,7 +17,7 @@ class X() {
} }
} }
class Y() : Thread() { class Y : Thread() {
throws(javaClass<CloneNotSupportedException>()) throws(javaClass<CloneNotSupportedException>())
override fun clone(): Any { override fun clone(): Any {
return super.clone() return super.clone()
@@ -1,6 +1,6 @@
class Base() class Base
class X() : Base() { class X : Base() {
override fun hashCode(): Int { override fun hashCode(): Int {
return super.hashCode() return super.hashCode()
} }
@@ -1,10 +1,10 @@
class Base() { class Base {
override fun equals(o: Any?): Boolean { override fun equals(o: Any?): Boolean {
return super.equals(o) return super.equals(o)
} }
} }
class X() : Base() { class X : Base() {
override fun equals(o: Any?): Boolean { override fun equals(o: Any?): Boolean {
return super.equals(o) return super.equals(o)
} }
+1 -1
View File
@@ -1,6 +1,6 @@
package demo package demo
class Test() { class Test {
fun test(vararg args: Any) { fun test(vararg args: Any) {
var args = args var args = args
args = array<Int>(1, 2, 3) args = array<Int>(1, 2, 3)
@@ -1,6 +1,6 @@
class `$$$$$`() class `$$$$$`
class `$`() class `$`
class `$$`(val `$$$`: `$$$$$`) : `$`() { class `$$`(val `$$$`: `$$$$$`) : `$`() {
@@ -2,4 +2,4 @@ package test
import `as`.`type`.`val`.`var`.`fun`.`is`.`in`.`object`.`when`.`trait`.`This` import `as`.`type`.`val`.`var`.`fun`.`is`.`in`.`object`.`when`.`trait`.`This`
class Test() class Test
@@ -2,4 +2,4 @@ package org.jetbrains.jet.j2k
import org.jetbrains.annotations.* import org.jetbrains.annotations.*
public class Converter() public class Converter
@@ -1,3 +1,3 @@
package org.jetbrains.jet.j2k package org.jetbrains.jet.j2k
public class Converter() public class Converter
@@ -1,3 +1,3 @@
class Base() class Base
class One() : Base() class One : Base()
+1 -1
View File
@@ -1,4 +1,4 @@
class Test() { class Test {
class object { class object {
public fun foo(args: Array<String>): Int { public fun foo(args: Array<String>): Int {
return args.size return args.size
+1 -1
View File
@@ -9,7 +9,7 @@ This is a block comment
//one line comment of class //one line comment of class
//another one //another one
/*another doc*/ /*another doc*/
class C() { class C {
// This is a class comment // This is a class comment
/** /**
@@ -1,6 +1,6 @@
class Outer() { class Outer {
public class Nested() { public class Nested {
public fun foo() { public fun foo() {
o = null o = null
} }
+1 -1
View File
@@ -2,7 +2,7 @@ import java.util.HashMap
class G<T : String>(t: T) class G<T : String>(t: T)
public class Java() { public class Java {
fun test() { fun test() {
val m = HashMap() val m = HashMap()
m.put(1, 1) m.put(1, 1)
+1 -1
View File
@@ -1,6 +1,6 @@
package demo package demo
class Test() { class Test {
class object { class object {
fun subListRangeCheck(fromIndex: Int, toIndex: Int, size: Int) { fun subListRangeCheck(fromIndex: Int, toIndex: Int, size: Int) {
if (fromIndex < 0) if (fromIndex < 0)
@@ -1,6 +1,6 @@
package demo package demo
class Test() { class Test {
fun putInt(i: Int?) { fun putInt(i: Int?) {
} }
@@ -1,6 +1,6 @@
package demo package demo
class Test() { class Test {
fun putInt(i: Int?) { fun putInt(i: Int?) {
} }
+1 -1
View File
@@ -1,6 +1,6 @@
package demo package demo
class Test() { class Test {
fun putInt(i: Int) { fun putInt(i: Int) {
} }
+1 -1
View File
@@ -26,7 +26,7 @@ public class Identifier<T> private(private val myName: T, private val myHasDolla
} }
} }
public class User() { public class User {
class object { class object {
public fun main(args: Array<String>) { public fun main(args: Array<String>) {
val i1 = Identifier.create<String>("name", false, true) val i1 = Identifier.create<String>("name", false, true)
+2 -2
View File
@@ -1,6 +1,6 @@
package test package test
class Base() { class Base {
override fun hashCode(): Int { override fun hashCode(): Int {
return super.hashCode() return super.hashCode()
} }
@@ -14,7 +14,7 @@ class Base() {
} }
} }
class Child() : Base() { class Child : Base() {
override fun hashCode(): Int { override fun hashCode(): Int {
return super.hashCode() return super.hashCode()
} }
@@ -1,6 +1,6 @@
package demo package demo
class Test() { class Test {
fun getInteger(i: Int?): Int? { fun getInteger(i: Int?): Int? {
return i return i
} }
+1 -1
View File
@@ -1,4 +1,4 @@
class Test() { class Test {
fun getInt(): Int { fun getInt(): Int {
val b = 10 val b = 10
return b.toInt() return b.toInt()
@@ -1,10 +1,10 @@
package demo package demo
class Container() { class Container {
var myString = "1" var myString = "1"
} }
class One() { class One {
class object { class object {
var myContainer = Container() var myContainer = Container()
} }
@@ -12,7 +12,7 @@ class One() {
class StringContainer(s: String) class StringContainer(s: String)
class Test() { class Test {
fun putString(s: String) { fun putString(s: String) {
} }
fun test() { fun test() {
+3 -3
View File
@@ -1,10 +1,10 @@
package demo package demo
class Container() { class Container {
var myInt = 1 var myInt = 1
} }
class One() { class One {
class object { class object {
var myContainer = Container() var myContainer = Container()
} }
@@ -12,7 +12,7 @@ class One() {
class IntContainer(i: Int) class IntContainer(i: Int)
class Test() { class Test {
fun putInt(i: Int) { fun putInt(i: Int) {
} }
fun test() { fun test() {
@@ -1,15 +1,15 @@
package demo package demo
class Container() { class Container {
var myInt = 1 var myInt = 1
} }
class One() { class One {
class object { class object {
var myContainer = Container() var myContainer = Container()
} }
} }
class Test() { class Test {
var b = One.myContainer.myInt.toByte() var b = One.myContainer.myInt.toByte()
} }

Some files were not shown because too many files have changed in this diff Show More