blob: b10bdb71dec3f1b604354d3090853037a1669fb5 [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
*
* This copyright notice shows up in the generated Java code
*
*/
package org.eclipse.osbp.xtext.oxtype.scoping
import com.google.inject.Inject
import javax.xml.stream.events.EntityReference
import org.eclipse.emf.ecore.EClass
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.EReference
import org.eclipse.osbp.xtext.oxtype.scoping.eobject.OXEObjectImportSectionNamespaceScopeProvider
import org.eclipse.osbp.xtext.oxtype.scoping.jvmtype.OXJvmTypesImportSectionNamespaceScopeProvider
import org.eclipse.xtext.common.types.TypesPackage
import org.eclipse.xtext.scoping.IScopeProvider
import org.eclipse.xtext.scoping.impl.IScopeWrapper
/**
* Delegates between JvmTypeScoping and EObjectScoping.
*/
class OXDelegatingNamespaceScopeProvider implements IScopeProvider {
@Inject
OXJvmTypesImportSectionNamespaceScopeProvider jvmTypesDelegate;
@Inject
OXEObjectImportSectionNamespaceScopeProvider eObjectDelegate;
override getScope(EObject context, EReference reference) {
val EClass referenceType = reference.getEReferenceType();
if (TypesPackage.Literals.JVM_TYPE.isSuperTypeOf(referenceType)) {
return jvmTypesDelegate.getScope(context, reference)
}else{
return eObjectDelegate.getScope(context, reference)
}
}
def void setWrapper(IScopeWrapper wrapper, EReference reference){
val EClass referenceType = reference.getEReferenceType();
if (TypesPackage.Literals.JVM_TYPE.isSuperTypeOf(referenceType)) {
jvmTypesDelegate.wrapper = wrapper
}else{
eObjectDelegate.wrapper = wrapper
}
}
}