blob: 3f853209f733bf48675a6159e9702afe5807ccbd [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2018 - 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:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
* generated by Xtext 2.11.0
*
*/
package org.eclipse.osbp.xtext.signal.scoping
import javax.inject.Inject
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.EReference
import org.eclipse.osbp.dsl.common.xtext.extensions.ModelExtensions
import org.eclipse.osbp.xtext.datainterchange.DataInterchange
import org.eclipse.osbp.xtext.datainterchange.DataInterchangeGroup
import org.eclipse.osbp.xtext.signal.SignalDSLPackage
import org.eclipse.osbp.xtext.signal.SignalScheduler
import org.eclipse.osbp.xtext.signal.SignalWatcher
import org.eclipse.osbp.xtext.signal.WatcherWithFileMask
import org.eclipse.osbp.xtext.signal.WatcherWithFileName
import org.eclipse.xtext.resource.EObjectDescription
import org.eclipse.xtext.resource.IEObjectDescription
import org.eclipse.xtext.scoping.IScope
import org.eclipse.xtext.scoping.impl.MapBasedScope
/**
* This class contains custom scoping description.
*
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping
* on how and when to use it.
*/
class SignalDSLScopeProvider extends AbstractSignalDSLScopeProvider {
@Inject extension ModelExtensions
override getScope(EObject context, EReference reference) {
if (reference == SignalDSLPackage.Literals.SIGNAL_DATAINTERCHANGE__DATA_REF) {
return getScope_DataInterchanges(context, reference)
}
else {
super.getScope(context, reference)
}
}
def getScope_DataInterchanges(EObject context, EReference reference) {
var result = <IEObjectDescription>newArrayList
if (context !== null) {
var signal = context.eContainer
var group = null as DataInterchangeGroup
if(signal instanceof WatcherWithFileMask){
group = signal.interchangegroup
}
else if(signal instanceof WatcherWithFileName){
group = signal.interchangegroup
}
else if(signal instanceof SignalScheduler){
group = signal.interchangegroup
}
for(value : group.datInts){
result.add(EObjectDescription.create((value as DataInterchange).name, (value as DataInterchange)))
}
}
return MapBasedScope.createScope(IScope.NULLSCOPE, result)
}
}