@@ -119,19 +119,23 @@ public Map<Path, TokenTree> generate() {
119
119
DafnyNameResolverHelpers .dafnyExternNamespaceForShapeId (serviceShape .getId ()),
120
120
typesModuleName
121
121
));
122
-
122
+ final TokenTree abstractServiceModule = generateAbstractServiceModule (serviceShape );
123
+ final TokenTree abstractOperationsModule = generateAbstractOperationsModule (serviceShape );
124
+ final TokenTree modeledErrorDataType = generateModeledErrorDataType ();
123
125
// A smithy model may reference a model in a different package.
124
126
// In which case we need to import it.
127
+ // Everything MUST BE GENERATED BEFORE `typesModulePrelude` is calculated.
128
+ // Otherwise, a foreign shape maybe referenced WITHOUT an import.
125
129
final TokenTree typesModulePrelude = TokenTree
126
130
.of (Stream
127
131
.concat (
128
- nameResolver .modulePreludeStandardImports (),
132
+ DafnyNameResolver .modulePreludeStandardImports (),
129
133
nameResolver
130
134
.dependentModels ()
131
135
.stream ()
132
136
.map (d ->
133
- "import " + nameResolver .dafnyTypesModuleForNamespace (d .namespace ())))
134
- .map (i -> Token . of ( i ) )
137
+ "import " + DafnyNameResolver .dafnyTypesModuleForNamespace (d .namespace ())))
138
+ .map (Token :: of )
135
139
)
136
140
.lineSeparated ();
137
141
@@ -152,7 +156,7 @@ public Map<Path, TokenTree> generate() {
152
156
// Error types are generated *after*
153
157
// all other types to account
154
158
// for any dependent modules
155
- generateModeledErrorDataType ()
159
+ modeledErrorDataType
156
160
)
157
161
.lineSeparated ()
158
162
.braced ();
@@ -163,8 +167,8 @@ public Map<Path, TokenTree> generate() {
163
167
includeDirectives ,
164
168
typesModuleHeader ,
165
169
typesModuleBody ,
166
- generateAbstractServiceModule ( serviceShape ) ,
167
- generateAbstractOperationsModule ( serviceShape )
170
+ abstractServiceModule ,
171
+ abstractOperationsModule
168
172
)
169
173
.lineSeparated ();
170
174
return Map .of (path , fullCode );
@@ -425,7 +429,7 @@ public TokenTree generateReferenceTraitDefinition(final ShapeId shapeWithReferen
425
429
// the module needs to be included
426
430
// because we are obviously using it!
427
431
final String sideEffect = nameResolver
428
- .dafnyModulePrefixForShapeId (model .expectShape (referenceTrait .getReferentId ()));
432
+ .dafnyModulePrefixForShape (model .expectShape (referenceTrait .getReferentId ()));
429
433
return null ;
430
434
}
431
435
@@ -1350,6 +1354,7 @@ abstractModulePrelude, generateAbstractLocalService(serviceShape)
1350
1354
}
1351
1355
}
1352
1356
1357
+ // This method needs to be called before typesModulePrelude is calculated
1353
1358
public TokenTree generateAbstractServiceModule (ServiceShape serviceShape ) {
1354
1359
final TokenTree abstractModulePrelude = TokenTree
1355
1360
.of (DafnyNameResolver .abstractModulePrelude (serviceShape ))
@@ -1358,11 +1363,12 @@ public TokenTree generateAbstractServiceModule(ServiceShape serviceShape) {
1358
1363
.formatted (nameResolver .abstractServiceModuleName (serviceShape )));
1359
1364
1360
1365
if (serviceShape .hasTrait (ServiceTrait .class )) {
1366
+ TokenTree body = generateAbstractAwsServiceClass (serviceShape );
1361
1367
return moduleHeader
1362
1368
.append (Token
1363
1369
.of (
1364
1370
abstractModulePrelude ,
1365
- generateAbstractAwsServiceClass ( serviceShape )
1371
+ body
1366
1372
)
1367
1373
.lineSeparated ()
1368
1374
.braced ()
@@ -1829,8 +1835,8 @@ public TokenTree generateAbstractLocalService(ServiceShape serviceShape) {
1829
1835
if (!serviceShape .hasTrait (LocalServiceTrait .class )) throw new IllegalStateException ("MUST be an LocalService" );
1830
1836
final LocalServiceTrait localServiceTrait = serviceShape .expectTrait (LocalServiceTrait .class );
1831
1837
1832
- final String configTypeName = localServiceTrait .getConfigId (). getName ( );
1833
- final String defaultFunctionMethodName = "Default%s" .formatted (configTypeName );
1838
+ final String configTypeName = nameResolver . baseTypeForShape ( localServiceTrait .getConfigId ());
1839
+ final String defaultFunctionMethodName = "Default%s" .formatted (localServiceTrait . getConfigId (). getName () );
1834
1840
1835
1841
final TokenTree defaultConfig = TokenTree
1836
1842
.of ("function method %s(): %s" .formatted (defaultFunctionMethodName , configTypeName ));
@@ -1940,8 +1946,8 @@ public TokenTree generateAbstractWrappedLocalService(ServiceShape serviceShape)
1940
1946
.of (DafnyNameResolver .wrappedAbstractModulePrelude (serviceShape ))
1941
1947
.lineSeparated ();
1942
1948
1943
- final String configTypeName = localServiceTrait .getConfigId (). getName ( );
1944
- final String defaultFunctionMethodName = "Default%s" .formatted (configTypeName );
1949
+ final String configTypeName = nameResolver . baseTypeForShape ( localServiceTrait .getConfigId ());
1950
+ final String defaultFunctionMethodName = "Default%s" .formatted (localServiceTrait . getConfigId (). getName () );
1945
1951
1946
1952
final TokenTree defaultConfig = TokenTree
1947
1953
.of ("function method Wrapped%s(): %s" .formatted (defaultFunctionMethodName , configTypeName ));
0 commit comments