Newer
Older
DesignCraft / src / main / java / ast / SuperMethodInvocation.java
package ast;

import java.util.ArrayList;
import java.util.List;

/**
 * Represents a super method invocation in AST (Abstract Syntax Tree)
 *
 * @author s-yamagiwa
 * @apiNote Type arguments aren't supported because it isn't necessary in DTRAM code generator.
 */
public class SuperMethodInvocation extends Expression {
	private String methodName;
	private List<Expression> arguments;
	
	public SuperMethodInvocation(String methodName) {
		this(methodName, List.of());
	}
	
	public SuperMethodInvocation(String methodName, List<Expression> arguments) {
		this.methodName = methodName;
		this.arguments = arguments;
	}
	
	@Override
	public Expression replace(Variable variable, Expression expression) {
		List<Expression> replacedExpressions = new ArrayList<>();
		
		for (Expression argument : arguments) {
			replacedExpressions.add(argument.replace(variable, expression));
		}
		
		return new SuperMethodInvocation(methodName, replacedExpressions);
	}
	
	public String getMethodName() {
		return methodName;
	}
	
	public void setMethodName(String methodName) {
		this.methodName = methodName;
	}
	
	public List<Expression> getArguments() {
		return arguments;
	}
	
	public void setArguments(List<Expression> arguments) {
		this.arguments = arguments;
	}
	
	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		
		builder.append("super.").append(methodName).append("(");
		
		if (!arguments.isEmpty()) {
			for (int i = 0; i < arguments.size(); i++) {
				Expression argument = arguments.get(i);
				
				builder.append(argument.toString());
				
				if (i < arguments.size() - 1) {
					builder.append(", ");
				}
			}
		}
		
		builder.append(");");
		
		return builder.toString();
	}
}