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() =
|
fun JKOperator.isEquals() =
|
||||||
(token as? JKKtSingleValueOperatorToken)?.psiToken in equalsOperators
|
(token as? JKKtSingleValueOperatorToken)?.psiToken in equalsOperators
|
||||||
|
|
||||||
@@ -192,9 +160,8 @@ fun kotlinPrefixExpression(
|
|||||||
token: JKKtOperatorToken,
|
token: JKKtOperatorToken,
|
||||||
symbolProvider: JKSymbolProvider
|
symbolProvider: JKSymbolProvider
|
||||||
): JKPrefixExpression {
|
): JKPrefixExpression {
|
||||||
val operandType = operand.type(symbolProvider)
|
val operandType = operand.type(symbolProvider) ?: JKNoTypeImpl
|
||||||
val methodSymbol = token.unaryExpressionMethodType(operandType, symbolProvider)
|
return JKPrefixExpressionImpl(operand, JKKtOperatorImpl(token, operandType))
|
||||||
return JKPrefixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun kotlinPostfixExpression(
|
fun kotlinPostfixExpression(
|
||||||
@@ -202,9 +169,8 @@ fun kotlinPostfixExpression(
|
|||||||
token: JKKtOperatorToken,
|
token: JKKtOperatorToken,
|
||||||
symbolProvider: JKSymbolProvider
|
symbolProvider: JKSymbolProvider
|
||||||
): JKPostfixExpression {
|
): JKPostfixExpression {
|
||||||
val operandType = operand.type(symbolProvider)
|
val operandType = operand.type(symbolProvider) ?: JKNoTypeImpl
|
||||||
val methodSymbol = token.unaryExpressionMethodType(operandType, symbolProvider)
|
return JKPostfixExpressionImpl(operand, JKKtOperatorImpl(token, operandType))
|
||||||
return JKPostfixExpressionImpl(operand, JKKtOperatorImpl(token, methodSymbol))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun untilToExpression(
|
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");
|
runTest("nj2k/testData/copyPastePlainText/KT13529_1.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("KT32603.txt")
|
||||||
|
public void testKT32603() throws Exception {
|
||||||
|
runTest("nj2k/testData/copyPastePlainText/KT32603.txt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("MembersIntoClass.txt")
|
@TestMetadata("MembersIntoClass.txt")
|
||||||
public void testMembersIntoClass() throws Exception {
|
public void testMembersIntoClass() throws Exception {
|
||||||
runTest("nj2k/testData/copyPastePlainText/MembersIntoClass.txt");
|
runTest("nj2k/testData/copyPastePlainText/MembersIntoClass.txt");
|
||||||
|
|||||||
Reference in New Issue
Block a user