blob: 571317a0cc17f4dc9dd70c097876448d10f545d7 [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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pirchner - Initial implementation
*
* This copyright notice shows up in the generated Java code
*
*/
package org.eclipse.osbp.xtext.oxtype.scoping.jvmtype
import com.google.common.base.Predicate
import com.google.common.collect.Iterables
import org.eclipse.emf.ecore.EObject
import org.eclipse.xtext.common.types.TypesPackage
import org.eclipse.xtext.common.types.access.IJvmTypeProvider
import org.eclipse.xtext.common.types.xtext.AbstractTypeScope
import org.eclipse.xtext.naming.IQualifiedNameConverter
import org.eclipse.xtext.naming.QualifiedName
import org.eclipse.xtext.resource.IEObjectDescription
import org.eclipse.xtext.resource.IResourceDescription
import org.eclipse.xtext.scoping.IScope
class LocalResourceFilteringTypeScope extends AbstractTypeScope {
private AbstractTypeScope delegate;
private IResourceDescription filterDescription;
new(AbstractTypeScope delegate, IResourceDescription filterDescription) {
super(null, null, null);
this.delegate = delegate;
this.filterDescription = filterDescription;
}
override IEObjectDescription getSingleElement(QualifiedName name) {
if (isFiltered(name)) {
return null;
}
return delegate.getSingleElement(name);
}
def boolean isFiltered(QualifiedName name) {
val Iterable<IEObjectDescription> exportedObjects = filterDescription.getExportedObjects(
TypesPackage.Literals.JVM_TYPE, name, false);
return !Iterables.isEmpty(exportedObjects);
}
override IEObjectDescription getSingleElement(QualifiedName name, boolean binary) {
if (isFiltered(name)) {
return null;
}
return delegate.getSingleElement(name, binary);
}
override Iterable<IEObjectDescription> getElements(QualifiedName name) {
return Iterables.filter(delegate.getElements(name),
new Predicate<IEObjectDescription>() {
override boolean apply(IEObjectDescription input) {
return !isFiltered(input.getQualifiedName());
}
});
}
override Iterable<IEObjectDescription> getElements(EObject object) {
return Iterables.filter(delegate.getElements(object),
new Predicate<IEObjectDescription>() {
override boolean apply(IEObjectDescription input) {
return !isFiltered(input.getQualifiedName());
}
});
}
override IScope getParent() {
return delegate.getParent();
}
override Iterable<IEObjectDescription> getAllElements() {
return Iterables.filter(delegate.getAllElements(),
new Predicate<IEObjectDescription>() {
override boolean apply(IEObjectDescription input) {
return !isFiltered(input.getQualifiedName());
}
});
}
override IJvmTypeProvider getTypeProvider() {
return delegate.getTypeProvider();
}
override IQualifiedNameConverter getQualifiedNameConverter() {
return delegate.getQualifiedNameConverter();
}
override IEObjectDescription getSingleElement(EObject object) {
return delegate.getSingleElement(object);
}
}