All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hisrc.jscm.codemodel.impl.FunctionDeclarationImpl Maven / Gradle / Ivy

The newest version!
package org.hisrc.jscm.codemodel.impl;

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

import org.hisrc.jscm.codemodel.JSCodeModel;
import org.hisrc.jscm.codemodel.JSFunctionBody;
import org.hisrc.jscm.codemodel.JSFunctionDeclaration;
import org.hisrc.jscm.codemodel.JSSourceElementVisitor;
import org.hisrc.jscm.codemodel.expression.JSPrimaryExpression;
import org.hisrc.jscm.codemodel.expression.JSVariable;
import org.hisrc.jscm.codemodel.expression.impl.VariableImpl;
import org.hisrc.jscm.codemodel.lang.Validate;

public class FunctionDeclarationImpl implements JSFunctionDeclaration {

	private final JSCodeModel codeModel;
	private final String name;
	private final JSPrimaryExpression functionExpression;

	private final List parameters = new ArrayList();
	private final List unmodifiableParameters = Collections
			.unmodifiableList(parameters);

	private final JSFunctionBody body;

	public FunctionDeclarationImpl(JSCodeModel codeModel, String name) {
		Validate.notNull(codeModel);
		Validate.notNull(name);
		this.codeModel = codeModel;
		this.name = name;
		this.functionExpression = new VariableImpl(codeModel, name);
		this.body = new FunctionBodyImpl(codeModel);
	}

	public JSCodeModel getCodeModel() {
		return codeModel;
	}

	public String getName() {
		return name;
	}
	
	public JSPrimaryExpression getFunctionExpression() {
		return functionExpression;
	}

	public JSFunctionBody getBody() {
		return body;
	}

	public List getParameters() {
		return unmodifiableParameters;
	}

	public JSVariable parameter(String name) {
		Validate.notNull(name);
		JSVariable parameter = new VariableImpl(getCodeModel(), name);
		this.parameters.add(parameter);
		return parameter;
	}

	public  V acceptSourceElementVisitor(
			JSSourceElementVisitor visitor) throws E {
		return visitor.visitFunctionDeclaration(this);
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy