diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index 7310227a80f0..0733f3151d97 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -426,7 +426,7 @@ public class JavaCompletionContributor extends CompletionContributor { if (JavaCompletionData.isAfterPrimitiveOrArrayType(position)) { return false; } - + return true; } @@ -466,11 +466,11 @@ public class JavaCompletionContributor extends CompletionContributor { methods: for (PsiMethod method : annoClass.getMethods()) { if (!(method instanceof PsiAnnotationMethod)) continue; - + final String attrName = method.getName(); for (PsiNameValuePair existingAttr : existingPairs) { if (PsiTreeUtil.isAncestor(existingAttr, insertedElement, false)) break; - if (Comparing.equal(existingAttr.getName(), attrName) || + if (Comparing.equal(existingAttr.getName(), attrName) || PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME.equals(attrName) && existingAttr.getName() == null) continue methods; } LookupElementBuilder element = LookupElementBuilder.createWithIcon(method).withInsertHandler(new InsertHandler() { @@ -479,7 +479,7 @@ public class JavaCompletionContributor extends CompletionContributor { final Editor editor = context.getEditor(); TailType.EQ.processTail(editor, editor.getCaretModel().getOffset()); context.setAddCompletionChar(false); - + context.commitDocument(); PsiAnnotationParameterList paramList = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiAnnotationParameterList.class, false); @@ -702,7 +702,13 @@ public class JavaCompletionContributor extends CompletionContributor { iterator.advance(); } - if (!iterator.atEnd() && (iterator.getTokenType() == JavaTokenType.LPARENTH || iterator.getTokenType() == JavaTokenType.COLON)) { + if (!iterator.atEnd() && (iterator.getTokenType() == JavaTokenType.LPARENTH)) { + return true; + } + + if (!iterator.atEnd() + && (iterator.getTokenType() == JavaTokenType.COLON) + && null == PsiTreeUtil.findElementOfClassAtOffset(file, startOffset, PsiConditionalExpression.class, false)) { return true; } diff --git a/java/java-tests/testData/codeInsight/template/postfix/templates/cast/ternary.java b/java/java-tests/testData/codeInsight/template/postfix/templates/cast/ternary.java new file mode 100644 index 000000000000..0e0ff3741921 --- /dev/null +++ b/java/java-tests/testData/codeInsight/template/postfix/templates/cast/ternary.java @@ -0,0 +1,5 @@ +public class Foo { + void m(String s) { + Object o = s.isEmpty() ? s.concat("a").cast : s.concat("b"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/template/postfix/templates/cast/ternary_after.java b/java/java-tests/testData/codeInsight/template/postfix/templates/cast/ternary_after.java new file mode 100644 index 000000000000..486e88ba2dc3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/template/postfix/templates/cast/ternary_after.java @@ -0,0 +1,5 @@ +public class Foo { + void m(String s) { + Object o = s.isEmpty() ? (() s.concat("a")) : s.concat("b"); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/template/postfix/templates/CastPostfixTemplateTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/template/postfix/templates/CastPostfixTemplateTest.java index d5cae6ab30cf..9a50a6b353c5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/template/postfix/templates/CastPostfixTemplateTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/template/postfix/templates/CastPostfixTemplateTest.java @@ -43,4 +43,7 @@ public class CastPostfixTemplateTest extends PostfixTemplateTestCase { public void testChainCall() { doTest(); } + public void testTernary() { + doTest(); + } }