From ad3ea9a36a80505516c406fc5abde970ebc3aaf5 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Wed, 27 Nov 2019 20:40:14 +0900 Subject: [PATCH] Replace with binary operator: don't highlight when receiver is platform type #KT-35097 Fixed --- .../ReplaceCallWithBinaryOperatorInspection.kt | 8 +++----- .../platformTypeEquals.1.java | 12 ++++++++++++ .../platformTypeEquals.1.java.after | 12 ++++++++++++ .../platformTypeEquals.kt | 6 ++++++ .../platformTypeEquals.kt.after | 6 ++++++ .../inspections/LocalInspectionTestGenerated.java | 5 +++++ 6 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java create mode 100644 idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java.after create mode 100644 idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt create mode 100644 idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt index 8e51c693d21..796b9c70f91 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/conventionNameCalls/ReplaceCallWithBinaryOperatorInspection.kt @@ -36,12 +36,10 @@ import org.jetbrains.kotlin.idea.intentions.conventionNameCalls.isAnyEquals import org.jetbrains.kotlin.idea.intentions.isOperatorOrCompatible import org.jetbrains.kotlin.idea.intentions.isReceiverExpressionWithValue import org.jetbrains.kotlin.idea.project.languageVersionSettings -import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.resolve.getDataFlowValueFactory import org.jetbrains.kotlin.idea.util.calleeTextRangeInThis import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getLastParentOfTypeInRow import org.jetbrains.kotlin.resolve.calls.callUtil.getFirstArgumentExpression @@ -54,7 +52,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.getKotlinTypeWithPossibleSm import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.expressions.OperatorConventions -import org.jetbrains.kotlin.types.isDynamic +import org.jetbrains.kotlin.types.isNullabilityFlexible import org.jetbrains.kotlin.types.typeUtil.* import org.jetbrains.kotlin.util.OperatorNameConventions @@ -95,9 +93,9 @@ class ReplaceCallWithBinaryOperatorInspection : AbstractApplicabilityBasedInspec override fun inspectionHighlightType(element: KtDotQualifiedExpression): ProblemHighlightType { val calleeExpression = element.callExpression?.calleeExpression as? KtSimpleNameExpression val identifier = calleeExpression?.getReferencedNameAsName() - if (element.platform.isJs() && identifier == OperatorNameConventions.EQUALS) { + if (identifier == OperatorNameConventions.EQUALS) { val context = element.analyze(BodyResolveMode.PARTIAL) - if (element.receiverExpression.getType(context)?.isDynamic() == true) { + if (element.receiverExpression.getType(context)?.isNullabilityFlexible() == true) { return ProblemHighlightType.INFORMATION } } diff --git a/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java new file mode 100644 index 00000000000..8c31df9739b --- /dev/null +++ b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java @@ -0,0 +1,12 @@ +public class Foo { + public static class Bar { + } + + public Bar getBar1() { + return null; + } + + public Bar getBar2() { + return new Bar(); + } +} diff --git a/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java.after b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java.after new file mode 100644 index 00000000000..8c31df9739b --- /dev/null +++ b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.1.java.after @@ -0,0 +1,12 @@ +public class Foo { + public static class Bar { + } + + public Bar getBar1() { + return null; + } + + public Bar getBar2() { + return new Bar(); + } +} diff --git a/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt new file mode 100644 index 00000000000..15643fa76a5 --- /dev/null +++ b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt @@ -0,0 +1,6 @@ +// HIGHLIGHT: INFORMATION +fun main() { + val bar1 = Foo().bar1 + val bar2 = Foo().bar2 + val b = bar1.equals(bar2) +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt.after b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt.after new file mode 100644 index 00000000000..140e038fca2 --- /dev/null +++ b/idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt.after @@ -0,0 +1,6 @@ +// HIGHLIGHT: INFORMATION +fun main() { + val bar1 = Foo().bar1 + val bar2 = Foo().bar2 + val b = bar1 == bar2 +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 2d2a1515f79..d35763b5ce9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -3287,6 +3287,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/operatorCannotBeApplied.kt"); } + @TestMetadata("platformTypeEquals.kt") + public void testPlatformTypeEquals() throws Exception { + runTest("idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/platformTypeEquals.kt"); + } + @TestMetadata("plusFromJava.kt") public void testPlusFromJava() throws Exception { runTest("idea/testData/inspectionsLocal/conventionNameCalls/replaceCallWithBinaryOperator/plusFromJava.kt");