From 4637903e00653c8abad8ca9c0049d55235c4d5a8 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Sat, 4 Aug 2018 08:16:12 +0300 Subject: [PATCH] New J2K: Add conversion which will initialize java implicit initialized fields --- .../jetbrains/kotlin/j2k/ConversionsRunner.kt | 3 ++- .../ImplicitInitializerConversion.kt | 23 +++++++++++++++++++ .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 4 ++-- .../org/jetbrains/kotlin/j2k/tree/impl/k.kt | 2 +- .../org/jetbrains/kotlin/j2k/tree/jk.kt | 2 +- 5 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ImplicitInitializerConversion.kt diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt index 227fb6cc5a9..f907fb0592c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt @@ -23,6 +23,7 @@ object ConversionsRunner { private fun createConversions(context: ConversionContext) = listOf( ModalityConversion(context), + ImplicitInitializerConversion(), TypeMappingConversion(context), FieldToPropertyConversion(), AssignmentAsExpressionToAlsoConversion(context), @@ -33,7 +34,7 @@ object ConversionsRunner { JavaMethodToKotlinFunctionConversion(), LiteralConversion(), InnerClassConversion(), - ModifiersConversion(), + ModifiersConversion(context), PolyadicExpressionConversion(), BinaryExpressionConversion() ) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ImplicitInitializerConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ImplicitInitializerConversion.kt new file mode 100644 index 00000000000..786fca2fbc0 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ImplicitInitializerConversion.kt @@ -0,0 +1,23 @@ +/* + * 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.tree.* +import org.jetbrains.kotlin.j2k.tree.impl.JKNullLiteral +import org.jetbrains.kotlin.j2k.tree.impl.JKUnresolvedClassType + +class ImplicitInitializerConversion : RecursiveApplicableConversionBase() { + override fun applyToElement(element: JKTreeElement): JKTreeElement { + if (element !is JKJavaField) return recurse(element) + + if (element.initializer !is JKStubExpression) return recurse(element) + + if (element.type.type is JKClassType || element.type.type is JKUnresolvedClassType) element.initializer = JKNullLiteral() + + return element + } + +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index e0dfdc28c9f..2d3a60a9ef9 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -79,7 +79,7 @@ class JKParameterImpl( override fun accept(visitor: JKVisitor, data: D): R = visitor.visitParameter(this, data) override var modifierList by child(modifierList) - override val initializer by child(initializer) + override var initializer by child(initializer) override val name by child(name) override var type by child(type) } @@ -203,7 +203,7 @@ class JKBooleanLiteral(val value: Boolean) : JKLiteralExpression, JKElementBase( class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) : JKLocalVariable, JKBranchElementBase() { override var modifierList by child(modifierList) - override val initializer by child(initializer) + override var initializer by child(initializer) override val name by child(name) override val type by child(type) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt index 45f546e2be7..5816607beb1 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -36,7 +36,7 @@ class JKKtPropertyImpl( override var modifierList: JKModifierList by child(modifierList) override var type by child(type) override var name: JKNameIdentifier by child(name) - override val initializer: JKExpression by child(initializer) + override var initializer: JKExpression by child(initializer) override val getter: JKBlock by child(getter) override val setter: JKBlock by child(setter) } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 0630af03de6..fb8d582e017 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -63,7 +63,7 @@ interface JKMethod : JKDeclaration, JKModifierListOwner { interface JKField : JKDeclaration, JKModifierListOwner { val type: JKTypeElement val name: JKNameIdentifier - val initializer: JKExpression + var initializer: JKExpression } interface JKLocalVariable : JKField