| /******************************************************************************* |
| * Copyright (c) 2009, 2018 SAP AG and others. |
| * 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: |
| * SAP AG - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ocl.examples.impactanalyzer.impl; |
| |
| import java.util.Set; |
| |
| import org.eclipse.emf.ecore.EOperation; |
| import org.eclipse.ocl.ecore.OCLExpression; |
| import org.eclipse.ocl.ecore.OperationCallExp; |
| import org.eclipse.ocl.ecore.Variable; |
| |
| public interface OperationBodyToCallMapper { |
| /** |
| * Returns all the calls to the operation whose body is <tt>operationBodyExpression</tt> that are reachable from some scope. |
| * Which scope this is depends on the particular implementation. If no such calls exist, an empty set is returned. |
| * |
| * TODO generalize such that instead of an OperationCallExp this method can return a TCS::Property (template "invocation") as well |
| */ |
| public Set<OperationCallExp> getCallsOf(OCLExpression operationBodyExpression); |
| |
| /** |
| * Determines the <code>self</code> variables as used by the operation body or top-level non-operation-body (e.g., invariant) |
| * expression <code>body</code>. While it might seem a little strange to have multiple <code>self</code> variables within the |
| * same operation body, that's however what may happen in Ecore OCL. It would otherwise be tricky to identify the |
| * <code>self</code> variable when given the body or the {@link EOperation} element. If <code>self</code> is not used by the |
| * body, then <code>null</code> will be returned. Never returns <code>null</code> but may return an empty set. |
| */ |
| public Set<Variable> getSelfVariablesUsedInBody(OCLExpression body); |
| |
| /** |
| * Determines the <code>self</code> variable as used by the operation body <code>body</code>. It would otherwise |
| * be tricky to identify the <code>self</code> variable when given the body or the {@link EOperation} element. If |
| * <code>self</code> is not used by the body, then <code>null</code> will be returned. Never returns <code>null</code> |
| * but may return an empty set. |
| */ |
| public Set<Variable> getParameterVariablesUsedInBody(OCLExpression body); |
| |
| /** |
| * Determines the body expression of an operation |
| */ |
| public OCLExpression getOperationBody(EOperation operation); |
| } |