From 687bbdf3731a80d42daf9b0cefd2a7011115db77 Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Mon, 31 Jan 2011 00:20:37 +0300 Subject: [PATCH] IDEA-64741 Elvis inspection bug --- .../UnaryExpressionNotPlusMinus.java | 3 +- .../lang/parser/ExpressionsParsingTest.groovy | 2 ++ .../expressions/typecast/conditional.test | 35 +++++++++++++++++++ .../groovy/expressions/typecast/elvis.test | 32 +++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 plugins/groovy/testdata/parsing/groovy/expressions/typecast/conditional.test create mode 100644 plugins/groovy/testdata/parsing/groovy/expressions/typecast/elvis.test diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/arithmetic/UnaryExpressionNotPlusMinus.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/arithmetic/UnaryExpressionNotPlusMinus.java index 989cd873d211..de2b17872776 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/arithmetic/UnaryExpressionNotPlusMinus.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/arithmetic/UnaryExpressionNotPlusMinus.java @@ -21,6 +21,7 @@ import org.jetbrains.plugins.groovy.GroovyBundle; import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; import org.jetbrains.plugins.groovy.lang.parser.GroovyParser; +import org.jetbrains.plugins.groovy.lang.parser.parsing.statements.expressions.ConditionalExpression; import org.jetbrains.plugins.groovy.lang.parser.parsing.statements.typeDefinitions.ReferenceElement; import org.jetbrains.plugins.groovy.lang.parser.parsing.types.TypeSpec; import org.jetbrains.plugins.groovy.lang.parser.parsing.util.ParserUtils; @@ -41,7 +42,7 @@ public class UnaryExpressionNotPlusMinus implements GroovyElementTypes { if (builder.getTokenType() == mLPAREN) { final ReferenceElement.ReferenceElementResult result = parseTypeCast(builder); if (result != fail) { - if (UnaryExpression.parse(builder, parser) || result == ReferenceElement.ReferenceElementResult.mustBeType) { + if (ConditionalExpression.parse(builder, parser) || result == ReferenceElement.ReferenceElementResult.mustBeType) { marker.done(CAST_EXPRESSION); return true; } else { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy index d8eea7e836cf..32971c1bd12d 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/parser/ExpressionsParsingTest.groovy @@ -187,6 +187,8 @@ public class ExpressionsParsingTest extends GroovyParsingTestCase { public void testtypecast$una4() throws Throwable { doTest(); } public void testtypecast$una5() throws Throwable { doTest(); } public void testtypecast$una6() throws Throwable { doTest(); } + public void testtypecast$elvis() throws Throwable { doTest(); } + public void testtypecast$conditional() throws Throwable { doTest(); } public void testAtHang() throws Throwable { doTest(); } public void testDollar() throws Throwable { doTest(); } diff --git a/plugins/groovy/testdata/parsing/groovy/expressions/typecast/conditional.test b/plugins/groovy/testdata/parsing/groovy/expressions/typecast/conditional.test new file mode 100644 index 000000000000..458db889dfde --- /dev/null +++ b/plugins/groovy/testdata/parsing/groovy/expressions/typecast/conditional.test @@ -0,0 +1,35 @@ +def list = (List) foo?bar: bar +----- +Groovy script + Variable definitions + Modifiers + PsiElement(def)('def') + PsiWhiteSpace(' ') + Variable + PsiElement(identifier)('list') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + Typecast expression + PsiElement(()('(') + Type element + Reference element + PsiElement(identifier)('List') + Type arguments + PsiElement(<)('<') + Type element + Reference element + PsiElement(identifier)('String') + PsiElement(>)('>') + PsiElement())(')') + PsiWhiteSpace(' ') + Conditional expression + Reference expression + PsiElement(identifier)('foo') + PsiElement(?)('?') + Reference expression + PsiElement(identifier)('bar') + PsiElement(:)(':') + PsiWhiteSpace(' ') + Reference expression + PsiElement(identifier)('bar') \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/expressions/typecast/elvis.test b/plugins/groovy/testdata/parsing/groovy/expressions/typecast/elvis.test new file mode 100644 index 000000000000..8aad2fca88f5 --- /dev/null +++ b/plugins/groovy/testdata/parsing/groovy/expressions/typecast/elvis.test @@ -0,0 +1,32 @@ +def list = (List) foo?: bar +----- +Groovy script + Variable definitions + Modifiers + PsiElement(def)('def') + PsiWhiteSpace(' ') + Variable + PsiElement(identifier)('list') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + Typecast expression + PsiElement(()('(') + Type element + Reference element + PsiElement(identifier)('List') + Type arguments + PsiElement(<)('<') + Type element + Reference element + PsiElement(identifier)('String') + PsiElement(>)('>') + PsiElement())(')') + PsiWhiteSpace(' ') + Elvis expression + Reference expression + PsiElement(identifier)('foo') + PsiElement(?:)('?:') + PsiWhiteSpace(' ') + Reference expression + PsiElement(identifier)('bar') \ No newline at end of file