IDEA-84064 Ctrl-Shift-Enter does not work in annotations

This commit is contained in:
peter
2018-01-03 15:07:35 +01:00
parent a753417bb9
commit 20ca3646d2
6 changed files with 15 additions and 8 deletions
@@ -290,6 +290,7 @@ public class JavaSmartEnterProcessor extends SmartEnterProcessor {
PsiStatement.class,
PsiCodeBlock.class,
PsiMember.class,
PsiAnnotation.class,
PsiComment.class,
PsiImportStatementBase.class,
PsiPackageStatement.class
@@ -305,6 +306,7 @@ public class JavaSmartEnterProcessor extends SmartEnterProcessor {
return statementAtCaret instanceof PsiStatement ||
statementAtCaret instanceof PsiMember ||
statementAtCaret instanceof PsiAnnotation ||
statementAtCaret instanceof PsiImportStatementBase ||
statementAtCaret instanceof PsiPackageStatement
? statementAtCaret
@@ -17,6 +17,7 @@ package com.intellij.codeInsight.editorActions.smartEnter;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiArrayInitializerExpression;
import com.intellij.psi.PsiArrayInitializerMemberValue;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiErrorElement;
import com.intellij.util.IncorrectOperationException;
@@ -25,11 +26,10 @@ import com.intellij.util.containers.ContainerUtil;
public class MissingArrayInitializerBraceFixer implements Fixer {
@Override
public void apply(Editor editor, JavaSmartEnterProcessor processor, PsiElement psiElement) throws IncorrectOperationException {
if (!(psiElement instanceof PsiArrayInitializerExpression)) return;
PsiArrayInitializerExpression expr = (PsiArrayInitializerExpression)psiElement;
if (!expr.getText().endsWith("}")) {
PsiErrorElement err = ContainerUtil.findInstance(expr.getChildren(), PsiErrorElement.class);
int endOffset = (err != null ? err : expr).getTextRange().getEndOffset();
if (!(psiElement instanceof PsiArrayInitializerExpression || psiElement instanceof PsiArrayInitializerMemberValue)) return;
if (!psiElement.getText().endsWith("}")) {
PsiErrorElement err = ContainerUtil.findInstance(psiElement.getChildren(), PsiErrorElement.class);
int endOffset = (err != null ? err : psiElement).getTextRange().getEndOffset();
editor.getDocument().insertString(endOffset, "}");
}
}
@@ -17,8 +17,8 @@ package com.intellij.codeInsight.editorActions.smartEnter;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiAnnotationParameterList;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiParameter;
import com.intellij.psi.PsiParameterList;
import com.intellij.util.IncorrectOperationException;
@@ -29,10 +29,11 @@ import com.intellij.util.IncorrectOperationException;
public class ParameterListFixer implements Fixer {
@Override
public void apply(Editor editor, JavaSmartEnterProcessor processor, PsiElement psiElement) throws IncorrectOperationException {
if (psiElement instanceof PsiParameterList) {
if (psiElement instanceof PsiParameterList || psiElement instanceof PsiAnnotationParameterList) {
String text = psiElement.getText();
if (StringUtil.startsWithChar(text, '(') && !StringUtil.endsWithChar(text, ')')) {
PsiParameter[] params = ((PsiParameterList)psiElement).getParameters();
PsiElement[] params = psiElement instanceof PsiParameterList ? ((PsiParameterList)psiElement).getParameters()
: ((PsiAnnotationParameterList)psiElement).getAttributes();
int offset;
if (params.length == 0) {
offset = psiElement.getTextRange().getStartOffset() + 1;
@@ -0,0 +1 @@
@SuppressWarnings({"fallthrough", "finally"<caret>
@@ -0,0 +1,2 @@
@SuppressWarnings({"fallthrough", "finally"})
<caret>
@@ -123,6 +123,7 @@ public class CompleteStatementTest extends EditorActionTestCase {
public void testMethodBeforeAnnotation() { doTest(); }
public void testMethodBeforeCommentField() { doTest(); }
public void testMethodBeforeCommentMethod() { doTest(); }
public void testCloseAnnotationWithArrayInitializer() { doTest(); }
public void testParenthesized() { doTest(); }
public void testCompleteBreak() { doTest(); }
public void testCompleteIfNextLineBraceStyle() { myJavaSettings.BRACE_STYLE = CommonCodeStyleSettings.NEXT_LINE; doTest(); }