/******************************************************************************* * Copyright (c) 2008,2010 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.mwe2.language.scoping; import static com.google.common.collect.Lists.*; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.mwe2.language.mwe2.Module; import org.eclipse.emf.mwe2.runtime.workflow.IWorkflow; import org.eclipse.xtext.scoping.impl.ImportNormalizer; import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider; public class NamespaceAwareScopeProvider extends ImportedNamespaceAwareLocalScopeProvider { @Override protected List<ImportNormalizer> getImplicitImports(boolean ignoreCase) { List<ImportNormalizer> result = newArrayList(); result.add(createImportedNamespaceResolver("java.lang.*", ignoreCase)); result.add(createImportedNamespaceResolver(IWorkflow.class.getPackage().getName() + ".*", ignoreCase)); return result; } @Override protected boolean isRelativeImport() { return false; } @Override protected List<ImportNormalizer> internalGetImportedNamespaceResolvers(final EObject context, boolean ignoreCase) { List<ImportNormalizer> list = super.internalGetImportedNamespaceResolvers(context, ignoreCase); if (context instanceof Module) { list = newArrayList(list); String name = ((Module) context).getCanonicalName(); int dot = name.lastIndexOf('.'); if (dot >= 0) { name = name.substring(0, dot) + ".*"; list.add(createImportedNamespaceResolver(name, ignoreCase)); } } return list; } }