com.synflow.core.transformations.VarTransformation.java Source code

Java tutorial

Introduction

Here is the source code for com.synflow.core.transformations.VarTransformation.java

Source

/*******************************************************************************
 * Copyright (c) 2013-2014 Synflow SAS.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Matthieu Wipliez - initial API and implementation and/or initial documentation
 *******************************************************************************/
package com.synflow.core.transformations;

import static com.synflow.models.util.SwitchUtil.CASCADE;
import static com.synflow.models.util.SwitchUtil.DONE;

import com.google.common.collect.Iterables;
import com.synflow.models.dpn.Action;
import com.synflow.models.dpn.Actor;
import com.synflow.models.dpn.Entity;
import com.synflow.models.dpn.Port;
import com.synflow.models.dpn.Unit;
import com.synflow.models.ir.Procedure;
import com.synflow.models.ir.Var;
import com.synflow.models.ir.util.AbstractIrVisitor;
import com.synflow.models.util.Void;

/**
 * This class defines a module transformation that transforms all procedures in an actor/unit.
 * 
 * @author Matthieu Wipliez
 * 
 */
public class VarTransformation extends ModuleTransformation {

    public VarTransformation() {
    }

    public VarTransformation(AbstractIrVisitor irVisitor) {
        super(irVisitor);
    }

    @Override
    public Void caseAction(Action action) {
        visitProcedure(action.getBody());
        visitProcedure(action.getScheduler());
        return DONE;
    }

    @Override
    public Void caseActor(Actor actor) {
        caseEntity(actor);

        for (Action action : actor.getActions()) {
            doSwitch(action);
        }

        return DONE;
    }

    @Override
    public Void caseEntity(Entity entity) {
        for (Port port : Iterables.concat(entity.getInputs(), entity.getOutputs())) {
            doSwitch(port);
        }

        for (Var var : Iterables.concat(entity.getParameters(), entity.getVariables())) {
            doSwitch(var);
        }

        for (Procedure procedure : entity.getProcedures()) {
            visitProcedure(procedure);
        }

        return DONE;
    }

    @Override
    public Void casePort(Port port) {
        irVisitor.doSwitch(port);
        return DONE;
    }

    @Override
    public Void caseUnit(Unit unit) {
        return CASCADE;
    }

    private void visitProcedure(Procedure procedure) {
        for (Var var : procedure.getParameters()) {
            doSwitch(var);
        }

        for (Var var : procedure.getLocals()) {
            doSwitch(var);
        }
    }

}