/*******************************************************************************
* Copyright (c) 2005, 2007 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.xtend.types;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.xtend.expression.TypeSystem;
import org.eclipse.xtend.typesystem.MetaModel;
import org.eclipse.xtend.typesystem.Type;
public class XtendMetaModel implements MetaModel {
private final Map<String, Type> types = new HashMap<String, Type>();
public XtendMetaModel(TypeSystem ts) {
setTypeSystem(ts);
AdviceContextType t = new AdviceContextType(ts);
types.put(t.getName(), t);
}
/**
* @see org.eclipse.type.MetaModel#getKnownTypes()
*/
public Set<? extends Type> getKnownTypes() {
return new HashSet<Type>(types.values());
}
/**
* Returns the name of the metamodel.
*
* @return name of metamodel
*/
public String getName() {
return "xtend";
}
/**
* @see org.eclipse.type.MetaModel#getType(java.lang.Object)
*/
public Type getType(Object obj) {
Type bestMatch = null;
for (Type aType : getKnownTypes()) {
if (aType.isInstance(obj)) {
if (bestMatch == null || bestMatch.isAssignableFrom(aType)) {
bestMatch = aType;
}
}
}
return bestMatch;
}
/**
* @see org.eclipse.type.MetaModel#getTypeForName(java.lang.String)
*/
public Type getTypeForName(String typeName) {
return types.get(typeName);
}
private TypeSystem ts = null;
/**
* @see org.eclipse.type.MetaModel#getTypeSystem()
*/
public TypeSystem getTypeSystem() {
return ts;
}
/**
* @see org.eclipse.type.MetaModel#setTypeSystem(org.eclipse.expression.TypeSystem)
*/
public void setTypeSystem(TypeSystem typeSystem) {
ts = typeSystem;
}
/**
* @see org.eclipse.type.MetaModel#getNamespaces()
*/
public Set<String> getNamespaces() {
return new HashSet<String>();
}
}