Using ImportUriGlobalScopeProvider and SimpleLocalScopeProvider requires fully qualified names for all imported entities (even with same package). On the other hand CIDLImportedNamespaceAwareLocalScopeProvider does not have this inconvenience (name from different file defined in same package do not require full qualification) but it to be used with "importedNamespace" (and not "importURI").
Here is what I used for workaround:
class MyDSLRuntimeModule extends AbstractMyDSLRuntimeModule {
override bindIGlobalScopeProvider() {
ImportUriGlobalScopeProvider
}
override configureIScopeProviderDelegate(Binder binder) {
binder.bind(IScopeProvider).annotatedWith(Names.named(AbstractDeclarativeScopeProvider.NAMED_DELEGATE))
.to(MyDSLImportedNamespaceAwareLocalScopeProvider)
}
}
class MyDSLImportedNamespaceAwareLocalScopeProvider extends ImportedNamespaceAwareLocalScopeProvider {
private QualifiedName rootImport
override getResourceScope(Resource res, EReference reference) {
val context = res.getContents().get(0)
if (context instanceof CModel)
{
rootImport = qualifiedNameConverter.toQualifiedName(context.name)
}
super.getResourceScope(res, reference)
}
override getImplicitImports(boolean ignoreCase) {
#[new ImportNormalizer(rootImport, true, ignoreCase)]
}
}
As I am new to Xtext world, please comment. Maybe this is already done somewhere else?