Delete paired > after deleting < after any identifier, not just a class-like one
#KT-13279 Fixed
This commit is contained in:
@@ -19,15 +19,20 @@ package org.jetbrains.kotlin.idea.editor;
|
||||
import com.intellij.codeInsight.editorActions.BackspaceHandlerDelegate;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.kotlin.lexer.KtTokens;
|
||||
import org.jetbrains.kotlin.psi.KtFile;
|
||||
|
||||
import static org.jetbrains.kotlin.idea.editor.LtGtTypingUtils.isAfterToken;
|
||||
|
||||
public class KotlinBackspaceHandler extends BackspaceHandlerDelegate {
|
||||
private boolean deleteGt;
|
||||
|
||||
@Override
|
||||
public void beforeCharDeleted(char c, PsiFile file, Editor editor) {
|
||||
int offset = editor.getCaretModel().getOffset() - 1;
|
||||
deleteGt = c =='<' && file instanceof KtFile && LtGtTypingUtils.shouldAutoCloseAngleBracket(offset, editor);
|
||||
deleteGt = c =='<' && file instanceof KtFile &&
|
||||
(isAfterToken(offset, editor, KtTokens.FUN_KEYWORD) ||
|
||||
isAfterToken(offset, editor, KtTokens.IDENTIFIER));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import org.jetbrains.kotlin.lexer.KtToken;
|
||||
import org.jetbrains.kotlin.lexer.KtTokens;
|
||||
|
||||
final class LtGtTypingUtils {
|
||||
@@ -43,7 +44,7 @@ final class LtGtTypingUtils {
|
||||
}
|
||||
|
||||
static boolean shouldAutoCloseAngleBracket(int offset, Editor editor) {
|
||||
return isAfterClassIdentifier(offset, editor) || isAfterFunKeyword(offset, editor);
|
||||
return isAfterClassIdentifier(offset, editor) || isAfterToken(offset, editor, KtTokens.FUN_KEYWORD);
|
||||
}
|
||||
|
||||
private static boolean isAfterClassIdentifier(int offset, Editor editor) {
|
||||
@@ -59,7 +60,7 @@ final class LtGtTypingUtils {
|
||||
return JavaTypedHandler.isClassLikeIdentifier(offset, editor, iterator, KtTokens.IDENTIFIER);
|
||||
}
|
||||
|
||||
private static boolean isAfterFunKeyword(int offset, Editor editor) {
|
||||
static boolean isAfterToken(int offset, Editor editor, KtToken tokenType) {
|
||||
HighlighterIterator iterator = ((EditorEx) editor).getHighlighter().createIterator(offset);
|
||||
if (iterator.atEnd()) {
|
||||
return false;
|
||||
@@ -73,6 +74,6 @@ final class LtGtTypingUtils {
|
||||
iterator.retreat();
|
||||
}
|
||||
|
||||
return iterator.getTokenType() == KtTokens.FUN_KEYWORD;
|
||||
return iterator.getTokenType() == tokenType;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
val f = ContainerUtil.newArrayList<<caret>>()
|
||||
@@ -0,0 +1 @@
|
||||
val f = ContainerUtil.newArrayList<caret>()
|
||||
+6
@@ -36,6 +36,12 @@ public class BackspaceHandlerTestGenerated extends AbstractBackspaceHandlerTest
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/editor/backspaceHandler"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("typeArguments.kt")
|
||||
public void testTypeArguments() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/backspaceHandler/typeArguments.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("idea/testData/editor/backspaceHandler/stringTemplate")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user