AbstractSyntaxTree.java
package edu.udel.cis.vsl.tass.ast.impl;
import java.io.File;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import edu.udel.cis.vsl.tass.ast.IF.ASTFactoryIF;
import edu.udel.cis.vsl.tass.ast.IF.ASTNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.AbstractSyntaxTreeIF;
import edu.udel.cis.vsl.tass.ast.IF.FileNodeIF;
import edu.udel.cis.vsl.tass.ast.IF.RootNodeIF;
public class AbstractSyntaxTree implements AbstractSyntaxTreeIF {
private final ASTFactoryIF factory;
private RootNodeIF rootNode = null;
private Map<File,FileNodeIF> files = new HashMap<File,FileNodeIF>();
public AbstractSyntaxTree() {
factory = new ASTFactory();
}
@Override
public Collection<FileNodeIF> files() {
return files.values();
}
@Override
public void setFiles(Collection<FileNodeIF> mFiles) {
files.clear();
for (FileNodeIF file : mFiles) {
files.put(file.getFile(),file);
}
}
@Override
public ASTFactoryIF factory() {
return factory;
}
@Override
public FileNodeIF getFileNode(File file) {
return files.get(file);
}
@Override
public void setRootNode(RootNodeIF mRootNode) {
rootNode = mRootNode;
}
@Override
public RootNodeIF rootNode() {
return rootNode;
}
@Override
public long numberOfNodes() {
return countNodes(rootNode);
}
@Override
public void print(PrintWriter out) {
rootNode().print("",out);
}
private int countNodes(ASTNodeIF node) {
if (node == null) {
return 0;
}
int retVal = 1;
Iterator<ASTNodeIF> it = node.children();
while (it.hasNext()) {
retVal += countNodes(it.next());
}
return retVal;
}
}