// Decompiled by: Fernflower v0.6
// Date: 16.01.2011 23:16:06
// Copyright: 2008-2009, Stiver
// Home page: http://www.reversed-java.com
package org.antlr.runtime.tree;
import java.util.HashMap;
import java.util.Map;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.Token;
import org.antlr.runtime.TokenStream;
import org.antlr.runtime.tree.CommonErrorNode;
import org.antlr.runtime.tree.Tree;
import org.antlr.runtime.tree.TreeAdaptor;
public abstract class BaseTreeAdaptor implements TreeAdaptor {
protected Map treeToUniqueIDMap;
protected int uniqueNodeID = 1;
public Object nil() {
return this.create((Token)null);
}
public Object errorNode(TokenStream var1, Token var2, Token var3, RecognitionException var4) {
CommonErrorNode var5 = new CommonErrorNode(var1, var2, var3, var4);
return var5;
}
public boolean isNil(Object var1) {
return ((Tree)var1).isNil();
}
public Object dupTree(Object var1) {
return this.dupTree(var1, (Object)null);
}
public Object dupTree(Object var1, Object var2) {
if(var1 == null) {
return null;
} else {
Object var3 = this.dupNode(var1);
this.setChildIndex(var3, this.getChildIndex(var1));
this.setParent(var3, var2);
int var4 = this.getChildCount(var1);
for(int var5 = 0; var5 < var4; ++var5) {
Object var6 = this.getChild(var1, var5);
Object var7 = this.dupTree(var6, var1);
this.addChild(var3, var7);
}
return var3;
}
}
public void addChild(Object var1, Object var2) {
if(var1 != null && var2 != null) {
((Tree)var1).addChild((Tree)var2);
}
}
public Object becomeRoot(Object var1, Object var2) {
Tree var3 = (Tree)var1;
Tree var4 = (Tree)var2;
if(var2 == null) {
return var1;
} else {
if(var3.isNil()) {
int var5 = var3.getChildCount();
if(var5 == 1) {
var3 = var3.getChild(0);
} else if(var5 > 1) {
throw new RuntimeException("more than one node as root (TODO: make exception hierarchy)");
}
}
var3.addChild(var4);
return var3;
}
}
public Object rulePostProcessing(Object var1) {
Tree var2 = (Tree)var1;
if(var2 != null && var2.isNil()) {
if(var2.getChildCount() == 0) {
var2 = null;
} else if(var2.getChildCount() == 1) {
var2 = var2.getChild(0);
var2.setParent((Tree)null);
var2.setChildIndex(-1);
}
}
return var2;
}
public Object becomeRoot(Token var1, Object var2) {
return this.becomeRoot(this.create(var1), var2);
}
public Object create(int var1, Token var2) {
var2 = this.createToken(var2);
var2.setType(var1);
Tree var3 = (Tree)this.create(var2);
return var3;
}
public Object create(int var1, Token var2, String var3) {
var2 = this.createToken(var2);
var2.setType(var1);
var2.setText(var3);
Tree var4 = (Tree)this.create(var2);
return var4;
}
public Object create(int var1, String var2) {
Token var3 = this.createToken(var1, var2);
Tree var4 = (Tree)this.create(var3);
return var4;
}
public int getType(Object var1) {
return ((Tree)var1).getType();
}
public void setType(Object var1, int var2) {
throw new NoSuchMethodError("don\'t know enough about Tree node");
}
public String getText(Object var1) {
return ((Tree)var1).getText();
}
public void setText(Object var1, String var2) {
throw new NoSuchMethodError("don\'t know enough about Tree node");
}
public Object getChild(Object var1, int var2) {
return ((Tree)var1).getChild(var2);
}
public void setChild(Object var1, int var2, Object var3) {
((Tree)var1).setChild(var2, (Tree)var3);
}
public Object deleteChild(Object var1, int var2) {
return ((Tree)var1).deleteChild(var2);
}
public int getChildCount(Object var1) {
return ((Tree)var1).getChildCount();
}
public int getUniqueID(Object var1) {
if(this.treeToUniqueIDMap == null) {
this.treeToUniqueIDMap = new HashMap();
}
Integer var2 = (Integer)this.treeToUniqueIDMap.get(var1);
if(var2 != null) {
return var2.intValue();
} else {
int var3 = this.uniqueNodeID;
this.treeToUniqueIDMap.put(var1, new Integer(var3));
++this.uniqueNodeID;
return var3;
}
}
public abstract Token createToken(int var1, String var2);
public abstract Token createToken(Token var1);
}