package sugarVisitors;
import java.util.ArrayList;
import java.util.List;
import tools.Map;
import ast.Expression;
import ast.Ast.Doc;
import ast.Ast.VarDec;
import ast.Expression.ClassB.*;
import ast.Expression.ClassB;
public class FlatFirstLevelLocalNestedClasses extends CloneVisitor{
List<NestedClass> collected=new ArrayList<>();
public static ClassB of(ClassB s,CloneVisitor step) {
FlatFirstLevelLocalNestedClasses v=new FlatFirstLevelLocalNestedClasses();
ClassB result=v.start(s);//to manage super
List<Member> ms2=new ArrayList<>();
for(NestedClass nc:v.collected){
ms2.add(nc.withInner(nc.getInner().accept(step))/*.withDoc(Doc.factory("@private").sum(nc.getDoc()))*/);
}
ms2.addAll(result.getMs());
return result.withMs(ms2);
}
private ClassB start(ClassB s) {
return (ClassB)super.visit(s);
}
public Expression visit(ClassB s) {
return s;
}
protected List<ast.Ast.VarDec> liftVarDecs(List<ast.Ast.VarDec> ds) {
List<ast.Ast.VarDec> result=new ArrayList<>();
for( VarDec d:ds){
if(!(d instanceof ast.Ast.VarDecCE)){
result.add(d);
continue;
}
NestedClass nc=((ast.Ast.VarDecCE)d).getInner();
collected.add(nc);
}
return super.liftVarDecs(result);
}
}