package org.overture.codegen.vdm2java;
import java.util.LinkedList;
import java.util.List;
import org.overture.ast.util.ClonableString;
import org.overture.codegen.ir.IRInfo;
import org.overture.codegen.ir.analysis.AnalysisException;
import org.overture.codegen.ir.analysis.DepthFirstAnalysisAdaptor;
import org.overture.codegen.ir.declarations.ADefaultClassDeclIR;
import org.overture.codegen.ir.declarations.ASystemClassDeclIR;
import org.overture.codegen.ir.declarations.SClassDeclIR;
public class ImportsTrans extends DepthFirstAnalysisAdaptor
{
private IRInfo info;
public ImportsTrans(IRInfo info)
{
this.info = info;
}
@Override
public void caseADefaultClassDeclIR(ADefaultClassDeclIR node)
throws AnalysisException
{
handleClass(node);
}
@Override
public void caseASystemClassDeclIR(ASystemClassDeclIR node)
throws AnalysisException
{
handleClass(node);
}
private void handleClass(SClassDeclIR node)
{
List<ClonableString> dep = new LinkedList<>();
if (!info.getDeclAssistant().isInnerClass(node))
{
dep.add(new ClonableString(JavaCodeGen.JAVA_UTIL));
dep.add(new ClonableString(JavaCodeGen.RUNTIME_IMPORT));
} else if (!info.getDeclAssistant().isInnerClass(node) && isQuote(node))
{
dep.add(new ClonableString(JavaCodeGen.RUNTIME_IMPORT));
}
if (importTraceSupport(node))
{
dep.add(new ClonableString(JavaCodeGen.TRACE_IMPORT));
}
node.setDependencies(dep);
}
public static boolean isQuote(SClassDeclIR classCg)
{
return classCg != null
&& JavaCodeGen.JAVA_QUOTES_PACKAGE.equals(classCg.getPackage());
}
public boolean importTraceSupport(SClassDeclIR node)
{
return info.getSettings().generateTraces()
&& !node.getTraces().isEmpty();
}
}