diff options
Diffstat (limited to 'theme-compiler/src')
-rw-r--r-- | theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java b/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java index 8a62e3abf8..5aa90151b9 100644 --- a/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java +++ b/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java @@ -108,18 +108,39 @@ public class MixinNodeHandler { } } } - - int i = 0; - for (final LexicalUnitImpl unit : remainingUnits) { + checkExtraParameters(mixinNode, remainingNodes.size(), + remainingUnits.size()); + for (int i = 0; i < remainingNodes.size() + && i < remainingUnits.size(); i++) { + LexicalUnitImpl unit = remainingUnits.get(i); remainingNodes.get(i).setExpr( (LexicalUnitImpl) DeepCopy.copy(unit)); - i++; } - } } + protected static void checkExtraParameters(MixinNode mixinNode, + int remainingNodesSize, int remainingUnitsSize) { + if (remainingUnitsSize > remainingNodesSize) { + String fileName = null; + Node root = mixinNode.getParentNode(); + while (root != null && !(root instanceof ScssStylesheet)) { + root = root.getParentNode(); + } + if (root != null) { + fileName = ((ScssStylesheet) root).getFileName(); + } + StringBuilder builder = new StringBuilder(); + builder.append("More parameters than expected, in Mixin ").append( + mixinNode.getName()); + if (fileName != null) { + builder.append(", in file ").append(fileName); + } + throw new RuntimeException(builder.toString()); + } + } + private static void replaceChildVariables(MixinDefNode mixinDef, Node node) { for (final Node child : node.getChildren()) { replaceChildVariables(mixinDef, child); |