From fbcf2e1bcd9426d812a5104ab048487101f2dbcf Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 17 Jan 2019 14:34:53 +0300 Subject: [PATCH] New J2K: Move equals operator conversion from post processing to AST conversion --- .../kotlin/idea/j2k/NewJ2kPostProcessings.kt | 2 -- .../conversions/EqualsOperatorConversion.kt | 36 +++++++++++++++++++ .../org/jetbrains/kotlin/j2k/expressions.kt | 10 +++++- 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/EqualsOperatorConversion.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt index cd8397e369e..1c592a8720c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/NewJ2kPostProcessings.kt @@ -37,7 +37,6 @@ import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.core.setVisibility import org.jetbrains.kotlin.idea.inspections.* import org.jetbrains.kotlin.idea.inspections.branchedTransformations.IfThenToSafeAccessInspection -import org.jetbrains.kotlin.idea.inspections.conventionNameCalls.ReplaceCallWithBinaryOperatorInspection import org.jetbrains.kotlin.idea.inspections.conventionNameCalls.ReplaceGetOrSetInspection import org.jetbrains.kotlin.idea.intentions.* import org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions.FoldIfToReturnAsymmetricallyIntention @@ -138,7 +137,6 @@ object NewJ2KPostProcessingRegistrarImpl : J2KPostProcessingRegistrar { registerInspectionBasedProcessing(SimplifyAssertNotNullInspection()), registerIntentionBasedProcessing(RemoveRedundantCallsOfConversionMethodsIntention()), registerGeneralInspectionBasedProcessing(LiftReturnOrAssignmentInspection()), - registerGeneralInspectionBasedProcessing(ReplaceCallWithBinaryOperatorInspection()), registerGeneralInspectionBasedProcessing(MayBeConstantInspection()), registerIntentionBasedProcessing(RemoveEmptyPrimaryConstructorIntention()), registerDiagnosticBasedProcessing(Errors.PLATFORM_CLASS_MAPPED_TO_KOTLIN) { element: KtDotQualifiedExpression, diagnostic -> diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/EqualsOperatorConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/EqualsOperatorConversion.kt new file mode 100644 index 00000000000..4640a668401 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/EqualsOperatorConversion.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2019 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.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.ast.Nullability +import org.jetbrains.kotlin.j2k.equalsExpression +import org.jetbrains.kotlin.j2k.tree.* +import org.jetbrains.kotlin.j2k.tree.impl.* +import org.jetbrains.kotlin.lexer.KtTokens + +class EqualsOperatorConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { + override fun applyToElement(element: JKTreeElement): JKTreeElement { + if (element !is JKQualifiedExpression) return recurse(element) + if (element.receiver is JKSuperExpression) return recurse(element) + val selector = element.selector as? JKMethodCallExpression ?: return (element) + val argument = selector.arguments.expressions.singleOrNull() ?: return recurse(element) + if (selector.identifier.deepestFqName() == "java.lang.Object.equals") { + return recurse( + JKParenthesizedExpressionImpl( + equalsExpression( + element::receiver.detached(), + argument.detached(selector.arguments), + context.symbolProvider + ) + ) + ) + } + return recurse(element) + } +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt index 01f0b2fb1e9..53529e4f67c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/expressions.kt @@ -394,4 +394,12 @@ private fun convertIntegerLiteral(element: JKLiteralExpression): JKKtLiteralExpr text, element.type ) -} \ No newline at end of file +} + +fun equalsExpression(left: JKExpression, right: JKExpression, symbolProvider: JKSymbolProvider) = + kotlinBinaryExpression( + left, + right, + KtTokens.EQEQ, + symbolProvider + )