From 8fd03f4731b641fae1ac2f280b646e8e2d45f5a5 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 12 May 2016 16:01:01 +0200 Subject: [PATCH] [java] fixes diamond type parsing (IDEA-155900) --- .../lang/java/parser/ReferenceParser.java | 8 +++++++- .../psi/parser-partial/references/Type10.txt | 18 ++++++++++++++++++ .../parser/partial/ReferenceParserTest.java | 3 ++- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/psi/parser-partial/references/Type10.txt diff --git a/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java b/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java index 672991f96f25..732f0cf02dbe 100644 --- a/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java +++ b/java/java-psi-impl/src/com/intellij/lang/java/parser/ReferenceParser.java @@ -118,7 +118,13 @@ public class ReferenceParser { parseJavaCodeReference(builder, isSet(flags, EAT_LAST_DOT), true, false, false, false, isSet(flags, DIAMONDS), typeInfo); } else if (isSet(flags, DIAMONDS) && tokenType == JavaTokenType.GT) { - emptyElement(builder, JavaElementType.DIAMOND_TYPE); + if (anno == null) { + emptyElement(builder, JavaElementType.DIAMOND_TYPE); + } + else { + error(builder, JavaErrorMessages.message("expected.identifier")); + typeInfo.hasErrors = true; + } type.done(JavaElementType.TYPE); typeInfo.marker = type; return typeInfo; diff --git a/java/java-tests/testData/psi/parser-partial/references/Type10.txt b/java/java-tests/testData/psi/parser-partial/references/Type10.txt new file mode 100644 index 000000000000..0ede15e06730 --- /dev/null +++ b/java/java-tests/testData/psi/parser-partial/references/Type10.txt @@ -0,0 +1,18 @@ +PsiJavaFile:Type10.java + PsiTypeElement:Diamond<@TA> + PsiJavaCodeReferenceElement:Diamond<@TA> + PsiIdentifier:Diamond('Diamond') + PsiReferenceParameterList + PsiJavaToken:LT('<') + PsiTypeElement:@TA + PsiAnnotation + PsiJavaToken:AT('@') + PsiJavaCodeReferenceElement:TA + PsiIdentifier:TA('TA') + PsiReferenceParameterList + + PsiAnnotationParameterList + + PsiErrorElement:Identifier expected + + PsiJavaToken:GT('>') \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ReferenceParserTest.java b/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ReferenceParserTest.java index 7fd1e5422440..f720e4ba432d 100644 --- a/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ReferenceParserTest.java +++ b/java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ReferenceParserTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,6 +39,7 @@ public class ReferenceParserTest extends JavaParsingTestCase { public void testType7() { doTypeParserTest("Diamond<>"); } public void testType8() { doTypeParserTest("A|"); } public void testType9() { doTypeParserTest("A|B"); } + public void testType10() { doTypeParserTest("Diamond<@TA>"); } public void testTypeParams0() { doTypeParamsParserTest(""); } public void testTypeParams1() { doTypeParamsParserTest(""); }