From d29d7fb257243e5bd5760ba46ab80921f25aed93 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 15 Jul 2019 16:15:19 +0300 Subject: [PATCH] New J2K: do not resolve unary expressions method symbols As we already have its type and may fail on unresolved declaration #KT-32603 fixed --- .../org/jetbrains/kotlin/nj2k/expressions.kt | 42 ++----------------- .../copyPastePlainText/KT32603.expected.kt | 6 +++ .../testData/copyPastePlainText/KT32603.to.kt | 4 ++ nj2k/testData/copyPastePlainText/KT32603.txt | 3 ++ ...otlinCopyPasteConversionTestGenerated.java | 5 +++ 5 files changed, 22 insertions(+), 38 deletions(-) create mode 100644 nj2k/testData/copyPastePlainText/KT32603.expected.kt create mode 100644 nj2k/testData/copyPastePlainText/KT32603.to.kt create mode 100644 nj2k/testData/copyPastePlainText/KT32603.txt diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt index 27b7b5f3563..5fa8aa82825 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/expressions.kt @@ -71,38 +71,6 @@ private fun JKKtOperatorToken.arithmeticMethodType( } } -private fun JKKtOperatorToken.unaryExpressionMethodType( - operandType: JKType?, - symbolProvider: JKSymbolProvider -): JKType { - if (operandType is JKNoType) { - return operandType - } - if (this == KtTokens.EXCLEXCL) { - return operandType!! - } - if (this == KtTokens.EXCL) { - return symbolProvider.provideClassSymbol(KotlinBuiltIns.FQ_NAMES._boolean.toSafe()).asType() - } - if (this == KtTokens.MINUS || this == KtTokens.PLUS) { - return operandType!! - } - if (this == KtTokens.EXCL) { - return operandType!! - } - val classSymbol = operandType!!.classSymbol(symbolProvider) - return when (classSymbol) { - is JKMultiverseKtClassSymbol ->// todo look for extensions - classSymbol.target.declarations.asSequence() - .filterIsInstance() - .filter { it.name == operatorName } - .mapNotNull { it.typeReference?.toJK(symbolProvider) } - .firstOrNull() ?: TODO(classSymbol::class.toString() + this.operatorName) - null -> TODO(" No class symbol") - else -> TODO(classSymbol::class.toString()) - } -} - fun JKOperator.isEquals() = (token as? JKKtSingleValueOperatorToken)?.psiToken in equalsOperators @@ -192,9 +160,8 @@ fun kotlinPrefixExpression( token: JKKtOperatorToken, symbolProvider: JKSymbolProvider ): JKPrefixExpression { - val operandType = operand.type(symbolProvider) - val methodSymbol = token.unaryExpressionMethodType(operandType, symbolProvider) - return JKPrefixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol)) + val operandType = operand.type(symbolProvider) ?: JKNoTypeImpl + return JKPrefixExpressionImpl(operand, JKKtOperatorImpl(token, operandType)) } fun kotlinPostfixExpression( @@ -202,9 +169,8 @@ fun kotlinPostfixExpression( token: JKKtOperatorToken, symbolProvider: JKSymbolProvider ): JKPostfixExpression { - val operandType = operand.type(symbolProvider) - val methodSymbol = token.unaryExpressionMethodType(operandType, symbolProvider) - return JKPostfixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol)) + val operandType = operand.type(symbolProvider) ?: JKNoTypeImpl + return JKPostfixExpressionImpl(operand, JKKtOperatorImpl(token, operandType)) } fun untilToExpression( diff --git a/nj2k/testData/copyPastePlainText/KT32603.expected.kt b/nj2k/testData/copyPastePlainText/KT32603.expected.kt new file mode 100644 index 00000000000..4de5f93af15 --- /dev/null +++ b/nj2k/testData/copyPastePlainText/KT32603.expected.kt @@ -0,0 +1,6 @@ +class Foo { + var prop = 0 + internal fun foo() { + prop++ + } +} \ No newline at end of file diff --git a/nj2k/testData/copyPastePlainText/KT32603.to.kt b/nj2k/testData/copyPastePlainText/KT32603.to.kt new file mode 100644 index 00000000000..be8f4b8312a --- /dev/null +++ b/nj2k/testData/copyPastePlainText/KT32603.to.kt @@ -0,0 +1,4 @@ +class Foo { + var prop = 0 + +} \ No newline at end of file diff --git a/nj2k/testData/copyPastePlainText/KT32603.txt b/nj2k/testData/copyPastePlainText/KT32603.txt new file mode 100644 index 00000000000..a15dd343a9f --- /dev/null +++ b/nj2k/testData/copyPastePlainText/KT32603.txt @@ -0,0 +1,3 @@ +void foo() { + prop++; +} \ No newline at end of file diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/TextNewJavaToKotlinCopyPasteConversionTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/TextNewJavaToKotlinCopyPasteConversionTestGenerated.java index 5abe3ddf688..a9c6ab97dde 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/TextNewJavaToKotlinCopyPasteConversionTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/TextNewJavaToKotlinCopyPasteConversionTestGenerated.java @@ -79,6 +79,11 @@ public class TextNewJavaToKotlinCopyPasteConversionTestGenerated extends Abstrac runTest("nj2k/testData/copyPastePlainText/KT13529_1.txt"); } + @TestMetadata("KT32603.txt") + public void testKT32603() throws Exception { + runTest("nj2k/testData/copyPastePlainText/KT32603.txt"); + } + @TestMetadata("MembersIntoClass.txt") public void testMembersIntoClass() throws Exception { runTest("nj2k/testData/copyPastePlainText/MembersIntoClass.txt");