Added methods to IfThenUtils
This commit is contained in:
committed by
Zalim Bashorov
parent
e5054a4a54
commit
f58e1811e4
+40
-2
@@ -38,6 +38,15 @@ import org.jetbrains.jet.lang.descriptors.VariableDescriptor
|
||||
import com.intellij.psi.search.searches.ReferencesSearch
|
||||
import com.intellij.psi.search.LocalSearchScope
|
||||
import org.jetbrains.jet.lang.psi.JetDeclaration
|
||||
import org.jetbrains.jet.lang.psi.JetThrowExpression
|
||||
import org.jetbrains.jet.lang.psi.JetPostfixExpression
|
||||
import org.jetbrains.jet.lang.psi.JetCallExpression
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||
|
||||
val NULL_PTR_EXCEPTION = "NullPointerException"
|
||||
val NULL_PTR_EXCEPTION_FQ = "java.lang.NullPointerException"
|
||||
val KOTLIN_NULL_PTR_EXCEPTION = "KotlinNullPointerException"
|
||||
val KOTLIN_NULL_PTR_EXCEPTION_FQ = "kotlin.KotlinNullPointerException"
|
||||
|
||||
fun JetBinaryExpression.comparesNonNullToNull(): Boolean {
|
||||
val operationToken = this.getOperationToken()
|
||||
@@ -62,7 +71,7 @@ fun JetExpression.extractExpressionIfSingle(): JetExpression? {
|
||||
return innerExpression
|
||||
}
|
||||
|
||||
fun JetSafeQualifiedExpression.isStatement(): Boolean {
|
||||
fun JetExpression.isStatement(): Boolean {
|
||||
val context = AnalyzerFacadeWithCache.getContextForElement(this)
|
||||
|
||||
val expectedType = context.get(BindingContext.EXPECTED_EXPRESSION_TYPE, this);
|
||||
@@ -87,6 +96,21 @@ fun JetExpression.isNullExpression(): Boolean = this.extractExpressionIfSingle()
|
||||
|
||||
fun JetExpression.isNullExpressionOrEmptyBlock(): Boolean = this.isNullExpression() || this is JetBlockExpression && this.getStatements().empty
|
||||
|
||||
fun JetExpression.isThrowExpression(): Boolean = this.extractExpressionIfSingle() is JetThrowExpression
|
||||
|
||||
fun JetThrowExpression.throwsNullPointerExceptionWithNoArguments(): Boolean {
|
||||
val thrownExpression = this.getThrownExpression()
|
||||
if (thrownExpression !is JetCallExpression) return false
|
||||
|
||||
val context = AnalyzerFacadeWithCache.getContextForElement(this)
|
||||
val descriptor = context.get(BindingContext.REFERENCE_TARGET, thrownExpression.getCalleeExpression() as JetSimpleNameExpression)
|
||||
val declDescriptor = descriptor?.getContainingDeclaration()
|
||||
if (declDescriptor == null) return false
|
||||
|
||||
val exceptionName = DescriptorUtils.getFqName(declDescriptor).asString()
|
||||
return (exceptionName == NULL_PTR_EXCEPTION_FQ || exceptionName == KOTLIN_NULL_PTR_EXCEPTION_FQ) && thrownExpression.getValueArguments().isEmpty()
|
||||
}
|
||||
|
||||
fun JetExpression.isNotNullExpression(): Boolean {
|
||||
val innerExpression = this.extractExpressionIfSingle()
|
||||
return innerExpression != null && innerExpression.getText() != "null"
|
||||
@@ -97,8 +121,18 @@ fun JetExpression.evaluatesTo(other: JetExpression): Boolean {
|
||||
}
|
||||
|
||||
fun JetExpression.convertToIfNotNullExpression(conditionLhs: JetExpression, thenClause: JetExpression, elseClause: JetExpression?): JetIfExpression {
|
||||
val condition = JetPsiFactory.createExpression(this.getProject(), "${conditionLhs.getText()} != null")
|
||||
return this.convertToIfStatement(condition, thenClause, elseClause)
|
||||
}
|
||||
|
||||
fun JetExpression.convertToIfNullExpression(conditionLhs: JetExpression, thenClause: JetExpression): JetIfExpression {
|
||||
val condition = JetPsiFactory.createExpression(this.getProject(), "${conditionLhs.getText()} == null")
|
||||
return this.convertToIfStatement(condition, thenClause, null)
|
||||
}
|
||||
|
||||
fun JetExpression.convertToIfStatement(condition: JetExpression, thenClause: JetExpression, elseClause: JetExpression?): JetIfExpression {
|
||||
val elseBranch = if (elseClause == null) "" else " else ${elseClause.getText()}"
|
||||
val conditionalString = "if (${conditionLhs.getText()} != null) ${thenClause.getText()}$elseBranch"
|
||||
val conditionalString = "if (${condition.getText()}) ${thenClause.getText()}$elseBranch"
|
||||
|
||||
val st = this.replace(conditionalString) as JetExpression
|
||||
return JetPsiUtil.deparenthesize(st) as JetIfExpression
|
||||
@@ -136,6 +170,10 @@ fun JetBinaryExpression.inlineLeftSideIfApplicableWithPrompt(editor: Editor) {
|
||||
(this.getLeft() as? JetSimpleNameExpression)?.inlineIfDeclaredLocallyAndOnlyUsedOnceWithPrompt(editor)
|
||||
}
|
||||
|
||||
fun JetPostfixExpression.inlineBaseExpressionIfApplicableWithPrompt(editor: Editor) {
|
||||
(this.getBaseExpression() as? JetSimpleNameExpression)?.inlineIfDeclaredLocallyAndOnlyUsedOnceWithPrompt(editor)
|
||||
}
|
||||
|
||||
fun JetExpression.isStableVariable(): Boolean {
|
||||
val context = AnalyzerFacadeWithCache.getContextForElement(this)
|
||||
val descriptor = BindingContextUtils.extractVariableDescriptorIfAny(context, this, false)
|
||||
|
||||
Reference in New Issue
Block a user