New J2K: do not resolve unary expressions method symbols

As we already have its type and may fail on unresolved declaration

#KT-32603 fixed
This commit is contained in:
Ilya Kirillov
2019-07-15 16:15:19 +03:00
parent 84872e064f
commit d29d7fb257
5 changed files with 22 additions and 38 deletions
@@ -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<KtNamedFunction>()
.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(
+6
View File
@@ -0,0 +1,6 @@
class Foo {
var prop = 0
internal fun foo() {
prop++
}
}
+4
View File
@@ -0,0 +1,4 @@
class Foo {
var prop = 0
<caret>
}
+3
View File
@@ -0,0 +1,3 @@
void foo() {
prop++;
}
@@ -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");