/******************************************************************************* * Copyright (c) 2005, 2006 committers of openArchitectureWare and others. * 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: * committers of openArchitectureWare - initial API and implementation *******************************************************************************/ package org.eclipse.internal.xtend.expression.ast; import java.util.Set; import org.eclipse.xtend.expression.AnalysationIssue; import org.eclipse.xtend.expression.EvaluationException; import org.eclipse.xtend.expression.ExecutionContext; import org.eclipse.xtend.typesystem.Type; /** * @author Bernd Kolb * */ public class ConstructorCallExpression extends Expression { private Identifier type; public ConstructorCallExpression(final Identifier type) { this.type = type; } public Identifier getType() { return type; } public String getTypeName() { return type.getValue(); } @Override protected Object evaluateInternal(final ExecutionContext ctx) { final Type t = ctx.getTypeForName(type.getValue()); if (t != null) return t.newInstance(); else throw new EvaluationException("Couldn't find type " + type, this, ctx); } @Override public Type analyzeInternal(final ExecutionContext ctx, final Set<AnalysationIssue> issues) { final Type t = ctx.getTypeForName(type.getValue()); if (t == null) { issues.add(new AnalysationIssue(AnalysationIssue.TYPE_NOT_FOUND, "Type not found : " + type, type)); } // TODO add isAbstract to Type and check it here! return t; } @Override protected String toStringInternal() { return "new " + getTypeName(); } }