/* | |
* generated by Xtext | |
*/ | |
/*------------------------------------------------------------------------------ | |
- | |
- Copyright (c) 2013, 2015 Intecs SpA | |
- All rights reserved. This program and the accompanying materials | |
- are made available under the terms of the Eclipse Public License v2.0 | |
- which accompanies this distribution, and is available at | |
- http://www.eclipse.org/legal/epl-v20.html | |
- | |
- Contributors: | |
- | |
- Stefano Puri stefano.puri@intecs.it | |
- | |
- Initial API and implementation and/or initial documentation | |
------------------------------------------------------------------------------*/ | |
package org.polarsys.chess.xtext.scoping | |
import org.eclipse.emf.ecore.EReference | |
import org.eclipse.xtext.scoping.IScope | |
import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider | |
import org.polarsys.chess.xtext.global.utils.XtextUtils | |
import org.eclipse.uml2.uml.Port | |
import org.eclipse.xtext.scoping.Scopes | |
import org.eclipse.emf.ecore.EObject | |
import org.eclipse.emf.common.util.EList | |
import org.polarsys.chess.chessmlprofile.Dependability.FailurePropagation.FLABehavior; | |
import org.polarsys.chess.chessmlprofile.Dependability.FailurePropagation.FPTC; | |
import org.eclipse.uml2.uml.EncapsulatedClassifier | |
/** | |
* 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 FlaDslScopeProvider extends AbstractDeclarativeScopeProvider { | |
EncapsulatedClassifier contextComponent ; | |
new(){ | |
val contextElement = XtextUtils.getContextElement; | |
if(contextElement instanceof FPTC){ | |
contextComponent = (contextElement as FPTC).getBase_Component(); | |
}else if(contextElement instanceof FLABehavior){ | |
if ((contextElement as FLABehavior).getBase_Class() != null) { | |
contextComponent = (contextElement as FLABehavior).getBase_Class() as EncapsulatedClassifier; | |
} | |
else if ((contextElement as FLABehavior).getBase_InstanceSpecification != null) { | |
contextComponent = (contextElement as FLABehavior).getBase_InstanceSpecification.classifiers.get(0) as EncapsulatedClassifier; | |
} | |
} | |
} | |
/* | |
def IScope scope_InputExpression_ref(InputExpression inExpr, EReference ref){ | |
val ports = contextComponent.ownedPorts | |
//ports.forEach[println((it as Port).qualifiedName)] | |
// val scope = delegateGetScope(inExpr, ref) | |
// | |
// val filter = [IEObjectDescription descr | ports.contains(descr.EObjectOrProxy as Port)] | |
// | |
// new FilteringScope(scope, filter); | |
return Scopes.scopeFor(ports) | |
}*/ | |
override IScope getScope(EObject context, EReference reference){ | |
val EList<Port> ports = this.contextComponent.getOwnedPorts(); | |
return Scopes.scopeFor(ports); | |
} | |
} |