package fr.inria.diverse.iot2.iot2.aspects;
import fr.inria.diverse.k3.al.annotationprocessor.Aspect;
import fr.inria.diverse.k3.al.annotationprocessor.OverrideAspectMethod;
import java.util.function.Consumer;
import org.eclipse.emf.common.util.EList;
import fr.inria.diverse.iot2.iot2.iot2.Block;
import fr.inria.diverse.iot2.iot2.iot2.LastStatement;
import fr.inria.diverse.iot2.iot2.iot2.Statement;
import fr.inria.diverse.iot2.iot2.aspects.BlockAspectBlockAspectProperties;
import fr.inria.diverse.iot2.iot2.aspects.ChunkAspect;
import fr.inria.diverse.iot2.iot2.aspects.Environment;
import fr.inria.diverse.iot2.iot2.aspects.LastStatementAspect;
import fr.inria.diverse.iot2.iot2.aspects.StatementAspect;
@Aspect(className = Block.class)
@SuppressWarnings("all")
public class BlockAspect extends ChunkAspect {
@OverrideAspectMethod
public static void execute(final Block _self, final Environment c) {
fr.inria.diverse.iot2.iot2.aspects.BlockAspectBlockAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.BlockAspectBlockAspectContext.getSelf(_self);
if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Block){
fr.inria.diverse.iot2.iot2.aspects.BlockAspect._privk3_execute(_self_, (fr.inria.diverse.iot2.iot2.iot2.Block)_self,c);
} else if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Chunk){
fr.inria.diverse.iot2.iot2.aspects.ChunkAspect.execute((fr.inria.diverse.iot2.iot2.iot2.Chunk)_self,c);
} else { throw new IllegalArgumentException("Unhandled parameter types: " + java.util.Arrays.<Object>asList(_self).toString()); };
}
private static void super_execute(final Block _self, final Environment c) {
fr.inria.diverse.iot2.iot2.aspects.ChunkAspectChunkAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ChunkAspectChunkAspectContext.getSelf(_self);
fr.inria.diverse.iot2.iot2.aspects.ChunkAspect._privk3_execute(_self_, _self,c);
}
protected static void _privk3_execute(final BlockAspectBlockAspectProperties _self_, final Block _self, final Environment c) {
EList<Statement> _statements = _self.getStatements();
final Consumer<Statement> _function = (Statement s) -> {
StatementAspect.execute(s, c);
};
_statements.forEach(_function);
LastStatement _returnValue = _self.getReturnValue();
if (_returnValue!=null) {
LastStatementAspect.execute(_returnValue, c);
}
}
}