blob: b4420f54341f33b97a45615c113b944da7f5e5ef [file] [log] [blame]
package org.eclipse.epsilon.eol.dom;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
import org.eclipse.epsilon.eol.exceptions.models.EolNotInstantiableModelElementTypeException;
import org.eclipse.epsilon.eol.execute.context.IEolContext;
import org.eclipse.epsilon.eol.types.EolCollectionType;
import org.eclipse.epsilon.eol.types.EolMapType;
import org.eclipse.epsilon.eol.types.EolModelElementType;
import org.eclipse.epsilon.eol.types.EolPrimitiveType;
import org.eclipse.epsilon.eol.types.EolType;
public abstract class TypeInitialiser extends Expression {
protected Object initialiseType(EolType type, List<Expression> parameters, IEolContext context, boolean createIfNonPrimitive) throws EolRuntimeException {
if (type instanceof EolPrimitiveType || type instanceof EolCollectionType || type instanceof EolMapType){
return type.createInstance();
}
else if (createIfNonPrimitive) {
if (type instanceof EolModelElementType && !((EolModelElementType) type).isInstantiable()) {
EolModelElementType modelElementType = (EolModelElementType) type;
throw new EolNotInstantiableModelElementTypeException(modelElementType);
}
if (!parameters.isEmpty()) {
ArrayList<Object> parameterValues = new ArrayList<Object>();
for (Expression parameter : parameters) {
parameterValues.add(context.getExecutorFactory().execute(parameter, context));
}
return type.createInstance(parameterValues);
}
else {
return type.createInstance();
}
}
return null;
}
}