WALA/com.ibm.wala.cast/source/java/com/ibm/wala/cast/ir/translator/RewritingTranslatorToCAst.java

42 lines
1.3 KiB
Java

package com.ibm.wala.cast.ir.translator;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import com.ibm.wala.cast.tree.CAstEntity;
import com.ibm.wala.cast.tree.impl.CAstImpl;
import com.ibm.wala.cast.tree.rewrite.CAstRewriter.CopyKey;
import com.ibm.wala.cast.tree.rewrite.CAstRewriter.RewriteContext;
import com.ibm.wala.cast.tree.rewrite.CAstRewriterFactory;
import com.ibm.wala.classLoader.ModuleEntry;
public class RewritingTranslatorToCAst implements TranslatorToCAst {
private final List<CAstRewriterFactory<?, ?>> rewriters = new LinkedList<>();
protected final ModuleEntry M;
private final TranslatorToCAst base;
public RewritingTranslatorToCAst(ModuleEntry m2, TranslatorToCAst base) {
this.M = m2;
this.base = base;
}
@Override
public <C extends RewriteContext<K>, K extends CopyKey<K>> void addRewriter(CAstRewriterFactory<C, K> factory, boolean prepend) {
if(prepend)
rewriters.add(0, factory);
else
rewriters.add(factory);
}
@Override
public CAstEntity translateToCAst() throws IOException, Error {
CAstImpl Ast = new CAstImpl();
CAstEntity entity = base.translateToCAst();
for(CAstRewriterFactory<?, ?> rwf : rewriters)
entity = rwf.createCAstRewriter(Ast).rewrite(entity);
return entity;
}
}