KT-4683 KotlinNullPointerException at remove braces intention
#KT-4683 fixed EA-54686 fixed EA-54687 fixed
This commit is contained in:
@@ -32,35 +32,32 @@ import org.jetbrains.jet.JetNodeTypes
|
||||
import com.intellij.psi.PsiWhiteSpace
|
||||
|
||||
public class AddBracesIntention : JetSelfTargetingIntention<JetExpressionImpl>("add.braces", javaClass()) {
|
||||
private var expressionKind: ExpressionKind? = null
|
||||
private var caretLocation: Int = 1
|
||||
|
||||
override fun isAvailable(project: Project, editor: Editor, file: PsiFile): Boolean {
|
||||
caretLocation = editor.getCaretModel().getOffset()
|
||||
return getTarget(editor, file) != null
|
||||
override fun isApplicableTo(element: JetExpressionImpl): Boolean {
|
||||
throw IllegalStateException("isApplicableTo(JetExpressionImpl, Editor) should be called instead")
|
||||
}
|
||||
|
||||
override fun isApplicableTo(element: JetExpressionImpl): Boolean {
|
||||
expressionKind = element.getExpressionKind(caretLocation)
|
||||
override fun isApplicableTo(element: JetExpressionImpl, editor: Editor): Boolean {
|
||||
val expressionKind = element.getExpressionKind(editor.getCaretModel().getOffset())
|
||||
if (expressionKind == null) return false
|
||||
|
||||
val jetBlockElement = element.findBlockInExpression(expressionKind)
|
||||
if (jetBlockElement != null) return false
|
||||
|
||||
setText("Add braces to '${expressionKind!!.text}' statement")
|
||||
setText("Add braces to '${expressionKind.text}' statement")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun applyTo(element: JetExpressionImpl, editor: Editor) {
|
||||
val expressionKind = element.getExpressionKind(editor.getCaretModel().getOffset())!!
|
||||
val bodyNode = when (expressionKind) {
|
||||
ExpressionKind.ELSE -> element.getNode().findChildByType(JetNodeTypes.ELSE)
|
||||
ExpressionKind.IF -> element.getNode().findChildByType(JetNodeTypes.THEN)
|
||||
else -> element.getNode().findChildByType(JetNodeTypes.BODY)
|
||||
}
|
||||
generateCleanOutput(element, bodyNode)
|
||||
generateCleanOutput(element, bodyNode, expressionKind)
|
||||
}
|
||||
|
||||
fun generateCleanOutput(element: JetExpressionImpl, bodyNode: ASTNode?) {
|
||||
fun generateCleanOutput(element: JetExpressionImpl, bodyNode: ASTNode?, expressionKind: ExpressionKind) {
|
||||
if (element.getNextSibling()?.getText() == ";") {
|
||||
element.getNextSibling()!!.delete()
|
||||
}
|
||||
|
||||
@@ -30,11 +30,12 @@ public abstract class JetSelfTargetingIntention<T: JetElement>(val key: String,
|
||||
}
|
||||
|
||||
protected abstract fun isApplicableTo(element: T): Boolean
|
||||
protected open fun isApplicableTo(element: T, editor: Editor): Boolean = isApplicableTo(element)
|
||||
protected abstract fun applyTo(element: T, editor: Editor)
|
||||
|
||||
protected fun getTarget(editor: Editor, file: PsiFile): T? {
|
||||
val offset = editor.getCaretModel().getOffset()
|
||||
return file.findElementAt(offset)?.getParentByTypesAndPredicate(false, elementType) { element -> isApplicableTo(element) }
|
||||
return file.findElementAt(offset)?.getParentByTypesAndPredicate(false, elementType) { element -> isApplicableTo(element, editor) }
|
||||
}
|
||||
|
||||
public override fun getFamilyName(): String {
|
||||
|
||||
@@ -30,29 +30,27 @@ import com.intellij.psi.PsiWhiteSpace
|
||||
import com.intellij.psi.PsiComment
|
||||
|
||||
public class RemoveBracesIntention : JetSelfTargetingIntention<JetExpressionImpl>("remove.braces", javaClass()) {
|
||||
private var expressionKind: ExpressionKind? = null
|
||||
private var caretLocation: Int = 1
|
||||
|
||||
override fun isAvailable(project: Project, editor: Editor, file: PsiFile): Boolean {
|
||||
caretLocation = editor.getCaretModel().getOffset()
|
||||
return getTarget(editor, file) != null
|
||||
override fun isApplicableTo(element: JetExpressionImpl): Boolean {
|
||||
throw IllegalStateException("isApplicableTo(JetExpressionImpl, Editor) should be called instead")
|
||||
}
|
||||
|
||||
override fun isApplicableTo(element: JetExpressionImpl): Boolean {
|
||||
expressionKind = element.getExpressionKind(caretLocation)
|
||||
override fun isApplicableTo(element: JetExpressionImpl, editor: Editor): Boolean {
|
||||
val expressionKind = element.getExpressionKind(editor.getCaretModel().getOffset())
|
||||
if (expressionKind == null) return false
|
||||
|
||||
val jetBlockElement = element.findBlockInExpression(expressionKind)
|
||||
if (jetBlockElement == null) return false
|
||||
|
||||
if (jetBlockElement!!.getStatements().size == 1) {
|
||||
setText("Remove braces from '${expressionKind!!.text}' statement")
|
||||
if (jetBlockElement.getStatements().size == 1) {
|
||||
setText("Remove braces from '${expressionKind.text}' statement")
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
override fun applyTo(element: JetExpressionImpl, editor: Editor) {
|
||||
val expressionKind = element.getExpressionKind(editor.getCaretModel().getOffset())!!
|
||||
|
||||
val jetBlockElement = element.findBlockInExpression(expressionKind)
|
||||
val firstStatement = jetBlockElement!!.getStatements().first()
|
||||
|
||||
@@ -63,7 +61,6 @@ public class RemoveBracesIntention : JetSelfTargetingIntention<JetExpressionImpl
|
||||
if (expressionKind == ExpressionKind.DOWHILE) {
|
||||
newElement.getParent()!!.addAfter(JetPsiFactory.createNewLine(element.getProject()), newElement)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun handleComments(element: JetExpressionImpl, blockElement: JetBlockExpression) {
|
||||
|
||||
Reference in New Issue
Block a user