More creation by pattern instead of text
This commit is contained in:
+36
-47
@@ -87,48 +87,38 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention<KtExpressio
|
||||
return false
|
||||
}
|
||||
|
||||
//TODO: don't use creation by plain text
|
||||
private fun convertPrefix(element: KtPrefixExpression): KtExpression {
|
||||
val op = element.getOperationReference().getReferencedNameElementType()
|
||||
val base = element.getBaseExpression()!!.getText()
|
||||
|
||||
val call = when (op) {
|
||||
KtTokens.PLUS -> "plus()"
|
||||
KtTokens.MINUS -> "minus()"
|
||||
KtTokens.PLUSPLUS -> "inc()"
|
||||
KtTokens.MINUSMINUS -> "dec()"
|
||||
KtTokens.EXCL -> "not()"
|
||||
val op = element.operationReference.getReferencedNameElementType()
|
||||
val operatorName = when (op) {
|
||||
KtTokens.PLUS -> OperatorNameConventions.PLUS
|
||||
KtTokens.MINUS -> OperatorNameConventions.MINUS
|
||||
KtTokens.PLUSPLUS -> OperatorNameConventions.INC
|
||||
KtTokens.MINUSMINUS -> OperatorNameConventions.DEC
|
||||
KtTokens.EXCL -> OperatorNameConventions.NOT
|
||||
else -> return element
|
||||
}
|
||||
|
||||
val transformation = "$base.$call"
|
||||
val transformed = KtPsiFactory(element).createExpression(transformation)
|
||||
val transformed = KtPsiFactory(element).createExpressionByPattern("$0.$1()", element.baseExpression!!, operatorName)
|
||||
return element.replace(transformed) as KtExpression
|
||||
}
|
||||
|
||||
//TODO: don't use creation by plain text
|
||||
private fun convertPostFix(element: KtPostfixExpression): KtExpression {
|
||||
val op = element.getOperationReference().getReferencedNameElementType()
|
||||
val base = element.getBaseExpression()!!.getText()
|
||||
|
||||
val call = when (op) {
|
||||
KtTokens.PLUSPLUS -> "inc()"
|
||||
KtTokens.MINUSMINUS -> "dec()"
|
||||
val operatorName = when (op) {
|
||||
KtTokens.PLUSPLUS -> OperatorNameConventions.INC
|
||||
KtTokens.MINUSMINUS -> OperatorNameConventions.DEC
|
||||
else -> return element
|
||||
}
|
||||
|
||||
val transformation = "$base.$call"
|
||||
val transformed = KtPsiFactory(element).createExpression(transformation)
|
||||
val transformed = KtPsiFactory(element).createExpressionByPattern("$0.$1()", element.baseExpression!!, operatorName)
|
||||
return element.replace(transformed) as KtExpression
|
||||
}
|
||||
|
||||
//TODO: don't use creation by plain text
|
||||
private fun convertBinary(element: KtBinaryExpression): KtExpression {
|
||||
val op = element.getOperationReference().getReferencedNameElementType()
|
||||
val left = element.getLeft()!!
|
||||
val right = element.getRight()!!
|
||||
val leftText = left.getText()
|
||||
val rightText = right.getText()
|
||||
val op = element.operationReference.getReferencedNameElementType()
|
||||
val left = element.left!!
|
||||
val right = element.right!!
|
||||
|
||||
if (op == KtTokens.EQ) {
|
||||
if (left is KtArrayAccessExpression) {
|
||||
@@ -142,31 +132,30 @@ public class OperatorToFunctionIntention : JetSelfTargetingIntention<KtExpressio
|
||||
val functionName = functionCandidate?.getCandidateDescriptor()?.getName().toString()
|
||||
val elemType = context.getType(left)
|
||||
|
||||
val transformation = when (op) {
|
||||
KtTokens.PLUS -> "$leftText.plus($rightText)"
|
||||
KtTokens.MINUS -> "$leftText.minus($rightText)"
|
||||
KtTokens.MUL -> "$leftText.times($rightText)"
|
||||
KtTokens.DIV -> "$leftText.div($rightText)"
|
||||
KtTokens.PERC -> "$leftText.mod($rightText)"
|
||||
KtTokens.RANGE -> "$leftText.rangeTo($rightText)"
|
||||
KtTokens.IN_KEYWORD -> "$rightText.contains($leftText)"
|
||||
KtTokens.NOT_IN -> "!$rightText.contains($leftText)"
|
||||
KtTokens.PLUSEQ -> if (functionName == "plusAssign") "$leftText.plusAssign($rightText)" else "$leftText = $leftText.plus($rightText)"
|
||||
KtTokens.MINUSEQ -> if (functionName == "minusAssign") "$leftText.minusAssign($rightText)" else "$leftText = $leftText.minus($rightText)"
|
||||
KtTokens.MULTEQ -> if (functionName == "multAssign") "$leftText.multAssign($rightText)" else "$leftText = $leftText.mult($rightText)"
|
||||
KtTokens.DIVEQ -> if (functionName == "divAssign") "$leftText.divAssign($rightText)" else "$leftText = $leftText.div($rightText)"
|
||||
KtTokens.PERCEQ -> if (functionName == "modAssign") "$leftText.modAssign($rightText)" else "$leftText = $leftText.mod($rightText)"
|
||||
KtTokens.EQEQ -> if (elemType?.isMarkedNullable() ?: true) "$leftText?.equals($rightText) ?: $rightText.identityEquals(null)" else "$leftText.equals($rightText)"
|
||||
KtTokens.EXCLEQ -> if (elemType?.isMarkedNullable() ?: true) "!($leftText?.equals($rightText) ?: $rightText.identityEquals(null))" else "!$leftText.equals($rightText)"
|
||||
KtTokens.GT -> "$leftText.compareTo($rightText) > 0"
|
||||
KtTokens.LT -> "$leftText.compareTo($rightText) < 0"
|
||||
KtTokens.GTEQ -> "$leftText.compareTo($rightText) >= 0"
|
||||
KtTokens.LTEQ -> "$leftText.compareTo($rightText) <= 0"
|
||||
val pattern = when (op) {
|
||||
KtTokens.PLUS -> "$0.plus($1)"
|
||||
KtTokens.MINUS -> "$0.minus($1)"
|
||||
KtTokens.MUL -> "$0.times($1)"
|
||||
KtTokens.DIV -> "$0.div($1)"
|
||||
KtTokens.PERC -> "$0.mod($1)"
|
||||
KtTokens.RANGE -> "$0.rangeTo($1)"
|
||||
KtTokens.IN_KEYWORD -> "$1.contains($0)"
|
||||
KtTokens.NOT_IN -> "!$1.contains($0)"
|
||||
KtTokens.PLUSEQ -> if (functionName == "plusAssign") "$0.plusAssign($1)" else "$0 = $0.plus($1)"
|
||||
KtTokens.MINUSEQ -> if (functionName == "minusAssign") "$0.minusAssign($1)" else "$0 = $0.minus($1)"
|
||||
KtTokens.MULTEQ -> if (functionName == "multAssign") "$0.multAssign($1)" else "$0 = $0.mult($1)"
|
||||
KtTokens.DIVEQ -> if (functionName == "divAssign") "$0.divAssign($1)" else "$0 = $0.div($1)"
|
||||
KtTokens.PERCEQ -> if (functionName == "modAssign") "$0.modAssign($1)" else "$0 = $0.mod($1)"
|
||||
KtTokens.EQEQ -> if (elemType?.isMarkedNullable() ?: true) "$0?.equals($1) ?: $1.identityEquals(null)" else "$0.equals($1)"
|
||||
KtTokens.EXCLEQ -> if (elemType?.isMarkedNullable() ?: true) "!($0?.equals($1) ?: $1.identityEquals(null))" else "!$0.equals($1)"
|
||||
KtTokens.GT -> "$0.compareTo($1) > 0"
|
||||
KtTokens.LT -> "$0.compareTo($1) < 0"
|
||||
KtTokens.GTEQ -> "$0.compareTo($1) >= 0"
|
||||
KtTokens.LTEQ -> "$0.compareTo($1) <= 0"
|
||||
else -> return element
|
||||
}
|
||||
|
||||
val transformed = KtPsiFactory(element).createExpression(transformation)
|
||||
|
||||
val transformed = KtPsiFactory(element).createExpressionByPattern(pattern, left, right)
|
||||
return element.replace(transformed) as KtExpression
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user