diff --git a/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt index e3613e3e2df..4a8bb063b6d 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/JavaToKotlinConverter.kt @@ -32,9 +32,7 @@ import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.psi.psiUtil.isAncestor import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf -import java.util.ArrayList -import java.util.Comparator -import java.util.LinkedHashMap +import java.util.* public interface PostProcessor { public fun insertImport(file: JetFile, fqName: FqName) @@ -143,6 +141,7 @@ public class JavaToKotlinConverter( val processings: Collection ) { val depth: Int by lazy(LazyThreadSafetyMode.NONE) { target.parentsWithSelf.takeWhile { it !is PsiFile }.count() } + val offset: Int by lazy(LazyThreadSafetyMode.NONE) { reference.element.textRange.startOffset } } private fun buildExternalCodeProcessing( @@ -217,17 +216,14 @@ public class JavaToKotlinConverter( private object ReferenceComparator : Comparator { override fun compare(info1: ReferenceInfo, info2: ReferenceInfo): Int { - val element1 = info1.reference.getElement() - val element2 = info2.reference.getElement() - val depth1 = info1.depth val depth2 = info2.depth if (depth1 != depth2) { // put deeper elements first to not invalidate them when processing ancestors return -depth1.compareTo(depth2) } - // process elements with the same parent from right to left so that right-side of assignments is not invalidated by processing of the left one - return -element1.getStartOffsetInParent().compareTo(element2.getStartOffsetInParent()) + // process elements with the same deepness from right to left so that right-side of assignments is not invalidated by processing of the left one + return -info1.offset.compareTo(info2.offset) } } diff --git a/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java b/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java index 6cd46c4bd9f..1c4a80ea94e 100644 --- a/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java +++ b/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java @@ -8,5 +8,6 @@ class C extends JavaClass { javaClass.field -= field; field = myProperty; field *= 2; + field = field * 2; } } \ No newline at end of file diff --git a/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected b/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected index e91fbe56e9d..759d56efb18 100644 --- a/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected +++ b/j2k/testData/multiFile/FieldToProperty/external/JavaFile.java.expected @@ -8,5 +8,6 @@ class C extends JavaClass { javaClass.setField(javaClass.getField() - getField()); setField(getProperty()); setField(getField() * 2); + setField(getField() * 2); } } \ No newline at end of file