Ed Willink | 17785c5 | 2014-05-20 12:29:51 +0100 | [diff] [blame] | 1 | /******************************************************************************* |
Ed Willink | 52e3d06 | 2015-05-19 10:14:44 +0100 | [diff] [blame] | 2 | * Copyright (c) 2013 Willink Transformations and others. |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 3 | * All rights reserved. This program and the accompanying materials |
Ed Willink | 2b4d8be | 2018-06-13 11:53:02 +0100 | [diff] [blame] | 4 | * are made available under the terms of the Eclipse Public License v2.0 |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 5 | * which accompanies this distribution, and is available at |
Ed Willink | 2b4d8be | 2018-06-13 11:53:02 +0100 | [diff] [blame] | 6 | * http://www.eclipse.org/legal/epl-v20.html |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 7 | * |
| 8 | * Contributors: |
| 9 | * E.D.Willink - initial API and implementation |
Ed Willink | 17785c5 | 2014-05-20 12:29:51 +0100 | [diff] [blame] | 10 | *******************************************************************************/ |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 11 | package org.eclipse.ocl.examples.build.xtend |
| 12 | |
Ed Willink | 41636df | 2015-05-03 11:22:31 +0100 | [diff] [blame] | 13 | import java.util.ArrayList |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 14 | import java.util.Collection |
Ed Willink | 41636df | 2015-05-03 11:22:31 +0100 | [diff] [blame] | 15 | import java.util.Collections |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 16 | import org.eclipse.emf.ecore.EObject |
Ed Willink | 2670425 | 2014-12-05 17:14:01 +0000 | [diff] [blame] | 17 | import org.eclipse.ocl.pivot.AnyType |
| 18 | import org.eclipse.ocl.pivot.Class |
| 19 | import org.eclipse.ocl.pivot.CollectionType |
| 20 | import org.eclipse.ocl.pivot.Comment |
| 21 | import org.eclipse.ocl.pivot.EnumerationLiteral |
Ed Willink | 2670425 | 2014-12-05 17:14:01 +0000 | [diff] [blame] | 22 | import org.eclipse.ocl.pivot.LambdaType |
Ed Willink | 3935bde | 2015-04-24 19:36:13 +0100 | [diff] [blame] | 23 | import org.eclipse.ocl.pivot.MapType |
Ed Willink | 31c9fc7 | 2014-12-08 20:03:58 +0000 | [diff] [blame] | 24 | import org.eclipse.ocl.pivot.Model |
Ed Willink | 2670425 | 2014-12-05 17:14:01 +0000 | [diff] [blame] | 25 | import org.eclipse.ocl.pivot.Operation |
| 26 | import org.eclipse.ocl.pivot.Package |
| 27 | import org.eclipse.ocl.pivot.Parameter |
| 28 | import org.eclipse.ocl.pivot.Precedence |
Ed Willink | 31c9fc7 | 2014-12-08 20:03:58 +0000 | [diff] [blame] | 29 | import org.eclipse.ocl.pivot.PrimitiveType |
Ed Willink | 2670425 | 2014-12-05 17:14:01 +0000 | [diff] [blame] | 30 | import org.eclipse.ocl.pivot.Property |
| 31 | import org.eclipse.ocl.pivot.TemplateBinding |
| 32 | import org.eclipse.ocl.pivot.TemplateParameter |
| 33 | import org.eclipse.ocl.pivot.TemplateParameterSubstitution |
| 34 | import org.eclipse.ocl.pivot.TemplateSignature |
Ed Willink | f57d971 | 2015-05-01 12:09:16 +0100 | [diff] [blame] | 35 | import org.eclipse.ocl.pivot.utilities.ClassUtil |
Ed Willink | a28e82f | 2017-08-11 10:33:34 +0100 | [diff] [blame] | 36 | import org.eclipse.ocl.pivot.values.Unlimited |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 37 | import org.eclipse.ocl.pivot.utilities.PivotConstants |
| 38 | import org.eclipse.ocl.pivot.ids.TypeId |
| 39 | import org.eclipse.ocl.pivot.utilities.NameUtil |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 40 | |
Ed Willink | 3063114 | 2018-06-17 08:55:17 +0100 | [diff] [blame] | 41 | abstract class GenerateOCLCommonXtend extends GenerateOCLCommon |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 42 | { |
Ed Willink | 832631f | 2017-01-22 14:29:42 +0000 | [diff] [blame] | 43 | protected def String declareClassTypes(/*@NonNull*/ Model root, /*@NonNull*/ Collection</*@NonNull*/ String> excludedEClassifierNames) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 44 | var pkge2classTypes = root.getSortedClassTypes(); |
| 45 | if (pkge2classTypes.isEmpty()) return ""; |
| 46 | var sortedPackages = root.getSortedPackages(pkge2classTypes.keySet()); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 47 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 48 | «FOR pkge : sortedPackages» |
| 49 | |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 50 | «FOR type : ClassUtil.nullFree(pkge2classTypes.get(pkge))» |
Ed Willink | 3063114 | 2018-06-17 08:55:17 +0100 | [diff] [blame] | 51 | private final @NonNull «type.eClass.name» «type.getPrefixedSymbolNameWithoutNormalization("_" + type.partialName())» = create«type. |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 52 | eClass.name»("«type.name»"); |
| 53 | «ENDFOR» |
| 54 | «ENDFOR» |
| 55 | ''' |
| 56 | } |
| 57 | |
| 58 | protected def String declareCollectionTypes(Model root) { |
| 59 | var pkge2collectionTypes = root.getSortedCollectionTypes(); |
| 60 | if (pkge2collectionTypes.isEmpty()) return ""; |
| 61 | var sortedPackages = root.getSortedPackages(pkge2collectionTypes.keySet()); |
| 62 | ''' |
| 63 | «FOR pkge : sortedPackages» |
| 64 | |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 65 | «FOR type : ClassUtil.nullFree(pkge2collectionTypes.get(pkge))»«var typeName = type.getPrefixedSymbolName("_" + type.getName() + "_" + type.getElementType().partialName() + (if (type.isIsNullFree()) "_NullFree" else "") )» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 66 | «IF type.getOwnedSignature() !== null» |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 67 | private final @NonNull «type.eClass.name» «typeName» = create«type.eClass.name»(«getEcoreLiteral(type)»«IF type.getOwnedSignature() !== null»«FOR templateParameter : type.getOwnedSignature().getOwnedParameters()», «templateParameter.getSymbolName()»«ENDFOR»«ENDIF»); |
Ed Willink | c7c0916 | 2015-05-15 15:56:36 +0100 | [diff] [blame] | 68 | «ENDIF» |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 69 | «ENDFOR» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 70 | «FOR type : ClassUtil.nullFree(pkge2collectionTypes.get(pkge))»«var typeName = type.getPrefixedSymbolName("_" + type.getName() + "_" + type.getElementType().partialName() + (if (type.isIsNullFree()) "_NullFree" else "") )» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 71 | «IF type.getOwnedSignature() === null» |
Ed Willink | 8687e31 | 2017-07-19 13:38:32 +0200 | [diff] [blame] | 72 | private final @NonNull «type.eClass.name» «typeName» = create«type.eClass.name»(«type.getUnspecializedElement().getSymbolName()»); |
Ed Willink | c7c0916 | 2015-05-15 15:56:36 +0100 | [diff] [blame] | 73 | «ENDIF» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 74 | «ENDFOR» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 75 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 76 | ''' |
| 77 | } |
| 78 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 79 | protected def String declareEnumerations(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 80 | var pkge2enumerations = root.getSortedEnumerations(); |
| 81 | if (pkge2enumerations.isEmpty()) return ""; |
| 82 | var sortedPackages = root.getSortedPackages(pkge2enumerations.keySet()); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 83 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 84 | |
| 85 | «FOR pkge : sortedPackages» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 86 | «FOR enumeration : ClassUtil.nullFree(pkge2enumerations.get(pkge))» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 87 | «var enumerationName = enumeration.getPrefixedSymbolName("_" + enumeration.partialName())» |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 88 | private final @NonNull Enumeration «enumerationName» = createEnumeration("«enumeration.name»"); |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 89 | «FOR enumerationLiteral : enumeration.ownedLiterals» |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 90 | private final @NonNull EnumerationLiteral «enumerationLiteral.getPrefixedSymbolName( |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 91 | "el_" + enumerationName + "_" + enumerationLiteral.name)» = createEnumerationLiteral("«enumerationLiteral.name»"); |
| 92 | «ENDFOR» |
| 93 | «ENDFOR» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 94 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 95 | ''' |
| 96 | } |
| 97 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 98 | protected def String declareMapTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 99 | var pkge2mapTypes = root.getSortedMapTypes(); |
| 100 | if (pkge2mapTypes.isEmpty()) return ""; |
| 101 | var sortedPackages = root.getSortedPackages(pkge2mapTypes.keySet()); |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 102 | ''' |
Ed Willink | a32c404 | 2015-04-27 15:34:47 +0100 | [diff] [blame] | 103 | |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 104 | «FOR pkge : sortedPackages» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 105 | «FOR type : ClassUtil.nullFree(pkge2mapTypes.get(pkge))» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 106 | «IF type.getOwnedSignature() !== null» |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 107 | private final @NonNull «type.eClass.name» «type.getPrefixedSymbolName("_" + type.getName() + "_" + type.getKeyType().partialName() + "_" + type.getValueType().partialName())» = create«type. |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 108 | eClass.name»(«getEcoreLiteral(type)»«IF type.getOwnedSignature() !== null»«FOR templateParameter : type.getOwnedSignature().getOwnedParameters()», «templateParameter.getSymbolName()»«ENDFOR»«ENDIF»); |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 109 | «ENDIF» |
| 110 | «ENDFOR» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 111 | «FOR type : ClassUtil.nullFree(pkge2mapTypes.get(pkge))» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 112 | «IF type.getOwnedSignature() === null» |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 113 | private final @NonNull «type.eClass.name» «type.getPrefixedSymbolName("_" + type.getName() + "_" + type.getKeyType().partialName() + "_" + type.getValueType().partialName())» = create«type. |
Ed Willink | 8687e31 | 2017-07-19 13:38:32 +0200 | [diff] [blame] | 114 | eClass.name»(«type.getUnspecializedElement().getSymbolName()»); |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 115 | «ENDIF» |
| 116 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 117 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 118 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 119 | } |
| 120 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 121 | protected def String declarePrimitiveTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 122 | var pkge2primitiveTypes = root.getSortedPrimitiveTypes(); |
| 123 | if (pkge2primitiveTypes.isEmpty()) return ""; |
| 124 | var sortedPackages = root.getSortedPackages(pkge2primitiveTypes.keySet()); |
| 125 | ''' |
| 126 | «FOR pkge : sortedPackages» |
| 127 | |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 128 | «FOR type : ClassUtil.nullFree(pkge2primitiveTypes.get(pkge))» |
Ed Willink | 758e265 | 2022-03-02 07:49:56 +0000 | [diff] [blame] | 129 | private final @NonNull Class «type.getPrefixedSymbolNameWithoutNormalization("_" + type.partialName())» = createPrimitiveType("«type.name»"); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 130 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 131 | «ENDFOR» |
| 132 | ''' |
| 133 | } |
| 134 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 135 | protected def String declareTupleTypes(/*@NonNull*/ Model root) { |
Ed Willink | a32c404 | 2015-04-27 15:34:47 +0100 | [diff] [blame] | 136 | var tupleTypes = root.getSortedTupleTypes(); |
| 137 | if (tupleTypes.isEmpty()) return ""; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 138 | ''' |
| 139 | |
Ed Willink | a32c404 | 2015-04-27 15:34:47 +0100 | [diff] [blame] | 140 | «FOR type : tupleTypes» |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 141 | private final @NonNull TupleType «type.getPrefixedSymbolName("_" + type.partialName())» = createTupleType("«type.name»", |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 142 | «FOR property : type.getSortedTupleParts() BEFORE ("\t") SEPARATOR (",\n\t")» |
| 143 | createProperty("«property.name»", «property.type.getSymbolName()»)«ENDFOR»); |
| 144 | «ENDFOR» |
| 145 | ''' |
| 146 | } |
| 147 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 148 | protected def String defineCoercions(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 149 | var allCoercions = root.getSortedCoercions(); |
| 150 | if (allCoercions.isEmpty()) return ""; |
Ed Willink | 31c9fc7 | 2014-12-08 20:03:58 +0000 | [diff] [blame] | 151 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 152 | |
Ed Willink | 31c9fc7 | 2014-12-08 20:03:58 +0000 | [diff] [blame] | 153 | private void installCoercions() { |
| 154 | List<Operation> ownedCoercions; |
| 155 | Operation coercion; |
| 156 | «FOR type : allCoercions.getSortedOwningTypes()» |
| 157 | ownedCoercions = «type.getSymbolName()».getCoercions(); |
| 158 | «FOR coercion : (type as PrimitiveType).getSortedCoercions(allCoercions)» |
| 159 | ownedCoercions.add(coercion = «coercion.getSymbolName()»); |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 160 | «IF coercion.bodyExpression !== null» |
Ed Willink | d73f3ad | 2021-08-28 11:40:58 +0100 | [diff] [blame] | 161 | createBodyExpression(operation, «coercion.type.getSymbolName()», "«coercion.bodyExpression.javaString()»"); |
Ed Willink | 31c9fc7 | 2014-12-08 20:03:58 +0000 | [diff] [blame] | 162 | «ENDIF» |
| 163 | «ENDFOR» |
| 164 | «ENDFOR» |
| 165 | } |
| 166 | ''' |
| 167 | } |
| 168 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 169 | protected def String defineClassTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 170 | var pkge2classTypes = root.getSortedClassTypes(); |
| 171 | if (pkge2classTypes.isEmpty()) return ""; |
| 172 | var sortedPackages = root.getSortedPackages(pkge2classTypes.keySet()); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 173 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 174 | |
| 175 | private void installClassTypes() { |
| 176 | List<Class> ownedClasses; |
Ed Willink | 0ef69f0 | 2014-08-05 18:04:57 +0100 | [diff] [blame] | 177 | List<Class> superClasses; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 178 | Class type; |
| 179 | «FOR pkge : sortedPackages» |
| 180 | |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 181 | ownedClasses = «pkge.getSymbolName()».getOwnedClasses(); |
| 182 | «FOR type : ClassUtil.nullFree(pkge2classTypes.get(pkge))»«var templateSignature = type.getOwnedSignature()» |
| 183 | type = «type.getSymbolName()»; |
| 184 | «IF type.isAbstract» |
| 185 | type.setIsAbstract(true); |
| 186 | «ENDIF» |
| 187 | «IF !(type instanceof AnyType)» |
| 188 | «type.emitSuperClasses("type")» |
| 189 | «ENDIF» |
| 190 | «IF templateSignature !== null»«IF templateSignature.getOwnedParameters().size() > 0» |
| 191 | createTemplateSignature(type, «FOR templateParameter : templateSignature.getOwnedParameters() SEPARATOR(", ")»«templateParameter.getSymbolName()»«ENDFOR»); |
| 192 | «ENDIF» |
| 193 | «ENDIF» |
| 194 | ownedClasses.add(type); |
| 195 | «ENDFOR» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 196 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 197 | } |
| 198 | ''' |
| 199 | } |
| 200 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 201 | protected def String defineCollectionTypes(/*@NonNull*/ Model root) { |
Ed Willink | 8687e31 | 2017-07-19 13:38:32 +0200 | [diff] [blame] | 202 | // FIXME Probably need to interleave all specialized types in reverse dependency order |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 203 | var pkge2collectionTypes = root.getSortedCollectionTypes(); |
| 204 | if (pkge2collectionTypes.isEmpty()) return ""; |
| 205 | var sortedPackages = root.getSortedPackages(pkge2collectionTypes.keySet()); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 206 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 207 | |
| 208 | private void installCollectionTypes() { |
| 209 | List<Class> ownedClasses; |
| 210 | List<Class> superClasses; |
| 211 | CollectionType type; |
| 212 | «FOR pkge : sortedPackages» |
| 213 | |
| 214 | ownedClasses = «pkge.getSymbolName()».getOwnedClasses(); |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 215 | «FOR type : ClassUtil.nullFree(pkge2collectionTypes.get(pkge))» |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 216 | type = «type.getSymbolName()»; |
Ed Willink | a28e82f | 2017-08-11 10:33:34 +0100 | [diff] [blame] | 217 | «IF type.isAbstract» |
| 218 | type.setIsAbstract(true); |
| 219 | «ENDIF» |
| 220 | «IF type.lower.intValue() != 0» |
| 221 | type.setLower(«type.lower.intValue()»); |
| 222 | «ENDIF» |
| 223 | «IF !(type.upper instanceof Unlimited)» |
| 224 | type.setUpper(«type.upper.intValue()»); |
Ed Willink | 4f1f4a8 | 2016-02-24 10:52:50 +0000 | [diff] [blame] | 225 | «ENDIF» |
Ed Willink | c7c0916 | 2015-05-15 15:56:36 +0100 | [diff] [blame] | 226 | «IF type.isNullFree» |
| 227 | type.setIsNullFree(true); |
| 228 | «ENDIF» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 229 | «type.emitSuperClasses("type")» |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 230 | ownedClasses.add(type); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 231 | «ENDFOR» |
| 232 | «ENDFOR» |
| 233 | } |
| 234 | ''' |
| 235 | } |
| 236 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 237 | protected def String defineComments(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 238 | ''' |
| 239 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 240 | private void installComments() { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 241 | «FOR pElement : root.getSortedCommentedElements()» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 242 | «FOR pComment : pElement.getSortedComments()» |
| 243 | installComment(«pElement.getSymbolName()», "«pComment.javaString()»"); |
| 244 | «ENDFOR» |
| 245 | «ENDFOR» |
| 246 | } |
| 247 | ''' |
| 248 | } |
| 249 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 250 | protected def String defineEnumerations(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 251 | var pkge2enumerations = root.getSortedEnumerations(); |
| 252 | if (pkge2enumerations.isEmpty()) return ""; |
| 253 | var sortedPackages = root.getSortedPackages(pkge2enumerations.keySet()); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 254 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 255 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 256 | private void installEnumerations() { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 257 | List<Class> ownedClasses; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 258 | Enumeration type; |
| 259 | List<EnumerationLiteral> enumerationLiterals; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 260 | «FOR pkge : sortedPackages» |
| 261 | |
| 262 | ownedClasses = «pkge.getSymbolName()».getOwnedClasses(); |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 263 | «FOR enumeration : ClassUtil.nullFree(pkge2enumerations.get(pkge))» |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 264 | type = «enumeration.getSymbolName()»; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 265 | enumerationLiterals = type.getOwnedLiterals(); |
| 266 | «FOR enumerationLiteral : enumeration.ownedLiterals» |
| 267 | enumerationLiterals.add(«enumerationLiteral.getSymbolName()»); |
| 268 | «ENDFOR» |
Ed Willink | b626c23 | 2019-10-24 10:17:54 +0100 | [diff] [blame] | 269 | type.getSuperClasses().add(_OclEnumeration); |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 270 | ownedClasses.add(type); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 271 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 272 | «ENDFOR» |
| 273 | } |
| 274 | ''' |
| 275 | } |
| 276 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 277 | protected def String defineExternals(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 278 | var externals = root.getSortedExternals(); |
| 279 | if (externals.isEmpty()) return ""; |
Ed Willink | 3935bde | 2015-04-24 19:36:13 +0100 | [diff] [blame] | 280 | ''' |
Ed Willink | a32c404 | 2015-04-27 15:34:47 +0100 | [diff] [blame] | 281 | |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 282 | «FOR name : externals»«var element = ClassUtil.nonNullState(name2external.get(name))» |
Ed Willink | a32c404 | 2015-04-27 15:34:47 +0100 | [diff] [blame] | 283 | «IF element instanceof Package» |
| 284 | private final @NonNull Package «getPrefixedSymbolName(element, name)» = «element.getExternalReference()»; |
Ed Willink | 758e265 | 2022-03-02 07:49:56 +0000 | [diff] [blame] | 285 | «ELSEIF element instanceof PrimitiveType» |
| 286 | private final @NonNull Class «getPrefixedSymbolName(element, name)» = «element.getExternalReference()»; |
Ed Willink | a32c404 | 2015-04-27 15:34:47 +0100 | [diff] [blame] | 287 | «ELSE» |
| 288 | private final @NonNull «element.eClass().getName()» «getPrefixedSymbolName(element, name)» = «element.getExternalReference()»; |
| 289 | «ENDIF» |
Ed Willink | 3935bde | 2015-04-24 19:36:13 +0100 | [diff] [blame] | 290 | «ENDFOR» |
| 291 | ''' |
| 292 | } |
| 293 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 294 | protected def String defineIterations(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 295 | var pkge2iterations = root.getSortedIterations(); |
| 296 | if (pkge2iterations.isEmpty()) return ""; |
| 297 | var sortedPackages = root.getSortedPackages(pkge2iterations.keySet()); |
| 298 | var Class oldType = null; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 299 | ''' |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 300 | |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 301 | «FOR pkge : sortedPackages» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 302 | «FOR iteration : ClassUtil.nullFree(pkge2iterations.get(pkge))» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 303 | private final @NonNull Iteration «iteration.getPrefixedSymbolName("it_" + iteration.partialName())» = createIteration("«iteration. |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 304 | name»", «iteration.type.getSymbolName()», «IF iteration.implementationClass !== null»"«iteration. |
| 305 | implementationClass»", «iteration.implementationClass».INSTANCE«ELSE»null, null«ENDIF»«IF iteration.getOwnedSignature() !== null»«FOR templateParameter : iteration.getOwnedSignature().getOwnedParameters()», «templateParameter.getSymbolName()»«ENDFOR»«ENDIF»); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 306 | «ENDFOR» |
| 307 | «ENDFOR» |
| 308 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 309 | private void installIterations() { |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 310 | List<Operation> ownedIterations; |
| 311 | List<Parameter> ownedParameters; |
| 312 | Iteration iteration; |
| 313 | Parameter parameter; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 314 | «FOR pkge : sortedPackages» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 315 | «FOR iteration : ClassUtil.nullFree(pkge2iterations.get(pkge))»«var newType = iteration.getOwningClass()» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 316 | «IF newType != oldType» |
| 317 | |
| 318 | ownedIterations = «(oldType = newType).getSymbolName()».getOwnedOperations(); |
| 319 | «ENDIF» |
| 320 | ownedIterations.add(iteration = «iteration.getSymbolName()»); |
| 321 | «IF iteration.isInvalidating» |
| 322 | iteration.setIsInvalidating(true); |
| 323 | «ENDIF» |
| 324 | «IF !iteration.isRequired» |
| 325 | iteration.setIsRequired(false); |
| 326 | «ENDIF» |
| 327 | «IF iteration.isStatic» |
| 328 | iteration.setIsStatic(true); |
| 329 | «ENDIF» |
| 330 | «IF iteration.isTypeof» |
| 331 | iteration.setIsTypeof(true); |
| 332 | «ENDIF» |
| 333 | «IF iteration.isValidating» |
| 334 | iteration.setIsValidating(true); |
| 335 | «ENDIF» |
| 336 | «IF iteration.ownedIterators.size() > 0» |
| 337 | ownedParameters = iteration.getOwnedIterators(); |
| 338 | «FOR parameter : iteration.ownedIterators» |
| 339 | ownedParameters.add(parameter = createParameter("«parameter.name»", «parameter.type.getSymbolName()», «parameter.isRequired»)); |
| 340 | «IF parameter.isTypeof» |
| 341 | parameter.setIsTypeof(true); |
| 342 | «ENDIF» |
| 343 | «ENDFOR» |
| 344 | «ENDIF» |
| 345 | «IF iteration.ownedAccumulators.size() > 0» |
| 346 | ownedParameters = iteration.getOwnedAccumulators(); |
| 347 | «FOR parameter : iteration.ownedAccumulators» |
| 348 | ownedParameters.add(parameter = createParameter("«parameter.name»", «parameter.type.getSymbolName()», «parameter.isRequired»)); |
| 349 | «IF parameter.isTypeof» |
| 350 | parameter.setIsTypeof(true); |
| 351 | «ENDIF» |
| 352 | «ENDFOR» |
| 353 | «ENDIF» |
| 354 | «IF iteration.ownedParameters.size() > 0» |
| 355 | ownedParameters = iteration.getOwnedParameters(); |
| 356 | «FOR parameter : iteration.ownedParameters» |
| 357 | ownedParameters.add(parameter = createParameter("«parameter.name»", «parameter.type.getSymbolName()», «parameter.isRequired»)); |
| 358 | «IF parameter.isTypeof» |
| 359 | parameter.setIsTypeof(true); |
| 360 | «ENDIF» |
| 361 | «ENDFOR» |
| 362 | «ENDIF» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 363 | «ENDFOR» |
| 364 | «ENDFOR» |
| 365 | } |
| 366 | ''' |
| 367 | } |
| 368 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 369 | protected def String defineLambdaTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 370 | var allLambdaTypes = root.getSortedLambdaTypes(); |
| 371 | if (allLambdaTypes.isEmpty()) return ""; |
| 372 | var orphanPackage = root.getOrphanPackage(); |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 373 | if (orphanPackage === null) return ""; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 374 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 375 | |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 376 | «FOR type : allLambdaTypes» |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 377 | private final @NonNull LambdaType «type.getPrefixedSymbolName("_" + type.partialName())» = createLambdaType("«type. |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 378 | name»"); |
| 379 | «ENDFOR» |
| 380 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 381 | private void installLambdaTypes() { |
Ed Willink | f57d971 | 2015-05-01 12:09:16 +0100 | [diff] [blame] | 382 | final List<Class> orphanTypes = «ClassUtil.nonNullState(orphanPackage).getSymbolName()».getOwnedClasses(); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 383 | LambdaType type; |
Ed Willink | 0ef69f0 | 2014-08-05 18:04:57 +0100 | [diff] [blame] | 384 | List<Class> superClasses; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 385 | «FOR type : allLambdaTypes» |
| 386 | orphanTypes.add(type = «type.getSymbolName()»); |
| 387 | type.setContextType(«type.contextType.getSymbolName()»); |
| 388 | «FOR parameterType : type.parameterType» |
| 389 | type.getParameterType().add(«parameterType.getSymbolName()»); |
| 390 | «ENDFOR» |
| 391 | type.setResultType(«type.resultType.getSymbolName()»); |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 392 | «type.emitSuperClasses("type")» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 393 | «ENDFOR» |
| 394 | } |
| 395 | ''' |
| 396 | } |
| 397 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 398 | protected def String defineMapTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 399 | var pkge2mapTypes = root.getSortedMapTypes(); |
| 400 | if (pkge2mapTypes.isEmpty()) return ""; |
| 401 | var sortedPackages = root.getSortedPackages(pkge2mapTypes.keySet()); |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 402 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 403 | |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 404 | private void installMapTypes() { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 405 | List<Class> ownedClasses; |
| 406 | List<Class> superClasses; |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 407 | MapType type; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 408 | «FOR pkge : sortedPackages» |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 409 | |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 410 | ownedClasses = «pkge.getSymbolName()».getOwnedClasses(); |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 411 | «FOR type : ClassUtil.nullFree(pkge2mapTypes.get(pkge))» |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 412 | type = «type.getSymbolName()»; |
Ed Willink | 2de16e4 | 2022-08-24 16:49:55 +0100 | [diff] [blame] | 413 | «IF !type.keysAreNullFree» |
| 414 | type.setKeysAreNullFree(false); |
| 415 | «ENDIF» |
| 416 | «IF !type.valuesAreNullFree» |
| 417 | type.setValuesAreNullFree(false); |
| 418 | «ENDIF» |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 419 | «type.emitSuperClasses("type")» |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 420 | ownedClasses.add(type); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 421 | «ENDFOR» |
| 422 | «ENDFOR» |
| 423 | } |
| 424 | ''' |
| 425 | } |
| 426 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 427 | protected def String defineOperations(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 428 | var pkge2operations = root.getSortedOperations(); |
| 429 | if (pkge2operations.isEmpty()) return ""; |
| 430 | var sortedPackages = root.getSortedPackages(pkge2operations.keySet()); |
| 431 | var Class oldType = null; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 432 | ''' |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 433 | |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 434 | «FOR pkge : sortedPackages» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 435 | «FOR operation : ClassUtil.nullFree(pkge2operations.get(pkge))» |
Ed Willink | d73f3ad | 2021-08-28 11:40:58 +0100 | [diff] [blame] | 436 | private final @NonNull Operation «operation.getPrefixedSymbolName("op_" + operation.partialName())» = createOperation(«operation. |
| 437 | getNameLiteral()», «operation.type.getSymbolName()», «IF operation.implementationClass !== null»"«operation. |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 438 | implementationClass»", «operation.implementationClass».INSTANCE«ELSE»null, null«ENDIF»«IF operation.getOwnedSignature() !== null»«FOR templateParameter : operation.getOwnedSignature().getOwnedParameters()», «templateParameter.getSymbolName()»«ENDFOR»«ENDIF»); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 439 | «ENDFOR» |
| 440 | «ENDFOR» |
| 441 | |
| 442 | private void installOperations() { |
| 443 | List<Operation> ownedOperations; |
| 444 | List<Parameter> ownedParameters; |
| 445 | Operation operation; |
| 446 | Parameter parameter; |
| 447 | «FOR pkge : sortedPackages» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 448 | «FOR operation : ClassUtil.nullFree(pkge2operations.get(pkge))»«var newType = operation.getOwningClass()» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 449 | «IF newType != oldType» |
| 450 | |
| 451 | ownedOperations = «(oldType = newType).getSymbolName()».getOwnedOperations(); |
| 452 | «ENDIF» |
| 453 | ownedOperations.add(operation = «operation.getSymbolName()»); |
| 454 | «IF operation.isInvalidating» |
| 455 | operation.setIsInvalidating(true); |
| 456 | «ENDIF» |
| 457 | «IF !operation.isRequired» |
| 458 | operation.setIsRequired(false); |
| 459 | «ENDIF» |
| 460 | «IF operation.isStatic» |
| 461 | operation.setIsStatic(true); |
| 462 | «ENDIF» |
| 463 | «IF operation.isTypeof» |
| 464 | operation.setIsTypeof(true); |
| 465 | «ENDIF» |
| 466 | «IF operation.isValidating» |
| 467 | operation.setIsValidating(true); |
| 468 | «ENDIF» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 469 | «IF operation.bodyExpression !== null» |
Ed Willink | d73f3ad | 2021-08-28 11:40:58 +0100 | [diff] [blame] | 470 | createBodyExpression(operation, «operation.owningClass.getSymbolName()», "«operation.bodyExpression.javaString()»", «operation.type.getSymbolName()»); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 471 | «ENDIF» |
| 472 | «IF operation.ownedParameters.size() > 0» |
| 473 | ownedParameters = operation.getOwnedParameters(); |
| 474 | «FOR parameter : operation.ownedParameters» |
| 475 | ownedParameters.add(parameter = createParameter("«parameter.name»", «parameter.type.getSymbolName()», «parameter.isRequired»)); |
| 476 | «IF parameter.isTypeof» |
| 477 | parameter.setIsTypeof(true); |
| 478 | «ENDIF» |
| 479 | «ENDFOR» |
| 480 | «ENDIF» |
| 481 | «ENDFOR» |
| 482 | «ENDFOR» |
| 483 | } |
| 484 | ''' |
| 485 | } |
| 486 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 487 | protected def String definePackages(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 488 | var allPackages = root.getSortedPackages(); |
Ed Willink | 41636df | 2015-05-03 11:22:31 +0100 | [diff] [blame] | 489 | var import2alias = root.getSortedImports(); |
| 490 | var importKeys = new ArrayList<Package>(import2alias.keySet()); |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 491 | Collections.sort(importKeys, NameUtil.NAMEABLE_COMPARATOR); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 492 | if (allPackages.isEmpty()) return ""; |
| 493 | ''' |
| 494 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 495 | private void installPackages() { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 496 | «emitRoot(root)» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 497 | «IF allPackages.size() > 0» |
| 498 | «FOR pkg2 : allPackages» |
| 499 | «emitPackage(pkg2)» |
| 500 | «ENDFOR» |
| 501 | «ENDIF» |
Ed Willink | 41636df | 2015-05-03 11:22:31 +0100 | [diff] [blame] | 502 | «FOR importKey : importKeys»«val importName = import2alias.get(importKey)» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 503 | «root.getSymbolName()».getOwnedImports().add(createImport(«IF importName !== null»"«importName»"«ELSE»null«ENDIF», «importKey.getSymbolName()»)); |
Ed Willink | 41636df | 2015-05-03 11:22:31 +0100 | [diff] [blame] | 504 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 505 | } |
| 506 | ''' |
| 507 | } |
| 508 | |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 509 | protected def String definePrecedences(Model root) { |
| 510 | var allLibraries = root.getSortedLibrariesWithPrecedence(); |
| 511 | var allOperations = root.getSortedOperationsWithPrecedence(); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 512 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 513 | «IF (allLibraries.size() > 0) || (allOperations.size() > 0)» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 514 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 515 | private void installPrecedences() { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 516 | «IF allLibraries.size() > 0» |
| 517 | List<Precedence> ownedPrecedences; |
| 518 | |
| 519 | «FOR lib : allLibraries» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 520 | «var allPrecedences = lib.getSortedPrecedences()» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 521 | «IF (allPrecedences !== null) && (allPrecedences.size() > 0)» |
Ed Willink | 3935bde | 2015-04-24 19:36:13 +0100 | [diff] [blame] | 522 | «FOR precedence : allPrecedences» |
| 523 | final Precedence «precedence.getPrefixedSymbolName("prec_" + precedence.partialName())» = createPrecedence("«precedence.name»", AssociativityKind.«precedence.associativity.toString().toUpperCase()»); |
| 524 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 525 | |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 526 | ownedPrecedences = «lib.getSymbolName()».getOwnedPrecedences(); |
Ed Willink | 3935bde | 2015-04-24 19:36:13 +0100 | [diff] [blame] | 527 | «FOR precedence : lib.ownedPrecedences» |
| 528 | ownedPrecedences.add(«precedence.getSymbolName()»); |
| 529 | «ENDFOR» |
| 530 | «ENDIF» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 531 | «ENDFOR» |
| 532 | «ENDIF» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 533 | |
| 534 | «FOR operation : allOperations» |
| 535 | «operation.getSymbolName()».setPrecedence(«operation.precedence.getSymbolName()»); |
| 536 | «ENDFOR» |
| 537 | } |
| 538 | «ENDIF» |
| 539 | ''' |
| 540 | } |
| 541 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 542 | protected def String definePrimitiveTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 543 | var pkge2primitiveTypes = root.getSortedPrimitiveTypes(); |
| 544 | if (pkge2primitiveTypes.isEmpty()) return ""; |
| 545 | var sortedPackages = root.getSortedPackages(pkge2primitiveTypes.keySet()); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 546 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 547 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 548 | private void installPrimitiveTypes() { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 549 | List<Class> ownedClasses; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 550 | PrimitiveType type; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 551 | «FOR pkge : sortedPackages» |
| 552 | |
| 553 | ownedClasses = «pkge.getSymbolName()».getOwnedClasses(); |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 554 | «FOR type : ClassUtil.nullFree(pkge2primitiveTypes.get(pkge))» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 555 | «var superClasses = type.getSuperclassesInPackage()» |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 556 | type = «type.getSymbolNameWithoutNormalization()»; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 557 | «FOR superClass : superClasses» |
| 558 | type.getSuperClasses().add(«superClass.getSymbolName()»); |
| 559 | «ENDFOR» |
Ed Willink | 5e349ab | 2022-07-14 18:04:50 +0100 | [diff] [blame] | 560 | ownedClasses.add(type); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 561 | «ENDFOR» |
| 562 | «ENDFOR» |
| 563 | } |
| 564 | ''' |
| 565 | } |
| 566 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 567 | protected def String defineProperties(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 568 | var pkge2properties = root.getSortedProperties(); |
| 569 | if (pkge2properties.isEmpty()) return ""; |
| 570 | var sortedPackages = root.getSortedPackages(pkge2properties.keySet()); |
| 571 | var Class oldType = null; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 572 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 573 | |
Ed Willink | d73f3ad | 2021-08-28 11:40:58 +0100 | [diff] [blame] | 574 | «FOR pkge : sortedPackages» |
| 575 | |
| 576 | «FOR property : ClassUtil.nullFree(pkge2properties.get(pkge))» |
| 577 | private final @NonNull Property «property.getPrefixedSymbolName("pr_" + property.partialName())» = createProperty(«property.getNameLiteral()», «property.type.getSymbolName()»); |
| 578 | «ENDFOR» |
| 579 | «ENDFOR» |
| 580 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 581 | private void installProperties() { |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 582 | List<Property> ownedProperties; |
| 583 | Property property; |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 584 | «FOR pkge : sortedPackages» |
Ed Willink | 4607e9a | 2016-01-13 13:01:29 +0000 | [diff] [blame] | 585 | «FOR property : ClassUtil.nullFree(pkge2properties.get(pkge))»«var newType = property.getOwningClass()» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 586 | «IF newType != oldType» |
| 587 | |
| 588 | ownedProperties = «(oldType = newType).getSymbolName()».getOwnedProperties(); |
| 589 | «ENDIF» |
| 590 | ownedProperties.add(property = «property.getSymbolName()»); |
| 591 | «IF property.isComposite» |
| 592 | property.setIsComposite(true); |
| 593 | «ENDIF» |
| 594 | «IF property.isDerived» |
| 595 | property.setIsDerived(true); |
| 596 | «ENDIF» |
| 597 | «IF property.isID» |
| 598 | property.setIsID(true); |
| 599 | «ENDIF» |
| 600 | «IF property.isImplicit» |
| 601 | property.setIsImplicit(true); |
| 602 | «ENDIF» |
| 603 | «IF property.isReadOnly» |
| 604 | property.setIsReadOnly(true); |
| 605 | «ENDIF» |
| 606 | «IF !property.isRequired» |
| 607 | property.setIsRequired(false); |
| 608 | «ENDIF» |
| 609 | «IF property.isResolveProxies» |
| 610 | property.setIsResolveProxies(true); |
| 611 | «ENDIF» |
| 612 | «IF property.isStatic» |
| 613 | property.setIsStatic(true); |
| 614 | «ENDIF» |
| 615 | «IF property.isTransient» |
| 616 | property.setIsTransient(true); |
| 617 | «ENDIF» |
| 618 | «IF false /*property.isTypeof*/» |
| 619 | property.setIsTypeof(true); |
| 620 | «ENDIF» |
| 621 | «IF property.isUnsettable» |
| 622 | property.setIsUnsettable(true); |
| 623 | «ENDIF» |
| 624 | «IF property.isVolatile» |
| 625 | property.setIsVolatile(true); |
| 626 | «ENDIF» |
Ed Willink | 5143000 | 2019-06-02 14:25:13 +0100 | [diff] [blame] | 627 | «IF property.defaultValueString !== null» |
| 628 | property.setDefaultValueString("«property.defaultValueString»"); |
| 629 | «ENDIF» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 630 | «IF property.opposite !== null» |
Ed Willink | 0eb0101 | 2015-04-29 11:05:28 +0100 | [diff] [blame] | 631 | property.setOpposite(«property.opposite.getSymbolName()»); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 632 | «ENDIF» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 633 | «IF property.implementationClass !== null» |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 634 | property.setImplementationClass("«property.implementationClass»"); |
| 635 | property.setImplementation(«property.implementationClass».INSTANCE); |
| 636 | «ENDIF» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 637 | «ENDFOR» |
| 638 | «ENDFOR» |
| 639 | } |
| 640 | ''' |
| 641 | } |
| 642 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 643 | protected def String defineTemplateBindings(/*@NonNull*/ Model root) { |
Ed Willink | 8813104 | 2016-01-14 11:42:58 +0000 | [diff] [blame] | 644 | var allTemplateableElements = root.getSortedTemplateableElements(symbolNameComparator); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 645 | if (allTemplateableElements.isEmpty()) return ""; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 646 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 647 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 648 | private void installTemplateBindings() { |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 649 | «FOR templateableElement : allTemplateableElements» |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 650 | «FOR templateBinding : templateableElement.ownedBindings» |
Ed Willink | a2b9f0c | 2017-07-20 09:46:14 +0200 | [diff] [blame] | 651 | «FOR templateParameterSubstitution : templateBinding.ownedSubstitutions» |
| 652 | addBinding(«templateableElement.getSymbolName()», «templateParameterSubstitution.actual.getSymbolName()»); |
| 653 | «ENDFOR» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 654 | «ENDFOR» |
| 655 | «ENDFOR» |
| 656 | } |
| 657 | ''' |
| 658 | } |
| 659 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 660 | protected def String defineTemplateParameters(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 661 | var allTemplateParameters = root.getSortedTemplateParameters(); |
| 662 | if (allTemplateParameters.isEmpty()) return ""; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 663 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 664 | |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 665 | «FOR templateParameter : allTemplateParameters» |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 666 | private final @NonNull TemplateParameter «templateParameter.getPrefixedSymbolName( |
Ed Willink | f549df7 | 2015-04-08 13:49:38 +0100 | [diff] [blame] | 667 | "tp_" + templateParameter.partialName())» = createTemplateParameter("«templateParameter.getName()»"); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 668 | «ENDFOR» |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 669 | ''' |
| 670 | } |
| 671 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 672 | protected def String defineTupleTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 673 | var allTupleTypes = root.getSortedTupleTypes(); |
| 674 | if (allTupleTypes.isEmpty()) return ""; |
| 675 | var orphanPackage = root.getOrphanPackage(); |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 676 | if (orphanPackage === null) return ""; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 677 | ''' |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 678 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 679 | private void installTupleTypes() { |
Ed Willink | f57d971 | 2015-05-01 12:09:16 +0100 | [diff] [blame] | 680 | final List<Class> orphanTypes = «ClassUtil.nonNullState(orphanPackage).getSymbolName()».getOwnedClasses(); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 681 | TupleType type; |
Ed Willink | 0ef69f0 | 2014-08-05 18:04:57 +0100 | [diff] [blame] | 682 | List<Class> superClasses; |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 683 | «FOR type : allTupleTypes» |
| 684 | orphanTypes.add(type = «type.getSymbolName()»); |
| 685 | «FOR property : type.getSortedProperties()» |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 686 | «IF property.implementationClass !== null» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 687 | «property.getSymbolName()».setImplementationClass("«property.implementationClass»"); |
| 688 | «property.getSymbolName()».setImplementation(«property.implementationClass».INSTANCE); |
| 689 | «ENDIF» |
| 690 | «ENDFOR» |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 691 | «type.emitSuperClasses("type")» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 692 | «ENDFOR» |
| 693 | } |
| 694 | ''' |
| 695 | } |
| 696 | |
| 697 | protected def String emitCreateProperty(Property property) { |
| 698 | return "createProperty(" + property.name + ", " + property.type.getSymbolName() + ")"; |
| 699 | } |
| 700 | |
Ed Willink | 1b14e45 | 2014-08-05 18:07:10 +0100 | [diff] [blame] | 701 | protected def String emitPackage(Package pkg) { |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 702 | ''' |
| 703 | «FOR nestedPackage : pkg.getSortedPackages()» |
Ed Willink | 54d7d8a | 2014-08-08 09:27:40 +0100 | [diff] [blame] | 704 | «IF nestedPackage.getOwnedPackages().size() > 0» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 705 | «emitPackage(nestedPackage)» |
| 706 | «ENDIF» |
Ed Willink | 54d7d8a | 2014-08-08 09:27:40 +0100 | [diff] [blame] | 707 | «pkg.getSymbolName()».getOwnedPackages().add(«nestedPackage.getSymbolName()»); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 708 | «ENDFOR» |
| 709 | ''' |
| 710 | } |
| 711 | |
Ed Willink | 0e60b0a | 2014-09-23 07:02:53 +0100 | [diff] [blame] | 712 | protected def String emitRoot(Model pkg) { |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 713 | ''' |
| 714 | «FOR nestedPackage : pkg.getSortedPackages()» |
Ed Willink | 54d7d8a | 2014-08-08 09:27:40 +0100 | [diff] [blame] | 715 | «IF nestedPackage.getOwnedPackages().size() > 0» |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 716 | «emitPackage(nestedPackage)» |
| 717 | «ENDIF» |
Ed Willink | 54d7d8a | 2014-08-08 09:27:40 +0100 | [diff] [blame] | 718 | «pkg.getSymbolName()».getOwnedPackages().add(«nestedPackage.getSymbolName()»); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 719 | «ENDFOR» |
| 720 | ''' |
| 721 | } |
| 722 | |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 723 | protected def String emitSuperClasses(Class type, String typeName) { |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 724 | var superClasses = type.getSuperclassesInPackage(); |
| 725 | ''' |
| 726 | «IF superClasses.size() > 0» |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 727 | superClasses = «typeName».getSuperClasses(); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 728 | «FOR superClass : superClasses» |
| 729 | superClasses.add(«superClass.getSymbolName()»); |
| 730 | «ENDFOR» |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 731 | «ELSEIF (type instanceof MapType)» |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 732 | superClasses = «typeName».getSuperClasses(); |
Ed.Willink | 61f7621 | 2013-10-12 22:01:03 +0100 | [diff] [blame] | 733 | superClasses.add(_OclAny); |
Ed Willink | bd9d4b6 | 2019-05-30 11:00:48 +0100 | [diff] [blame] | 734 | «ELSEIF (type instanceof AnyType)» |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 735 | «ELSEIF TypeId.OCL_ELEMENT_NAME.equals(type.getName())» |
| 736 | «ELSEIF PivotConstants.ORPHANAGE_NAME.equals(type.getName())» |
Ed Willink | bd9d4b6 | 2019-05-30 11:00:48 +0100 | [diff] [blame] | 737 | «ELSE» |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 738 | superClasses = «typeName».getSuperClasses(); |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 739 | superClasses.add(_OclElement); |
| 740 | «ENDIF» |
| 741 | ''' |
| 742 | } |
| 743 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 744 | protected def String installClassTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 745 | var pkge2classTypes = root.getSortedClassTypes(); |
| 746 | if (pkge2classTypes.isEmpty()) return ""; |
| 747 | '''installClassTypes();''' |
| 748 | } |
| 749 | |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 750 | protected def String installCoercions(/*@NonNull*/ Model root) { |
| 751 | var allCoercions = root.getSortedCoercions(); |
| 752 | if (allCoercions.isEmpty()) return ""; |
| 753 | '''installCoercions();''' |
| 754 | } |
| 755 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 756 | protected def String installCollectionTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 757 | var pkge2collectionTypes = root.getSortedCollectionTypes(); |
| 758 | if (pkge2collectionTypes.isEmpty()) return ""; |
| 759 | '''installCollectionTypes();''' |
| 760 | } |
| 761 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 762 | protected def String installComments(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 763 | '''installComments();''' |
| 764 | } |
| 765 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 766 | protected def String installEnumerations(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 767 | var pkge2enumerations = root.getSortedEnumerations(); |
| 768 | if (pkge2enumerations.isEmpty()) return ""; |
| 769 | '''installEnumerations();''' |
| 770 | } |
| 771 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 772 | protected def String installIterations(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 773 | var pkge2iterations = root.getSortedIterations(); |
| 774 | if (pkge2iterations.isEmpty()) return ""; |
| 775 | '''installIterations();''' |
| 776 | } |
| 777 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 778 | protected def String installLambdaTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 779 | var allLambdaTypes = root.getSortedLambdaTypes(); |
| 780 | if (allLambdaTypes.isEmpty()) return ""; |
| 781 | '''installLambdaTypes();''' |
| 782 | } |
| 783 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 784 | protected def String installMapTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 785 | var pkge2mapTypes = root.getSortedMapTypes(); |
| 786 | if (pkge2mapTypes.isEmpty()) return ""; |
| 787 | '''installMapTypes();''' |
| 788 | } |
| 789 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 790 | protected def String installOperations(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 791 | var pkge2operations = root.getSortedOperations(); |
| 792 | if (pkge2operations.isEmpty()) return ""; |
| 793 | '''installOperations();''' |
| 794 | } |
| 795 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 796 | protected def String installPackages(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 797 | var allPackages = root.getSortedPackages(); |
| 798 | if (allPackages.isEmpty()) return ""; |
| 799 | '''installPackages();''' |
| 800 | } |
| 801 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 802 | protected def String installPrecedences(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 803 | var allLibraries = root.getSortedLibrariesWithPrecedence(); |
| 804 | var allOperations = root.getSortedOperationsWithPrecedence(); |
| 805 | if (allLibraries.isEmpty() && allOperations.isEmpty()) return ""; |
| 806 | '''installPrecedences();''' |
| 807 | } |
| 808 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 809 | protected def String installPrimitiveTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 810 | var pkge2primitiveTypes = root.getSortedPrimitiveTypes(); |
| 811 | if (pkge2primitiveTypes.isEmpty()) return ""; |
| 812 | '''installPrimitiveTypes();''' |
| 813 | } |
| 814 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 815 | protected def String installProperties(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 816 | var pkge2properties = root.getSortedProperties(); |
| 817 | if (pkge2properties.isEmpty()) return ""; |
| 818 | '''installProperties();''' |
| 819 | } |
| 820 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 821 | protected def String installTemplateBindings(/*@NonNull*/ Model root) { |
Ed Willink | e96c7cd | 2022-08-24 08:25:49 +0100 | [diff] [blame] | 822 | var allTemplateableElements = root.getSortedTemplateableElements(); |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 823 | if (allTemplateableElements.isEmpty()) return ""; |
| 824 | '''installTemplateBindings();''' |
| 825 | } |
| 826 | |
Ed Willink | 7005109 | 2015-12-23 19:11:07 +0000 | [diff] [blame] | 827 | protected def String installTupleTypes(/*@NonNull*/ Model root) { |
Ed Willink | 03e4d68 | 2015-04-25 17:57:56 +0100 | [diff] [blame] | 828 | var allTupleTypes = root.getSortedTupleTypes(); |
| 829 | if (allTupleTypes.size() <= 0) return ""; |
| 830 | '''installTupleTypes();''' |
| 831 | } |
| 832 | |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 833 | /** |
| 834 | * Generate a name for element suitable for embedding in a surrounding punctuation context. |
| 835 | */ |
Ed Willink | f0dc858 | 2014-01-03 18:26:51 +0000 | [diff] [blame] | 836 | protected override String partialName(EObject element) { |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 837 | switch element { |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 838 | CollectionType case element.elementType === null: return element.javaName() |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 839 | CollectionType: return element.javaName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 840 | LambdaType case element.contextType === null: return "null" |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 841 | LambdaType: return element.javaName() + "_" + element.contextType.partialName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 842 | MapType case element.keyType === null: return element.javaName() |
| 843 | MapType case element.valueType === null: return element.javaName() |
Ed Willink | 6489b07 | 2015-03-22 12:45:19 +0000 | [diff] [blame] | 844 | MapType: return element.javaName() |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 845 | Class case element.ownedBindings.size() > 0: return '''«element.javaName()»«FOR TemplateParameterSubstitution tps : element.getTemplateParameterSubstitutions()»_«tps.actual.simpleName()»«ENDFOR»''' |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 846 | Class: return element.javaName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 847 | Comment case element.body === null: return "null" |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 848 | Comment: return element.javaName(element.body.substring(0, Math.min(11, element.body.length() - 1))) |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 849 | EnumerationLiteral case element.owningEnumeration === null: return "null" |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 850 | EnumerationLiteral: return element.owningEnumeration.partialName() + "_" + element.javaName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 851 | Operation case element.owningClass === null: return "null_" + element.javaName() |
Ed Willink | cea7d6a | 2014-08-08 14:57:50 +0100 | [diff] [blame] | 852 | Operation: return element.owningClass.partialName() + "_" + element.javaName() |
Ed Willink | 1b14e45 | 2014-08-05 18:07:10 +0100 | [diff] [blame] | 853 | Package: return element.javaName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 854 | Parameter case element.eContainer() === null: return "null_" + element.javaName() |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 855 | Parameter: return element.eContainer().partialName() + "_" + element.javaName() |
| 856 | Precedence: return element.javaName() |
Ed Willink | f0dc858 | 2014-01-03 18:26:51 +0000 | [diff] [blame] | 857 | Property: return getPartialName(element) |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 858 | TemplateBinding case element.getTemplateSignature().owningElement === null: return "null" |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 859 | TemplateBinding: return element.owningElement.partialName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 860 | TemplateParameter case element.getOwningSignature.owningElement === null: return "[" + element.getOwningSignature.partialName() + "]" |
Ed Willink | cdac496 | 2014-08-11 10:10:17 +0100 | [diff] [blame] | 861 | // TemplateParameter case element.getOwningTemplateSignature.owningTemplateableElement.getUnspecializedElement() == null: return element.javaName() |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 862 | TemplateParameter: return element.getOwningSignature.owningElement.partialName() + "_" + element.javaName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 863 | TemplateParameterSubstitution case element.owningBinding === null: return "null" |
| 864 | TemplateParameterSubstitution case element.owningBinding.owningElement === null: return "null" |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 865 | TemplateParameterSubstitution: return element.owningBinding.owningElement.partialName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 866 | TemplateSignature case element.owningElement === null: return "null" |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 867 | TemplateSignature: return element.owningElement.partialName() |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 868 | default: return "xyzzy" + element.eClass().name |
| 869 | } |
| 870 | } |
| 871 | |
| 872 | protected def String simpleName(EObject element) { |
| 873 | switch element { |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 874 | TemplateParameter case element.getOwningSignature.owningElement === null: return "null" |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 875 | TemplateParameter: return element.getOwningSignature.owningElement.simpleName() + "_" + element.javaName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 876 | TemplateParameterSubstitution case element.owningBinding === null: return "null" |
| 877 | TemplateParameterSubstitution case element.owningBinding.owningElement === null: return "null" |
Ed Willink | 3b59646 | 2014-12-21 09:15:39 +0000 | [diff] [blame] | 878 | TemplateParameterSubstitution: return element.owningBinding.owningElement.simpleName() |
Ed Willink | 826c1c4 | 2014-08-10 19:46:07 +0100 | [diff] [blame] | 879 | Class: return element.javaName() |
Ed Willink | 0152676 | 2018-01-13 16:50:52 +0000 | [diff] [blame] | 880 | Operation case element.owningClass === null: return "null_" + element.javaName() |
Ed Willink | cea7d6a | 2014-08-08 14:57:50 +0100 | [diff] [blame] | 881 | Operation: return element.owningClass.simpleName() + "_" + element.javaName() |
Ed.Willink | a820ebe | 2013-10-02 13:55:59 -0400 | [diff] [blame] | 882 | default: return "xyzzy" + element.eClass().name |
| 883 | } |
| 884 | } |
| 885 | } |