blob: ed40dd493db9119551d2f951774de7d7a4adbc09 [file] [log] [blame]
/*
* 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("\\."));
}
}