/* * $Id$ * * SARL is an general-purpose agent programming language. * More details on http://www.sarl.io * * Copyright (C) 2014-2017 the original authors or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.sarl.lang.jvmmodel; import com.google.inject.ImplementedBy; import com.google.inject.Singleton; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtend.core.jvmmodel.IXtendJvmAssociations; import org.eclipse.xtend.core.xtend.XtendClass; import org.eclipse.xtext.common.types.JvmGenericType; import org.eclipse.xtext.common.types.JvmOperation; import org.eclipse.xtext.xbase.XExpression; import io.sarl.lang.sarl.SarlAgent; import io.sarl.lang.sarl.SarlAnnotationType; import io.sarl.lang.sarl.SarlArtifact; import io.sarl.lang.sarl.SarlBehavior; import io.sarl.lang.sarl.SarlBehaviorUnit; import io.sarl.lang.sarl.SarlCapacity; import io.sarl.lang.sarl.SarlClass; import io.sarl.lang.sarl.SarlEnumeration; import io.sarl.lang.sarl.SarlEvent; import io.sarl.lang.sarl.SarlInterface; import io.sarl.lang.sarl.SarlSkill; import io.sarl.lang.sarl.SarlSpace; /** Associations between the SARL elements and the JVM elements. * * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ @ImplementedBy(SarlJvmModelAssociations.Impl.class) public interface SarlJvmModelAssociations extends IXtendJvmAssociations { /** Replies the SARL event associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. */ SarlEvent getSarlEvent(JvmGenericType jvmType); /** Replies the SARL agent associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. */ SarlAgent getSarlAgent(JvmGenericType jvmType); /** Replies the SARL behavior associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. */ SarlBehavior getSarlBehavior(JvmGenericType jvmType); /** Replies the SARL capacity associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. */ SarlCapacity getSarlCapacity(JvmGenericType jvmType); /** Replies the SARL skill associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. */ SarlSkill getSarlSkill(JvmGenericType jvmType); /** Replies the SARL space associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. * @since 0.6 */ SarlSpace getSarlSpace(JvmGenericType jvmType); /** Replies the SARL artifact associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. * @since 0.6 */ SarlArtifact getSarlArtifact(JvmGenericType jvmType); /** Replies the SARL class associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. * @since 0.6 */ SarlClass getSarlClass(JvmGenericType jvmType); /** Replies the SARL interface associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. * @since 0.6 */ SarlInterface getSarlInterface(JvmGenericType jvmType); /** Replies the SARL enumeration associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. * @since 0.6 */ SarlEnumeration getSarlEnumeration(JvmGenericType jvmType); /** Replies the SARL annotation type associated to the given type. * * @param jvmType - the JVM type. * @return the SARL element. * @since 0.6 */ SarlAnnotationType getSarlAnnotationType(JvmGenericType jvmType); /** Replies the inferrer type for the given event. * @param obj the SARL object. * @return the inferred type. */ JvmGenericType getInferredType(SarlEvent obj); /** Replies the inferrer type for the given agent. * @param obj the SARL object. * @return the inferred type. */ JvmGenericType getInferredType(SarlAgent obj); /** Replies the inferrer type for the given behavior. * @param obj the SARL object. * @return the inferred type. */ JvmGenericType getInferredType(SarlBehavior obj); /** Replies the inferrer type for the given capacity. * @param obj the SARL object. * @return the inferred type. */ JvmGenericType getInferredType(SarlCapacity obj); /** Replies the inferrer type for the given skill. * @param obj the SARL object. * @return the inferred type. */ JvmGenericType getInferredType(SarlSkill obj); /** * Returns the inferred operation for the guard of the given behavior unit. * * @param behaviorUnit the behavior unit. * @return the inferred operation. */ JvmOperation getInferredGuardOperation(SarlBehaviorUnit behaviorUnit); /** * Returns the inferred operation for the body of the given behavior unit. * * @param behaviorUnit the behavior unit. * @return the inferred operation. */ JvmOperation getInferredBodyOperation(SarlBehaviorUnit behaviorUnit); /** Associations between the SARL elements and the JVM elements. * * @author $Author: sgalland$ * @version $FullVersion$ * @mavengroupid $GroupId$ * @mavenartifactid $ArtifactId$ */ @Singleton class Impl extends IXtendJvmAssociations.Impl implements SarlJvmModelAssociations { @Override public SarlEvent getSarlEvent(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlEvent) { return (SarlEvent) primarySourceElement; } return null; } @Override public SarlAgent getSarlAgent(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlAgent) { return (SarlAgent) primarySourceElement; } return null; } @Override public SarlBehavior getSarlBehavior(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlBehavior) { return (SarlBehavior) primarySourceElement; } return null; } @Override public SarlCapacity getSarlCapacity(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlCapacity) { return (SarlCapacity) primarySourceElement; } return null; } @Override public SarlSpace getSarlSpace(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlSpace) { return (SarlSpace) primarySourceElement; } return null; } @Override public SarlArtifact getSarlArtifact(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlArtifact) { return (SarlArtifact) primarySourceElement; } return null; } @Override public SarlClass getSarlClass(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlClass) { return (SarlClass) primarySourceElement; } return null; } @Override public SarlInterface getSarlInterface(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlInterface) { return (SarlInterface) primarySourceElement; } return null; } @Override public SarlEnumeration getSarlEnumeration(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlEnumeration) { return (SarlEnumeration) primarySourceElement; } return null; } @Override public SarlAnnotationType getSarlAnnotationType(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlAnnotationType) { return (SarlAnnotationType) primarySourceElement; } return null; } @Override public JvmGenericType getInferredType(SarlEvent obj) { return getFirstOrNull(getJvmElements(obj), JvmGenericType.class); } @Override public JvmGenericType getInferredType(XtendClass xtendClass) { return getFirstOrNull(getJvmElements(xtendClass), JvmGenericType.class); } @Override public JvmGenericType getInferredType(SarlAgent obj) { return getFirstOrNull(getJvmElements(obj), JvmGenericType.class); } @Override public JvmGenericType getInferredType(SarlBehavior obj) { return getFirstOrNull(getJvmElements(obj), JvmGenericType.class); } @Override public JvmGenericType getInferredType(SarlCapacity obj) { return getFirstOrNull(getJvmElements(obj), JvmGenericType.class); } @Override public JvmGenericType getInferredType(SarlSkill obj) { return getFirstOrNull(getJvmElements(obj), JvmGenericType.class); } @Override public SarlSkill getSarlSkill(JvmGenericType jvmType) { final EObject primarySourceElement = getPrimarySourceElement(jvmType); if (primarySourceElement instanceof SarlSkill) { return (SarlSkill) primarySourceElement; } return null; } @Override public JvmOperation getInferredGuardOperation(SarlBehaviorUnit behaviorUnit) { final XExpression guard = behaviorUnit.getGuard(); if (guard != null) { final EObject primaryJvmElement = getPrimaryJvmElement(guard); if (primaryJvmElement instanceof JvmOperation) { return (JvmOperation) primaryJvmElement; } } return null; } @Override public JvmOperation getInferredBodyOperation(SarlBehaviorUnit behaviorUnit) { final EObject primaryJvmElement = getPrimaryJvmElement(behaviorUnit); if (primaryJvmElement instanceof JvmOperation) { return (JvmOperation) primaryJvmElement; } return null; } } }