/* * 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.core.ext.Generator; import com.google.gwt.thirdparty.common.css.SourceCodeLocation; import com.google.gwt.thirdparty.common.css.compiler.ast.CssValueNode; import com.google.gwt.thirdparty.guava.common.base.Strings; import java.util.Arrays; import java.util.List; /** * Represents a sequence of no-arg method invocations. */ public class CssDotPathNode extends CssValueNode { public static String resolveExpression(String instance, String path, String prefix, String suffix) { String expression = path.replace(".", "().") + "()"; if (!Strings.isNullOrEmpty(instance)) { expression = instance + "." + expression; } if (!Strings.isNullOrEmpty(prefix)) { expression = "\"" + Generator.escape(prefix) + "\" + " + expression; } if (!Strings.isNullOrEmpty(suffix)) { expression += " + \"" + Generator.escape(suffix) + "\""; } return expression; } private String suffix; private String prefix; private String path; private String instance; public CssDotPathNode(String dotPath, String prefix, String suffix, SourceCodeLocation sourceCodeLocation) { this(null, dotPath, prefix, suffix, sourceCodeLocation); } public CssDotPathNode(String instance, String dotPath, String prefix, String suffix, SourceCodeLocation sourceCodeLocation) { super(resolveExpression(instance, dotPath, prefix, suffix), sourceCodeLocation); this.prefix = prefix; this.suffix = suffix; this.path = dotPath; this.instance = instance; } @Override public CssValueNode deepCopy() { return new CssDotPathNode(instance, path, prefix, suffix, getSourceCodeLocation()); } public String getPath() { return path; } public String getSuffix() { return suffix; } public String getPrefix() { return prefix; } public String getInstance() { return instance; } public List<String> getPathElements() { return Arrays.asList(path.split("\\.")); } }