| /* |
| * Copyright 2014 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.resources.gss.ast; |
| |
| import com.google.gwt.thirdparty.common.css.compiler.ast.CssConditionalRuleNode; |
| import com.google.gwt.thirdparty.common.css.compiler.ast.CssValueNode; |
| import com.google.gwt.thirdparty.guava.common.base.Preconditions; |
| import com.google.gwt.thirdparty.guava.common.collect.ImmutableList; |
| |
| /** |
| * Represents a conditional rule that needs to be evaluated at runtime. |
| */ |
| public class CssRuntimeConditionalRuleNode extends CssConditionalRuleNode { |
| |
| public CssRuntimeConditionalRuleNode(CssConditionalRuleNode node, |
| CssJavaExpressionNode condition) { |
| super(node.getType(), node.getName().deepCopy(), null, |
| node.getBlock() != null ? node.getBlock().deepCopy() : null); |
| setSourceCodeLocation(node.getSourceCodeLocation()); |
| |
| setRuntimeCondition(condition); |
| } |
| |
| /** |
| * Copy constructor. |
| * |
| * @param node |
| */ |
| public CssRuntimeConditionalRuleNode(CssRuntimeConditionalRuleNode node) { |
| this(node, node.getRuntimeCondition()); |
| } |
| |
| public CssJavaExpressionNode getRuntimeCondition() { |
| if (getType() == Type.ELSE) { |
| Preconditions.checkState(getParametersCount() == 0); |
| return null; |
| } |
| |
| Preconditions.checkState(getParametersCount() == 1); |
| return (CssJavaExpressionNode) this.getParameters().get(0); |
| } |
| |
| private void setRuntimeCondition(CssJavaExpressionNode condition) { |
| Preconditions.checkState(getType() != Type.ELSE); |
| Preconditions.checkState(getParametersCount() <= 1); |
| this.setParameters(ImmutableList.<CssValueNode>of(condition)); |
| } |
| |
| @Override |
| public CssConditionalRuleNode deepCopy() { |
| return new CssRuntimeConditionalRuleNode(this); |
| } |
| } |