| /******************************************************************************* |
| * Copyright (c) 2018 Willink Transformations 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: |
| * E.D.Willink - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.qvtd.compiler.internal.qvtr2qvts; |
| |
| import org.eclipse.jdt.annotation.NonNull; |
| import org.eclipse.jdt.annotation.Nullable; |
| import org.eclipse.ocl.pivot.Variable; |
| import org.eclipse.ocl.pivot.VariableDeclaration; |
| import org.eclipse.ocl.pivot.utilities.PivotUtil; |
| import org.eclipse.qvtd.compiler.internal.qvtb2qvts.trace.NameGenerator; |
| import org.eclipse.qvtd.compiler.internal.qvtc2qvtu.QVTuConfiguration; |
| import org.eclipse.qvtd.pivot.qvtbase.Rule; |
| import org.eclipse.qvtd.pivot.qvtbase.TypedModel; |
| import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil; |
| import org.eclipse.qvtd.pivot.qvtrelation.Relation; |
| import org.eclipse.qvtd.pivot.qvtrelation.RelationDomain; |
| import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelationUtil; |
| import org.eclipse.qvtd.runtime.qvttrace.QVTtracePackage; |
| |
| /** |
| * NameGenerator localizes the name generation functionality to facilitate a chnage / rewrite. |
| */ |
| public class QVTrelationNameGenerator extends NameGenerator |
| { |
| public static final @NonNull String DISPATCHCLASS_RESULT_PROPERTY_NAME = "result"; |
| public static final @NonNull String DISPATCHCLASS_SELF_NAME = "dispatcher"; |
| public static final @NonNull String INVOCATION_GUARD_NAME = "invocationGuard"; |
| public static final @NonNull String IDENTIFIED_INSTANCE_VARIABLE_NAME = "identifiedInstance"; |
| public static final @NonNull String KEYED_INSTANCE_PROPERTY_NAME = "instance"; |
| public static final @NonNull String KEY2INSTANCE_VARIABLE_NAME = "key2instance"; |
| @SuppressWarnings("null") |
| public static final @NonNull String TRACE_DISPATCH_SUCCESS_PROPERTY_NAME = QVTtracePackage.Literals.DISPATCH__SUCCESS.getName(); |
| public static final @NonNull String TRACE_GLOBAL_SUCCESS_PROPERTY_NAME_SUFFIX = "global"; |
| public static final @NonNull String TRACE_LOCAL_SUCCESS_PROPERTY_NAME_SUFFIX = "local"; |
| public static final @NonNull String TRACECLASS_PROPERTY_NAME = "trace"; |
| |
| public static final @NonNull String TRACE_DISPATCH_CLASS_NAME_PREFIX = "D"; |
| public static final @NonNull String TRACE_INVOCATION_CLASS_NAME_PREFIX = "C"; |
| public static final @NonNull String TRACE_INTERFACE_CLASS_NAME_PREFIX = "I"; |
| public static final @NonNull String TRACE_TRACE_CLASS_NAME_PREFIX = "T"; |
| |
| public static final @NonNull String TRACE_DISPATCH_CLASS_DISPATCH_PROPERTY_NAME_PREFIX = "do"; |
| public static final @NonNull String TRACE_DISPATCH_PROPERTY_NAME_PREFIX = "d"; |
| public static final @NonNull String TRACE_INTERFACE_PROPERTY_NAME_PREFIX = "i"; |
| public static final @NonNull String TRACE_INVOCATION_PROPERTY_NAME_PREFIX = "c"; |
| public static final @NonNull String TRACE_INVOCATION_TRACE_PROPERTY_NAME_PREFIX = "w"; |
| public static final @NonNull String TRACE_SUCCESS_PROPERTY_NAME_PREFIX = "s"; |
| public static final @NonNull String TRACE_TRACE_PROPERTY_NAME_PREFIX = "t"; |
| public static final @NonNull String TRACE_WHEN_PROPERTY_NAME_PREFIX = "when_"; |
| public static final @NonNull String TRACE_WHERE_PROPERTY_NAME_PREFIX = "where_"; |
| |
| public @NonNull String createDispatchClassName(@NonNull Rule rule) { |
| return TRACE_DISPATCH_CLASS_NAME_PREFIX + QVTbaseUtil.getName(rule); |
| } |
| |
| public @NonNull String createDispatchClassDispatchPropertyName(@NonNull Relation relation) { |
| String name = QVTrelationUtil.getName(relation); |
| return TRACE_DISPATCH_CLASS_DISPATCH_PROPERTY_NAME_PREFIX + name; |
| } |
| |
| public @NonNull String createDispatchClassPropertyName(@Nullable TypedModel typedModel, @NonNull VariableDeclaration variable) { |
| int index = QVTbaseUtil.getTypedModelIndex(typedModel); |
| String name = QVTrelationUtil.getName(variable); |
| return TRACE_DISPATCH_PROPERTY_NAME_PREFIX + index + name; |
| } |
| |
| public @NonNull String createDispatchClassResultPropertyName() { |
| return /*"a_" +*/ DISPATCHCLASS_RESULT_PROPERTY_NAME; |
| } |
| |
| public @NonNull String createInvocationClassName(@NonNull Rule rule) { |
| return TRACE_INVOCATION_CLASS_NAME_PREFIX + QVTbaseUtil.getName(rule); |
| } |
| |
| public @NonNull String createInvocationClassPropertyName(@Nullable TypedModel typedModel, @NonNull VariableDeclaration variable) { |
| int index = QVTbaseUtil.getTypedModelIndex(typedModel); |
| String name = QVTrelationUtil.getName(variable); |
| return TRACE_INVOCATION_PROPERTY_NAME_PREFIX + index + name; |
| } |
| |
| |
| |
| // public @NonNull String createKey2InstanceClassName(org.eclipse.ocl.pivot.@NonNull Class identifiedClass) { |
| // return "Key2" + identifiedClass.getName(); |
| // } |
| |
| // public @NonNull String createKey2InstanceMappingName(org.eclipse.ocl.pivot.@NonNull Class identifiedClass, @NonNull TypedModel typedModel) { |
| // String enforcedDomainName = ClassUtil.nonNullState(typedModel.getName()); |
| // return "Key2" + identifiedClass.getName() + "_" + enforcedDomainName; |
| // } |
| |
| public @NonNull String createInvocationTraceProperty(@NonNull Relation invokedRelation) { |
| return TRACE_INVOCATION_TRACE_PROPERTY_NAME_PREFIX + invokedRelation.getName(); |
| } |
| |
| public @NonNull String createKeyedVariableName(@NonNull Variable identifiedVariable) { |
| return QVTbaseUtil.getName(identifiedVariable) + "_key"; |
| } |
| |
| public @NonNull String createMappingName(@NonNull Relation rule, @Nullable String role, @NonNull QVTuConfiguration qvtuConfiguration) { |
| StringBuilder s = new StringBuilder(); |
| s.append(PivotUtil.getName(rule)); |
| if (role != null) { |
| s.append("_"); |
| s.append(role); |
| } |
| for (@NonNull RelationDomain domain : QVTrelationUtil.getOwnedDomains(rule)) { |
| TypedModel typedModel = domain.getTypedModel(); |
| if ((typedModel != null) && qvtuConfiguration.isOutput(typedModel)) { |
| s.append("_"); |
| s.append(PivotUtil.getName(typedModel)); |
| } |
| } |
| return s.toString(); |
| } |
| |
| public @NonNull String createTraceClassName(@NonNull Rule rule) { |
| return TRACE_TRACE_CLASS_NAME_PREFIX + QVTbaseUtil.getName(rule); |
| } |
| |
| public @NonNull String createTraceClassPropertyName(@Nullable TypedModel typedModel, @NonNull VariableDeclaration variable) { |
| int index = QVTbaseUtil.getTypedModelIndex(typedModel); |
| String name = QVTrelationUtil.getName(variable); |
| return TRACE_TRACE_PROPERTY_NAME_PREFIX + index + name; |
| } |
| |
| public @NonNull String createTraceGlobalSuccessPropertyName(@NonNull TypedModel targetTypedModel) { |
| int index = 0; //QVTbaseUtil.getTypedModelIndex(targetTypedModel); |
| return TRACE_SUCCESS_PROPERTY_NAME_PREFIX + index + TRACE_GLOBAL_SUCCESS_PROPERTY_NAME_SUFFIX; |
| } |
| |
| public @NonNull String createTraceLocalSuccessPropertyName(@NonNull TypedModel targetTypedModel) { |
| int index = 0; //QVTbaseUtil.getTypedModelIndex(targetTypedModel); |
| return TRACE_SUCCESS_PROPERTY_NAME_PREFIX + index + TRACE_LOCAL_SUCCESS_PROPERTY_NAME_SUFFIX; |
| } |
| |
| public @NonNull String createTraceInterfaceName(@NonNull Rule rule) { |
| return TRACE_INTERFACE_CLASS_NAME_PREFIX + QVTbaseUtil.getName(rule); |
| } |
| |
| public @NonNull String createTraceInterfacePropertyName(@Nullable TypedModel typedModel, @NonNull VariableDeclaration variable) { |
| int index = QVTbaseUtil.getTypedModelIndex(typedModel); |
| String name = QVTrelationUtil.getName(variable); |
| return TRACE_INTERFACE_PROPERTY_NAME_PREFIX + index + name; |
| } |
| |
| public @NonNull String createWhenInvocationPropertyName(@NonNull Rule rule) { |
| return TRACE_WHEN_PROPERTY_NAME_PREFIX + QVTbaseUtil.getName(rule); |
| } |
| |
| // public @NonNull String createWhenMappingClassName(@NonNull RelationDomain rInvokedDomain) { |
| // Relation invokedRelation = QVTbaseUtil.getContainingRelation(rInvokedDomain); |
| // return "when_" + invokedRelation.getName() + '_' + rInvokedDomain.getName(); |
| // } |
| /* public @NonNull String createWhenMappingClassName(@NonNull Domain rInvokedDomain, @Nullable CallExp rInvocation) { |
| Rule invokedRule = QVTbaseUtil.getContainingRule(rInvokedDomain); |
| StringBuilder s = new StringBuilder(); |
| s.append(invokedRule.getName()); |
| s.append('_'); |
| s.append(rInvokedDomain.getName()); |
| s.append("_when"); |
| if (rInvocation != null) { |
| s.append("_"); |
| s.append(QVTbaseUtil.getReferredRelation(rInvocation).getName()); |
| } |
| return s.toString(); |
| } */ |
| |
| // public @NonNull String createWhenTraceClassName(@NonNull Relation invokingRelation, @NonNull Relation invokedRelation) { |
| // return TRACE_TRACE_CLASS_NAME_PREFIX + invokingRelation.getName() + "_when_" + invokedRelation.getName(); |
| // } |
| |
| // public @NonNull String createWhereMappingClassName(@NonNull RelationDomain rInvokedDomain) { |
| // Relation invokedRelation = QVTbaseUtil.getContainingRelation(rInvokedDomain); |
| // return "where_" + invokedRelation.getName() + '_' + rInvokedDomain.getName(); |
| // } |
| /* public @NonNull String createWhereMappingClassName(@NonNull Domain rInvokedDomain, @Nullable RelationCallExp rInvocation) { |
| Rule invokedRule = QVTbaseUtil.getContainingRule(rInvokedDomain); |
| StringBuilder s = new StringBuilder(); |
| s.append(invokedRule.getName()); |
| s.append('_'); |
| s.append(rInvokedDomain.getName()); |
| s.append("_where"); |
| if (rInvocation != null) { |
| s.append("_"); |
| s.append(QVTbaseUtil.getReferredRelation(rInvocation).getName()); |
| } |
| return s.toString(); |
| } */ |
| |
| public @NonNull String createWhereInvocationPropertyName(@NonNull Rule rule) { |
| return TRACE_WHERE_PROPERTY_NAME_PREFIX + QVTbaseUtil.getName(rule); |
| } |
| } |