/******************************************************************************* * Copyright (c) 2013 itemis AG (http://www.itemis.eu) 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 *******************************************************************************/ package org.eclipse.emf.ecore.xcore.scoping.types; import java.util.List; import org.eclipse.xtext.common.types.JvmPrimitiveType; import org.eclipse.xtext.common.types.JvmType; import org.eclipse.xtext.common.types.JvmVoid; import org.eclipse.xtext.common.types.access.impl.Primitives; import org.eclipse.xtext.common.types.xtext.AbstractTypeScope; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.resource.EObjectDescription; import org.eclipse.xtext.resource.IEObjectDescription; public class PrimitiveAwareScope extends AbstractXcoreScope { private AbstractTypeScope typeScope; private AbstractXcoreScope parent; public PrimitiveAwareScope(AbstractXcoreScope parent, AbstractTypeScope typeScope) { this.parent = parent; this.typeScope = typeScope; } @Override public IEObjectDescription getSingleElement(QualifiedName name) { if (isPrimitive(name)) { return typeScope.getSingleElement(name, true); } return parent.getSingleElement(name); } protected boolean isPrimitive(QualifiedName name) { return name.getSegmentCount() == 1 && Primitives.forName(name.getFirstSegment()) != null; } @Override protected void doGetElements(JvmType type, List<IEObjectDescription> result) { if (type instanceof JvmVoid) { result.add(EObjectDescription.create("void", type)); return; } if (type instanceof JvmPrimitiveType) { result.add(EObjectDescription.create(((JvmPrimitiveType)type).getSimpleName(), type)); return; } parent.doGetElements(type, result); } }