blob: ef900e2e706cc474987fa6dce680697450d7037f [file] [log] [blame]
/**
* Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
* 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:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.ecview.dsl.scope;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.common.types.TypesPackage;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.impl.ImportNormalizer;
import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider;
import org.eclipse.osbp.ecview.semantic.uimodel.UiModel;
import org.eclipse.osbp.ecview.semantic.uimodel.UiModelPackage;
import com.google.inject.Inject;
public class UiImportedNamespaceAwareLocalScopeProvider extends
ImportedNamespaceAwareLocalScopeProvider {
@Inject
private IQualifiedNameConverter qualifiedNameConverter;
@Override
protected List<ImportNormalizer> getImplicitImports(boolean ignoreCase) {
List<ImportNormalizer> temp = new ArrayList<ImportNormalizer>(
super.getImplicitImports(ignoreCase));
temp.add(new ImportNormalizer(qualifiedNameConverter
.toQualifiedName("java.util"), true, ignoreCase));
temp.add(new ImportNormalizer(qualifiedNameConverter
.toQualifiedName("java.lang"), true, ignoreCase));
temp.add(new ImportNormalizer(qualifiedNameConverter
.toQualifiedName("org.eclipse.osbp.ui.common"), true, ignoreCase));
return temp;
}
@Override
protected List<ImportNormalizer> internalGetImportedNamespaceResolvers(
EObject context, boolean ignoreCase) {
List<ImportNormalizer> result = new ArrayList<ImportNormalizer>(
super.internalGetImportedNamespaceResolvers(context, ignoreCase));
String packageName = getPackage(context);
if (packageName != null && !packageName.equals("")) {
result.add(new ImportNormalizer(qualifiedNameConverter
.toQualifiedName(packageName), true, ignoreCase));
}
return result;
}
@Override
public IScope getScope(EObject context, EReference reference) {
EClass referenceType = reference.getEReferenceType();
if (TypesPackage.Literals.JVM_TYPE.isSuperTypeOf(referenceType)) {
UiModel model = null;
EObject temp = context;
while(temp.eContainer() != null){
temp = temp.eContainer();
if(temp instanceof UiModel){
model = (UiModel) temp;
break;
}
}
IScope result = getResourceScope(context.eResource(), reference);
return getLocalElementsScope(result, model, reference);
} else if (UiModelPackage.Literals.UI_RAW_BINDABLE.isSuperTypeOf(referenceType)) {
IScope result = getResourceScope(context.eResource(), reference);
return getLocalElementsScope(result, context, reference);
}
return super.getScope(context, reference);
}
/**
* Returns the package name.
*
* @param eObject
* @return
*/
private String getPackage(EObject eObject) {
if (eObject == null) {
return "";
}
if (eObject instanceof UiModel) {
return ((UiModel) eObject).getPackageName();
} else {
return getPackage(eObject.eContainer());
}
}
}