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:
@@ -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(
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class Foo {
|
||||
var prop = 0
|
||||
internal fun foo() {
|
||||
prop++
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
class Foo {
|
||||
var prop = 0
|
||||
<caret>
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
void foo() {
|
||||
prop++;
|
||||
}
|
||||
Generated
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user