package com.github.sommeri.less4j.core.compiler.scopes.local;
import java.util.List;
import com.github.sommeri.less4j.core.ast.ASTCssNode;
import com.github.sommeri.less4j.core.ast.AbstractVariableDeclaration;
import com.github.sommeri.less4j.core.ast.Expression;
import com.github.sommeri.less4j.core.ast.ReusableStructure;
import com.github.sommeri.less4j.core.ast.ReusableStructureName;
import com.github.sommeri.less4j.core.ast.Variable;
import com.github.sommeri.less4j.core.compiler.expressions.ExpressionFilter;
import com.github.sommeri.less4j.core.compiler.scopes.FullMixinDefinition;
import com.github.sommeri.less4j.core.compiler.scopes.ILocalScope;
import com.github.sommeri.less4j.core.compiler.scopes.IScope;
public class SaveableLocalScope implements ILocalScope {
private final ILocalScope originalLocalScope;
private ILocalScope savedData;
public SaveableLocalScope(ILocalScope originalLocalScope) {
super();
this.originalLocalScope = originalLocalScope;
}
public void save() {
this.savedData = getActiveLocalScope().cloneCurrentDataSnapshot();
}
private ILocalScope getActiveLocalScope() {
if (savedData!=null)
return savedData;
return originalLocalScope;
}
public Expression getValue(Variable variable) {
return getActiveLocalScope().getValue(variable);
}
public Expression getValue(String name) {
return getActiveLocalScope().getValue(name);
}
public ASTCssNode getOwner() {
return getActiveLocalScope().getOwner();
}
public String getType() {
return getActiveLocalScope().getType();
}
public boolean isBodyOwnerScope() {
return getActiveLocalScope().isBodyOwnerScope();
}
public void removedFromAst() {
getActiveLocalScope().removedFromAst();
}
public boolean isPresentInAst() {
return getActiveLocalScope().isPresentInAst();
}
public void addNames(List<String> names) {
getActiveLocalScope().addNames(names);
}
public List<String> getNames() {
return getActiveLocalScope().getNames();
}
public void registerVariable(AbstractVariableDeclaration declaration) {
getActiveLocalScope().registerVariable(declaration);
}
public void registerVariable(AbstractVariableDeclaration node, Expression replacementValue) {
getActiveLocalScope().registerVariable(node, replacementValue);
}
public void registerVariableIfNotPresent(String name, Expression replacementValue) {
getActiveLocalScope().registerVariableIfNotPresent(name, replacementValue);
}
public void registerVariable(String name, Expression replacementValue) {
getActiveLocalScope().registerVariable(name, replacementValue);
}
public void addFilteredVariables(ExpressionFilter filter, IScope source) {
getActiveLocalScope().addFilteredVariables(filter, source);
}
public void addAllMixins(List<FullMixinDefinition> mixins) {
getActiveLocalScope().addAllMixins(mixins);
}
public void registerMixin(ReusableStructure mixin, IScope mixinsBodyScope) {
getActiveLocalScope().registerMixin(mixin, mixinsBodyScope);
}
public DataPlaceholder createDataPlaceholder() {
return getActiveLocalScope().createDataPlaceholder();
}
public void addToDataPlaceholder(IScope otherScope) {
getActiveLocalScope().addToDataPlaceholder(otherScope);
}
public void replacePlaceholder(DataPlaceholder placeholder, IScope otherScope) {
getActiveLocalScope().replacePlaceholder(placeholder, otherScope);
}
public void closeDataPlaceholder() {
getActiveLocalScope().closeDataPlaceholder();
}
public void add(IScope otherSope) {
getActiveLocalScope().add(otherSope);
}
public LocalScopeData getLocalData() {
return getActiveLocalScope().getLocalData();
}
public ILocalScope cloneCurrentDataSnapshot() {
return getActiveLocalScope().cloneCurrentDataSnapshot();
}
public boolean hasTheSameLocalData(ILocalScope otherScope) {
return getActiveLocalScope().hasTheSameLocalData(otherScope);
}
public void createCurrentDataSnapshot() {
getActiveLocalScope().createCurrentDataSnapshot();
}
public void createOriginalDataSnapshot() {
getActiveLocalScope().createOriginalDataSnapshot();
}
public void discardLastDataSnapshot() {
getActiveLocalScope().discardLastDataSnapshot();
}
public MixinsDefinitionsStorage getLocalMixins() {
return getActiveLocalScope().getLocalMixins();
}
public VariablesDeclarationsStorage getLocalVariables() {
return getActiveLocalScope().getLocalVariables();
}
public List<FullMixinDefinition> getAllMixins() {
return getActiveLocalScope().getAllMixins();
}
public List<FullMixinDefinition> getMixinsByName(List<String> nameChain, ReusableStructureName name) {
return getActiveLocalScope().getMixinsByName(nameChain, name);
}
public List<FullMixinDefinition> getMixinsByName(ReusableStructureName name) {
return getActiveLocalScope().getMixinsByName(name);
}
public List<FullMixinDefinition> getMixinsByName(String name) {
return getActiveLocalScope().getMixinsByName(name);
}
public String toString() {
return getActiveLocalScope().toString();
}
}