From f4bd91746a458f523c033bab7f2010a214718b43 Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Tue, 15 Jan 2013 18:25:30 +0400 Subject: [PATCH] IDEA-98976 Spock: double pipe in table header --- .../plugins/groovy/spock/SpockUtils.java | 36 +++++++++---------- .../plugins/groovy/spock/SpockTest.groovy | 4 +-- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java index bd232aac6943..eb0d4e6e34f8 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/spock/SpockUtils.java @@ -2,6 +2,7 @@ package org.jetbrains.plugins.groovy.spock; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -13,11 +14,11 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrLabeledStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrOpenBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrBinaryExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.arithmetic.GrShiftExpressionImpl; -import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.bitwise.GrBitwiseExpressionImpl; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.util.LightCacheKey; @@ -198,8 +199,13 @@ public class SpockUtils { } private static boolean isOrStatement(PsiElement element) { - return element instanceof GrBitwiseExpressionImpl - && ((GrBitwiseExpressionImpl)element).getOperationTokenType() == GroovyTokenTypes.mBOR; + if (element instanceof GrBinaryExpression) { + IElementType type = ((GrBinaryExpression)element).getOperationTokenType(); + + return type == GroovyTokenTypes.mBOR || type == GroovyTokenTypes.mLOR; + } + + return false; } @Nullable @@ -233,23 +239,15 @@ public class SpockUtils { return ref.getName(); } + // See org.spockframework.compiler.WhereBlockRewriter#splitRow() private static void splitOr(List res, GrExpression element) { - GrExpression e = element; - - while (true) { - if (e instanceof GrBitwiseExpressionImpl) { - GrBitwiseExpressionImpl be = (GrBitwiseExpressionImpl)e; - if (be.getOperationTokenType() == GroovyTokenTypes.mBOR) { - res.add(be.getRightOperand()); - e = be.getLeftOperand(); - continue; - } - } - - res.add(e); - break; + if (isOrStatement(element)) { + GrBinaryExpression be = (GrBinaryExpression)element; + splitOr(res, be.getLeftOperand()); + splitOr(res, be.getRightOperand()); + } + else { + res.add(element); } - - Collections.reverse(res); } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy index 64ee9f5e28f2..4df8d7b92392 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/spock/SpockTest.groovy @@ -56,8 +56,8 @@ class FooSpec extends spock.lang.Specification { varShl << ['aaa', 'bbb'] [varShl1, varShl2, varShl3] << [['aaa', 'bbb', 'ccc'], ['aaa', 'bbb', 'ccc'], ['aaa', 'bbb', 'ccc']] - varTable1|varTable2|varTable3|varTable4 - ""|""|""|"" + varTable1|varTable2|varTable3||varTable4 + ""|""|""||"" } } """)