Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / code / ast / Block.java
package code.ast;

import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;

public class Block extends Statement {
	private List<Statement> statements = new ArrayList<>();

	public List<Statement> getStatements2() {
		return statements;
	}

	public void setStatements(List<Statement> statements) {
		this.statements = statements;
	}
	
	public void addFirstStatement(Statement statement) {
		statements.add(0, statement);
	}

	public void addStatement(Statement statement) {
		statements.add(statement);
	}

	public void addFirstStatements(List<Statement> statements) {
		this.statements.addAll(0, statements);
	}

	public void addStatements(List<Statement> statements) {
		this.statements.addAll(statements);
	}
	
	public boolean contains(List<Statement> statements) {
		if (statements.size() == 0) return true;
		for (int i = 0; i < this.statements.size(); i++) {
			Statement st = this.statements.get(i);
			if (st.equals(statements.get(0))) {
				if (statements.size() == 1) return true;
				int j = 1;
				for (int k = i + 1; k < this.statements.size(); k++) {
					Statement st2 = this.statements.get(k);
					if (st2.equals(statements.get(j))) {
						j++;
						if (j == statements.size()) return true;
					}
				}
			}
		}
		return false;
	}

	//====================================================
	//TODO: CodeGenerator修正後削除

	public List<String> getStatements() {
		List<String> strings = new ArrayList<>();
		for (Statement stmt : statements) {
			if (stmt != null) {
				strings.add(stmt.toString());
			}
		}
		return strings;
	}

	public void addFirstStatement(String statement) {
		if (statement != null) {
			this.addFirstStatement(new Statement() {
				@Override
				public String toString() {
					return statement;
				}
			});
		}
	}

	public void addStatement(String statement) {
		if (statement != null) {
			this.addStatement(new PlainStatement(statement));
		}
	}

	//====================================================


	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append("{\n");

		for (Statement statement : statements) {
			if (statement != null) {
				String content = statement.toString();

				// split statement
				String[] lines = content.split("\n");

				// Tab
				for (String line : lines) {
					sb.append("\t").append(line).append("\n");
				}
			}
		}

		sb.append("}");
		return sb.toString();
	}
}