Java to Kotlin converter: no explicit type for private and internal fields when possible
This commit is contained in:
@@ -271,7 +271,7 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
|||||||
return Initializer(convertBlock(initializer.getBody()), convertModifiers(initializer)).assignPrototype(initializer)
|
return Initializer(convertBlock(initializer.getBody()), convertModifiers(initializer)).assignPrototype(initializer)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun convertField(field: PsiField): Field {
|
private fun convertField(field: PsiField): Member {
|
||||||
val annotations = convertAnnotations(field)
|
val annotations = convertAnnotations(field)
|
||||||
val modifiers = convertModifiers(field)
|
val modifiers = convertModifiers(field)
|
||||||
val name = field.declarationIdentifier()
|
val name = field.declarationIdentifier()
|
||||||
@@ -283,12 +283,20 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
|||||||
convertElement(field.getArgumentList()))
|
convertElement(field.getArgumentList()))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
val initializer = field.getInitializer()
|
||||||
|
val convertedType = typeConverter.convertVariableType(field)
|
||||||
|
val isVal = field.hasModifierProperty(PsiModifier.FINAL)
|
||||||
|
val omitType = !settings.specifyFieldTypeByDefault &&
|
||||||
|
initializer != null &&
|
||||||
|
(modifiers.isPrivate && (isVal || convertedType == typeConverter.convertExpressionType(initializer)) ||
|
||||||
|
modifiers.isInternal && convertedType == typeConverter.convertExpressionType(initializer))
|
||||||
Field(name,
|
Field(name,
|
||||||
annotations,
|
annotations,
|
||||||
modifiers,
|
modifiers,
|
||||||
typeConverter.convertVariableType(field),
|
convertedType,
|
||||||
convertExpression(field.getInitializer(), field.getType()),
|
convertExpression(initializer, field.getType()),
|
||||||
field.hasModifierProperty(PsiModifier.FINAL),
|
isVal,
|
||||||
|
!omitType,
|
||||||
field.hasWriteAccesses(field.getContainingClass()))
|
field.hasWriteAccesses(field.getContainingClass()))
|
||||||
}
|
}
|
||||||
return converted.assignPrototype(field)
|
return converted.assignPrototype(field)
|
||||||
@@ -324,7 +332,7 @@ public class Converter private(val project: Project, val settings: ConverterSett
|
|||||||
if (settings.openByDefault) {
|
if (settings.openByDefault) {
|
||||||
val isEffectivelyFinal = method.hasModifierProperty(PsiModifier.FINAL) ||
|
val isEffectivelyFinal = method.hasModifierProperty(PsiModifier.FINAL) ||
|
||||||
containingClass != null && (containingClass.hasModifierProperty(PsiModifier.FINAL) || containingClass.isEnum())
|
containingClass != null && (containingClass.hasModifierProperty(PsiModifier.FINAL) || containingClass.isEnum())
|
||||||
if (!isEffectivelyFinal && !modifiers.contains(Modifier.ABSTRACT) && !modifiers.contains(Modifier.PRIVATE)) {
|
if (!isEffectivelyFinal && !modifiers.contains(Modifier.ABSTRACT) && !modifiers.isPrivate) {
|
||||||
modifiers = modifiers.with(Modifier.OPEN)
|
modifiers = modifiers.with(Modifier.OPEN)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,20 +16,19 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.j2k
|
package org.jetbrains.jet.j2k
|
||||||
|
|
||||||
public class ConverterSettings(
|
public data class ConverterSettings(
|
||||||
var forceNotNullTypes: Boolean,
|
var forceNotNullTypes: Boolean,
|
||||||
var forceLocalVariableImmutability: Boolean,
|
var forceLocalVariableImmutability: Boolean,
|
||||||
var specifyLocalVariableTypeByDefault: Boolean,
|
var specifyLocalVariableTypeByDefault: Boolean,
|
||||||
|
var specifyFieldTypeByDefault: Boolean,
|
||||||
var openByDefault: Boolean) {
|
var openByDefault: Boolean) {
|
||||||
|
|
||||||
public fun copy(): ConverterSettings
|
|
||||||
= ConverterSettings(forceNotNullTypes, forceLocalVariableImmutability, specifyLocalVariableTypeByDefault, openByDefault)
|
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
public val defaultSettings: ConverterSettings = ConverterSettings(
|
public val defaultSettings: ConverterSettings = ConverterSettings(
|
||||||
forceNotNullTypes = true,
|
forceNotNullTypes = true,
|
||||||
forceLocalVariableImmutability = true,
|
forceLocalVariableImmutability = true,
|
||||||
specifyLocalVariableTypeByDefault = false,
|
specifyLocalVariableTypeByDefault = false,
|
||||||
|
specifyFieldTypeByDefault = false,
|
||||||
openByDefault = false
|
openByDefault = false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver
|
|||||||
if (nullability == Nullability.Default) {
|
if (nullability == Nullability.Default) {
|
||||||
val initializer = variable.getInitializer()
|
val initializer = variable.getInitializer()
|
||||||
if (initializer != null) {
|
if (initializer != null) {
|
||||||
val initializerNullability = initializer.nullability()
|
val initializerNullability = initializer.nullability(false)
|
||||||
if (variable.isEffectivelyFinal()) {
|
if (variable.isEffectivelyFinal()) {
|
||||||
nullability = initializerNullability
|
nullability = initializerNullability
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,7 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver
|
|||||||
for (call in findMethodCalls(method, scope)) {
|
for (call in findMethodCalls(method, scope)) {
|
||||||
val args = call.getArgumentList().getExpressions()
|
val args = call.getArgumentList().getExpressions()
|
||||||
if (args.size == parameters.size) {
|
if (args.size == parameters.size) {
|
||||||
if (args[parameterIndex].nullability() == Nullability.Nullable) {
|
if (args[parameterIndex].nullability(false) == Nullability.Nullable) {
|
||||||
nullability = Nullability.Nullable
|
nullability = Nullability.Nullable
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -166,7 +166,7 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver
|
|||||||
if (nullability == Nullability.Default) {
|
if (nullability == Nullability.Default) {
|
||||||
method.getBody()?.accept(object: JavaRecursiveElementVisitor() {
|
method.getBody()?.accept(object: JavaRecursiveElementVisitor() {
|
||||||
override fun visitReturnStatement(statement: PsiReturnStatement) {
|
override fun visitReturnStatement(statement: PsiReturnStatement) {
|
||||||
if (statement.getReturnValue()?.nullability() == Nullability.Nullable) {
|
if (statement.getReturnValue()?.nullability(false) == Nullability.Nullable) {
|
||||||
nullability = Nullability.Nullable
|
nullability = Nullability.Nullable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -189,6 +189,10 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver
|
|||||||
return nullability
|
return nullability
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fun convertExpressionType(expression: PsiExpression): Type {
|
||||||
|
return convertType(expression.getType(), expression.nullability(true))
|
||||||
|
}
|
||||||
|
|
||||||
private fun searchScope(element: PsiElement): PsiElement? {
|
private fun searchScope(element: PsiElement): PsiElement? {
|
||||||
return when(element) {
|
return when(element) {
|
||||||
is PsiParameter -> element.getDeclarationScope()
|
is PsiParameter -> element.getDeclarationScope()
|
||||||
@@ -199,22 +203,39 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun PsiExpression.nullability(): Nullability {
|
private fun PsiExpression.nullability(useDeclarationsNullability: Boolean): Nullability {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is PsiLiteralExpression -> if (getType() != PsiType.NULL) Nullability.NotNull else Nullability.Nullable
|
is PsiLiteralExpression -> if (getType() != PsiType.NULL) Nullability.NotNull else Nullability.Nullable
|
||||||
|
|
||||||
is PsiNewExpression -> Nullability.NotNull
|
is PsiNewExpression -> Nullability.NotNull
|
||||||
|
|
||||||
is PsiConditionalExpression -> {
|
is PsiConditionalExpression -> {
|
||||||
val nullability1 = getThenExpression()?.nullability()
|
val nullability1 = getThenExpression()?.nullability(useDeclarationsNullability)
|
||||||
if (nullability1 == Nullability.Nullable) return Nullability.Nullable
|
if (nullability1 == Nullability.Nullable) return Nullability.Nullable
|
||||||
val nullability2 = getElseExpression()?.nullability()
|
val nullability2 = getElseExpression()?.nullability(useDeclarationsNullability)
|
||||||
if (nullability2 == Nullability.Nullable) return Nullability.Nullable
|
if (nullability2 == Nullability.Nullable) return Nullability.Nullable
|
||||||
if (nullability1 == Nullability.NotNull && nullability2 == Nullability.NotNull) return Nullability.NotNull
|
if (nullability1 == Nullability.NotNull && nullability2 == Nullability.NotNull) return Nullability.NotNull
|
||||||
Nullability.Default
|
Nullability.Default
|
||||||
}
|
}
|
||||||
|
|
||||||
is PsiParenthesizedExpression -> getExpression()?.nullability() ?: Nullability.Default
|
is PsiParenthesizedExpression -> getExpression()?.nullability(useDeclarationsNullability) ?: Nullability.Default
|
||||||
|
|
||||||
|
is PsiMethodCallExpression -> if (useDeclarationsNullability) {
|
||||||
|
val method = resolveMethod()
|
||||||
|
if (method != null) methodNullability(method) else Nullability.Default
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Nullability.Default
|
||||||
|
}
|
||||||
|
|
||||||
|
is PsiReferenceExpression -> if (useDeclarationsNullability) {
|
||||||
|
val variable = resolve() as? PsiVariable
|
||||||
|
if (variable != null) variableNullability(variable) else Nullability.Default
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Nullability.Default
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//TODO: some other cases
|
//TODO: some other cases
|
||||||
|
|
||||||
@@ -225,7 +246,7 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver
|
|||||||
private fun isNullableFromUsage(usage: PsiExpression): Boolean {
|
private fun isNullableFromUsage(usage: PsiExpression): Boolean {
|
||||||
val parent = usage.getParent() ?: return false
|
val parent = usage.getParent() ?: return false
|
||||||
if (parent is PsiAssignmentExpression && parent.getOperationTokenType() == JavaTokenType.EQ && usage == parent.getLExpression()) {
|
if (parent is PsiAssignmentExpression && parent.getOperationTokenType() == JavaTokenType.EQ && usage == parent.getLExpression()) {
|
||||||
return parent.getRExpression()?.nullability() == Nullability.Nullable
|
return parent.getRExpression()?.nullability(false) == Nullability.Nullable
|
||||||
}
|
}
|
||||||
else if (parent is PsiBinaryExpression) {
|
else if (parent is PsiBinaryExpression) {
|
||||||
val operationType = parent.getOperationTokenType()
|
val operationType = parent.getOperationTokenType()
|
||||||
|
|||||||
@@ -19,20 +19,20 @@ package org.jetbrains.jet.j2k.ast
|
|||||||
import org.jetbrains.jet.j2k.*
|
import org.jetbrains.jet.j2k.*
|
||||||
|
|
||||||
class EnumConstant(
|
class EnumConstant(
|
||||||
identifier: Identifier,
|
val identifier: Identifier,
|
||||||
annotations: Annotations,
|
annotations: Annotations,
|
||||||
modifiers: Modifiers,
|
modifiers: Modifiers,
|
||||||
`type`: Type,
|
val `type`: Type,
|
||||||
params: Element
|
val params: Element
|
||||||
) : Field(identifier, annotations, modifiers, `type`.toNotNullType(), params, true, false) {
|
) : Member(annotations, modifiers) {
|
||||||
|
|
||||||
override fun generateCode(builder: CodeBuilder) {
|
override fun generateCode(builder: CodeBuilder) {
|
||||||
if (initializer.isEmpty) {
|
if (params.isEmpty) {
|
||||||
builder append annotations append identifier
|
builder append annotations append identifier
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
builder append annotations append identifier append " : " append `type` append "(" append initializer append ")"
|
builder append annotations append identifier append " : " append `type` append "(" append params append ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,13 +18,14 @@ package org.jetbrains.jet.j2k.ast
|
|||||||
|
|
||||||
import org.jetbrains.jet.j2k.*
|
import org.jetbrains.jet.j2k.*
|
||||||
|
|
||||||
open class Field(
|
class Field(
|
||||||
val identifier: Identifier,
|
val identifier: Identifier,
|
||||||
annotations: Annotations,
|
annotations: Annotations,
|
||||||
modifiers: Modifiers,
|
modifiers: Modifiers,
|
||||||
val `type`: Type,
|
val `type`: Type,
|
||||||
val initializer: Element,
|
val initializer: Element,
|
||||||
val isVal: Boolean,
|
val isVal: Boolean,
|
||||||
|
val explicitType: Boolean,
|
||||||
private val hasWriteAccesses: Boolean
|
private val hasWriteAccesses: Boolean
|
||||||
) : Member(annotations, modifiers) {
|
) : Member(annotations, modifiers) {
|
||||||
|
|
||||||
@@ -33,8 +34,10 @@ open class Field(
|
|||||||
.appendWithSpaceAfter(modifiers)
|
.appendWithSpaceAfter(modifiers)
|
||||||
.append(if (isVal) "val " else "var ")
|
.append(if (isVal) "val " else "var ")
|
||||||
.append(identifier)
|
.append(identifier)
|
||||||
.append(" : ")
|
|
||||||
.append(`type`)
|
if (explicitType) {
|
||||||
|
builder append ":" append `type`
|
||||||
|
}
|
||||||
|
|
||||||
var initializerToUse = initializer
|
var initializerToUse = initializer
|
||||||
if (initializerToUse.isEmpty && !(isVal && hasWriteAccesses)) {
|
if (initializerToUse.isEmpty && !(isVal && hasWriteAccesses)) {
|
||||||
|
|||||||
@@ -55,6 +55,11 @@ class Modifiers(val modifiers: Collection<Modifier>) : Element() {
|
|||||||
|
|
||||||
fun contains(modifier: Modifier): Boolean = modifiers.contains(modifier)
|
fun contains(modifier: Modifier): Boolean = modifiers.contains(modifier)
|
||||||
|
|
||||||
|
val isPublic: Boolean get() = contains(Modifier.PUBLIC)
|
||||||
|
val isPrivate: Boolean get() = contains(Modifier.PRIVATE)
|
||||||
|
val isProtected: Boolean get() = contains(Modifier.PROTECTED)
|
||||||
|
val isInternal: Boolean get() = !isPublic && !isPrivate && !isProtected
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
val Empty = Modifiers(listOf())
|
val Empty = Modifiers(listOf())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,12 +48,16 @@ abstract class Type() : Element() {
|
|||||||
abstract val isNullable: Boolean
|
abstract val isNullable: Boolean
|
||||||
|
|
||||||
open fun toNotNullType(): Type {
|
open fun toNotNullType(): Type {
|
||||||
if (isNullable) throw UnsupportedOperationException("toNotNullType must be defined")
|
if (isNullable) {
|
||||||
|
throw UnsupportedOperationException("toNotNullType must be defined")
|
||||||
|
}
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun toNullableType(): Type {
|
open fun toNullableType(): Type {
|
||||||
if (!isNullable) throw UnsupportedOperationException("toNullableType must be defined")
|
if (!isNullable) {
|
||||||
|
throw UnsupportedOperationException("toNullableType must be defined")
|
||||||
|
}
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,6 +73,14 @@ abstract class Type() : Element() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object Null: Type() {
|
||||||
|
override val isNullable: Boolean = true
|
||||||
|
|
||||||
|
override fun generateCode(builder: CodeBuilder) {
|
||||||
|
builder.append("???")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean = other is Type && other.canonicalCode() == this.canonicalCode()
|
override fun equals(other: Any?): Boolean = other is Type && other.canonicalCode() == this.canonicalCode()
|
||||||
|
|
||||||
override fun hashCode(): Int = canonicalCode().hashCode()
|
override fun hashCode(): Int = canonicalCode().hashCode()
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ class TypeVisitor(private val converter: TypeConverter, private val importNames:
|
|||||||
else if (PRIMITIVE_TYPES_NAMES.contains(name)) {
|
else if (PRIMITIVE_TYPES_NAMES.contains(name)) {
|
||||||
PrimitiveType(Identifier(StringUtil.capitalize(name)))
|
PrimitiveType(Identifier(StringUtil.capitalize(name)))
|
||||||
}
|
}
|
||||||
|
else if (name == "null") {
|
||||||
|
Type.Null
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
PrimitiveType(Identifier(name))
|
PrimitiveType(Identifier(name))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ abstract class AbstractJavaToKotlinConverterTest() : LightIdeaTestCase() {
|
|||||||
"forceNotNullTypes" -> settings.forceNotNullTypes = parseBoolean(value)
|
"forceNotNullTypes" -> settings.forceNotNullTypes = parseBoolean(value)
|
||||||
"forceLocalVariableImmutability" -> settings.forceLocalVariableImmutability = parseBoolean(value)
|
"forceLocalVariableImmutability" -> settings.forceLocalVariableImmutability = parseBoolean(value)
|
||||||
"specifyLocalVariableTypeByDefault" -> settings.specifyLocalVariableTypeByDefault = parseBoolean(value)
|
"specifyLocalVariableTypeByDefault" -> settings.specifyLocalVariableTypeByDefault = parseBoolean(value)
|
||||||
|
"specifyFieldTypeByDefault" -> settings.specifyFieldTypeByDefault = parseBoolean(value)
|
||||||
"openByDefault" -> settings.openByDefault = parseBoolean(value)
|
"openByDefault" -> settings.openByDefault = parseBoolean(value)
|
||||||
else -> throw IllegalArgumentException("Unknown option: $name")
|
else -> throw IllegalArgumentException("Unknown option: $name")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1094,6 +1094,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
|
|||||||
doTest("j2k/tests/testData/ast/field/publicField.java");
|
doTest("j2k/tests/testData/ast/field/publicField.java");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("specifyType.java")
|
||||||
|
public void testSpecifyType() throws Exception {
|
||||||
|
doTest("j2k/tests/testData/ast/field/specifyType.java");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("valWithInit.java")
|
@TestMetadata("valWithInit.java")
|
||||||
public void testValWithInit() throws Exception {
|
public void testValWithInit() throws Exception {
|
||||||
doTest("j2k/tests/testData/ast/field/valWithInit.java");
|
doTest("j2k/tests/testData/ast/field/valWithInit.java");
|
||||||
@@ -2354,6 +2359,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
|
|||||||
doTest("j2k/tests/testData/ast/settings/openByDefault.java");
|
doTest("j2k/tests/testData/ast/settings/openByDefault.java");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("specifyFieldTypeByDefault.java")
|
||||||
|
public void testSpecifyFieldTypeByDefault() throws Exception {
|
||||||
|
doTest("j2k/tests/testData/ast/settings/specifyFieldTypeByDefault.java");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("specifyLocalVariableTypeByDefault.java")
|
@TestMetadata("specifyLocalVariableTypeByDefault.java")
|
||||||
public void testSpecifyLocalVariableTypeByDefault() throws Exception {
|
public void testSpecifyLocalVariableTypeByDefault() throws Exception {
|
||||||
doTest("j2k/tests/testData/ast/settings/specifyLocalVariableTypeByDefault.java");
|
doTest("j2k/tests/testData/ast/settings/specifyLocalVariableTypeByDefault.java");
|
||||||
|
|||||||
@@ -9,15 +9,15 @@ 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 var field1: Int = 0
|
Anon5(1) deprecated("") private var field1 = 0
|
||||||
|
|
||||||
Anon5(1)
|
Anon5(1)
|
||||||
private var field2: Int = 0
|
private var field2 = 0
|
||||||
|
|
||||||
Anon5(1) var field3: Int = 0
|
Anon5(1) var field3 = 0
|
||||||
|
|
||||||
Anon5(1)
|
Anon5(1)
|
||||||
var field4: Int = 0
|
var field4 = 0
|
||||||
|
|
||||||
Anon6(array())
|
Anon6(array())
|
||||||
fun foo(deprecated("") p1: Int, deprecated("") Anon5(2) p2: Char) {
|
fun foo(deprecated("") p1: Int, deprecated("") Anon5(2) p2: Char) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
package test
|
package test
|
||||||
|
|
||||||
public class Test(str: String) {
|
public class Test(str: String) {
|
||||||
var myStr: String = "String2"
|
var myStr = "String2"
|
||||||
|
|
||||||
public fun sout(str: String) {
|
public fun sout(str: String) {
|
||||||
System.out!!.println(str)
|
System.out!!.println(str)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class T() {
|
class T() {
|
||||||
var a: String = "abc"
|
var a = "abc"
|
||||||
var b: Int = 10
|
var b = 10
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
class T() {
|
class T() {
|
||||||
var a: String = 0
|
var a: String = 0
|
||||||
var b: String = 0
|
var b: String = 0
|
||||||
var c: String = "abc"
|
var c = "abc"
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,6 @@ class S() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
var myI: Int = 10
|
var myI = 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ class A() {
|
|||||||
/* body is empty */
|
/* body is empty */
|
||||||
}
|
}
|
||||||
|
|
||||||
private /*it's private*/ var field: Int = 0
|
private /*it's private*/ var field = 0
|
||||||
|
|
||||||
public /*it's public*/ fun foo(): Char {
|
public /*it's public*/ fun foo(): Char {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
class A() {
|
class A() {
|
||||||
private var isOpen: Boolean = true // ideally should be atomic boolean
|
private var isOpen = true // ideally should be atomic boolean
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
public class Identifier<T> private(private val myName: T, private var myHasDollar: Boolean) {
|
public class Identifier<T> private(private val myName: T, private var myHasDollar: Boolean) {
|
||||||
private var myNullable: Boolean = true
|
private var myNullable = true
|
||||||
|
|
||||||
public fun getName(): T {
|
public fun getName(): T {
|
||||||
return myName
|
return myName
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
public class Identifier private(private val myName: String, private var myHasDollar: Boolean) {
|
public class Identifier private(private val myName: String, private var myHasDollar: Boolean) {
|
||||||
private var myNullable: Boolean = true
|
private var myNullable = true
|
||||||
|
|
||||||
public fun getName(): String {
|
public fun getName(): String {
|
||||||
return myName
|
return myName
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
//file
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
class A {
|
||||||
|
private final List<String> field1 = new ArrayList<String>();
|
||||||
|
final List<String> field2 = new ArrayList<String>();
|
||||||
|
public final int field3 = 0;
|
||||||
|
protected final int field4 = 0;
|
||||||
|
|
||||||
|
private List<String> field5 = new ArrayList<String>();
|
||||||
|
List<String> field6 = new ArrayList<String>();
|
||||||
|
|
||||||
|
private int field7 = 0;
|
||||||
|
int field8 = 0;
|
||||||
|
|
||||||
|
@Nullable private String field9 = "a"
|
||||||
|
@Nullable private String field10 = foo();
|
||||||
|
|
||||||
|
String foo() { return "x"; }
|
||||||
|
|
||||||
|
void bar() {
|
||||||
|
field7++;
|
||||||
|
field8++;
|
||||||
|
field9 = null;
|
||||||
|
field10 = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import java.util.*
|
||||||
|
import kotlin.List
|
||||||
|
|
||||||
|
class A() {
|
||||||
|
private val field1 = ArrayList<String>()
|
||||||
|
val field2: List<String> = ArrayList<String>()
|
||||||
|
public val field3: Int = 0
|
||||||
|
protected val field4: Int = 0
|
||||||
|
|
||||||
|
private var field5: List<String> = ArrayList<String>()
|
||||||
|
var field6: List<String> = ArrayList<String>()
|
||||||
|
|
||||||
|
private var field7 = 0
|
||||||
|
var field8 = 0
|
||||||
|
|
||||||
|
private var field9: String? = "a"
|
||||||
|
private var field10: String? = foo()
|
||||||
|
|
||||||
|
fun foo(): String {
|
||||||
|
return "x"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar() {
|
||||||
|
field7++
|
||||||
|
field8++
|
||||||
|
field9 = null
|
||||||
|
field10 = null
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
class C() {
|
class C() {
|
||||||
val f: Foo = Foo(1, 2)
|
val f = Foo(1, 2)
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
class C() {
|
class C() {
|
||||||
var f: Foo = Foo(1, 2)
|
var f = Foo(1, 2)
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ class F() {
|
|||||||
|
|
||||||
fun f2() {
|
fun f2() {
|
||||||
}
|
}
|
||||||
var i: Int = 0
|
var i = 0
|
||||||
|
|
||||||
fun f3() {
|
fun f3() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class F() {
|
|||||||
|
|
||||||
fun f2() {
|
fun f2() {
|
||||||
}
|
}
|
||||||
var i: Int = 0
|
var i = 0
|
||||||
|
|
||||||
fun f3() {
|
fun f3() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class F() {
|
|||||||
|
|
||||||
fun f1() {
|
fun f1() {
|
||||||
}
|
}
|
||||||
var i: Int = 0
|
var i = 0
|
||||||
|
|
||||||
//c5
|
//c5
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class F() {
|
|||||||
|
|
||||||
fun f2() {
|
fun f2() {
|
||||||
}
|
}
|
||||||
var i: Int = 0
|
var i = 0
|
||||||
|
|
||||||
fun f3() {
|
fun f3() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
public class Identifier<T> private(private val myName: T, private var myHasDollar: Boolean) {
|
public class Identifier<T> private(private val myName: T, private var myHasDollar: Boolean) {
|
||||||
private var myNullable: Boolean = true
|
private var myNullable = true
|
||||||
|
|
||||||
public fun getName(): T {
|
public fun getName(): T {
|
||||||
return myName
|
return myName
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package demo
|
package demo
|
||||||
|
|
||||||
class Container() {
|
class Container() {
|
||||||
var myString: String = "1"
|
var myString = "1"
|
||||||
}
|
}
|
||||||
|
|
||||||
class One() {
|
class One() {
|
||||||
class object {
|
class object {
|
||||||
var myContainer: Container = Container()
|
var myContainer = Container()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package demo
|
package demo
|
||||||
|
|
||||||
class Container() {
|
class Container() {
|
||||||
var myInt: Int = 1
|
var myInt = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class One() {
|
class One() {
|
||||||
class object {
|
class object {
|
||||||
var myContainer: Container = Container()
|
var myContainer = Container()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package demo
|
package demo
|
||||||
|
|
||||||
class Container() {
|
class Container() {
|
||||||
var myInt: Int = 1
|
var myInt = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class One() {
|
class One() {
|
||||||
class object {
|
class object {
|
||||||
var myContainer: Container = Container()
|
var myContainer = Container()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package demo
|
package demo
|
||||||
|
|
||||||
class Container() {
|
class Container() {
|
||||||
var myInt: Int = 1
|
var myInt = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class One() {
|
class One() {
|
||||||
class object {
|
class object {
|
||||||
var myContainer: Container = Container()
|
var myContainer = Container()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package demo
|
package demo
|
||||||
|
|
||||||
class Container() {
|
class Container() {
|
||||||
var myBoolean: Boolean = true
|
var myBoolean = true
|
||||||
}
|
}
|
||||||
|
|
||||||
class One() {
|
class One() {
|
||||||
class object {
|
class object {
|
||||||
var myContainer: Container = Container()
|
var myContainer = Container()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ public class Language(protected var code: String) : Serializable {
|
|||||||
class object {
|
class object {
|
||||||
public var ENGLISH: Language = Language("en")
|
public var ENGLISH: Language = Language("en")
|
||||||
public var SWEDISH: Language = Language("sv")
|
public var SWEDISH: Language = Language("sv")
|
||||||
private val serialVersionUID: Long = -2442762969929206780
|
private val serialVersionUID = -2442762969929206780
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package demo
|
package demo
|
||||||
|
|
||||||
class C(a: Int) {
|
class C(a: Int) {
|
||||||
var abc: Int = 0
|
var abc = 0
|
||||||
|
|
||||||
{
|
{
|
||||||
abc = a * 2
|
abc = a * 2
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
class C() {
|
class C() {
|
||||||
private val string: String? = getString()
|
private val string = getString()
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
//file
|
||||||
|
// !specifyFieldTypeByDefault: true
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
class A {
|
||||||
|
private final List<String> field1 = new ArrayList<String>();
|
||||||
|
final List<String> field2 = new ArrayList<String>();
|
||||||
|
public final int field3 = 0;
|
||||||
|
protected final int field4 = 0;
|
||||||
|
|
||||||
|
private List<String> field5 = new ArrayList<String>();
|
||||||
|
List<String> field6 = new ArrayList<String>();
|
||||||
|
|
||||||
|
private int field7 = 0;
|
||||||
|
int field8 = 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// !specifyFieldTypeByDefault: true
|
||||||
|
import java.util.*
|
||||||
|
import kotlin.List
|
||||||
|
|
||||||
|
class A() {
|
||||||
|
private val field1: List<String> = ArrayList<String>()
|
||||||
|
val field2: List<String> = ArrayList<String>()
|
||||||
|
public val field3: Int = 0
|
||||||
|
protected val field4: Int = 0
|
||||||
|
|
||||||
|
private var field5: List<String> = ArrayList<String>()
|
||||||
|
var field6: List<String> = ArrayList<String>()
|
||||||
|
|
||||||
|
private var field7: Int = 0
|
||||||
|
var field8: Int = 0
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ class A() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class object {
|
class object {
|
||||||
private val s: String = "abc"
|
private val s = "abc"
|
||||||
|
|
||||||
private fun privateStatic1() {
|
private fun privateStatic1() {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user