@@ -853,7 +853,7 @@ public static string CreatePackageDefForBaseMethodRequestBuilder(this CustomT4Ho
853
853
{
854
854
var sb = new StringBuilder ( ) ;
855
855
sb . Append ( host . CreatePackageDefinition ( ) ) ;
856
- var importFormat = @"import {0}.{1}.{2};" ;
856
+ const string importFormat = @"import {0}.{1}.{2};" ;
857
857
sb . AppendFormat ( importFormat ,
858
858
host . CurrentNamespace ( ) ,
859
859
GetPrefixForRequests ( ) ,
@@ -866,21 +866,24 @@ public static string CreatePackageDefForBaseMethodRequestBuilder(this CustomT4Ho
866
866
host . CurrentType . TypeRequest ( ) ) ;
867
867
sb . Append ( "\n " ) ;
868
868
869
- foreach ( var method in host . CurrentType . AsOdcmMethod ( ) . WithOverloads ( ) )
870
- {
871
- sb = ImportClassesOfMethodParameters ( method , importFormat , sb ) ;
872
- }
869
+ var imports = host . CurrentType . AsOdcmMethod ( ) . WithOverloads ( ) . SelectMany ( x => ImportClassesOfMethodParameters ( x ) ) ;
870
+ sb . Append ( imports . Any ( ) ? imports . Aggregate ( ( x , y ) => $ "{ x } { Environment . NewLine } { y } ") : string . Empty ) ;
873
871
return sb . ToString ( ) ;
874
872
}
875
873
874
+ public static string ImportClassesOfMethodParametersAsString ( OdcmMethod method , string importFormat = "import {0}.{1}.{2};" , string importTypeToExclude = null )
875
+ {
876
+ var imports = ImportClassesOfMethodParameters ( method , importFormat , importTypeToExclude ) ;
877
+ return imports . Any ( ) ? imports . Aggregate ( ( x , y ) => $ "{ x } { Environment . NewLine } { y } ") : string . Empty ;
878
+ }
879
+
876
880
/// <summary>
877
881
/// Appends import statements of types that appear as a method's parameters
878
882
/// </summary>
879
883
/// <param name="method">Method whose parameter types will be consumed</param>
880
884
/// <param name="importFormat">import format, e.g. "import {0}.{1}.{2}"</param>
881
- /// <param name="sb">StringBuilder object currently in use</param>
882
- /// <returns>StringBuilder object with import statements inserted</returns>
883
- public static StringBuilder ImportClassesOfMethodParameters ( OdcmMethod method , string importFormat , StringBuilder sb , string importTypeToExclude = null )
885
+ /// <returns>Hashset with import statements to insert</returns>
886
+ public static HashSet < string > ImportClassesOfMethodParameters ( OdcmMethod method , string importFormat = "import {0}.{1}.{2};" , string importTypeToExclude = null )
884
887
{
885
888
var importStatements = new HashSet < string > ( ) ;
886
889
var appendEnumSet = false ;
@@ -899,16 +902,14 @@ public static StringBuilder ImportClassesOfMethodParameters(OdcmMethod method, s
899
902
}
900
903
}
901
904
if ( ! ( method ? . ReturnType == null || method . ReturnType is OdcmPrimitiveType ) )
902
- sb . AppendFormat ( importFormat , method . ReturnType . Namespace . Name . AddPrefix ( ) , method . ReturnType . GetPackagePrefix ( ) , method . OdcmMethodReturnType ( ) ) ;
903
-
904
- sb . Append ( string . Join ( string . Empty , importStatements ) ) ;
905
+ importStatements . Add ( string . Format ( importFormat , method . ReturnType . Namespace . Name . AddPrefix ( ) , method . ReturnType . GetPackagePrefix ( ) , method . OdcmMethodReturnType ( ) ) ) ;
905
906
906
907
if ( appendEnumSet )
907
908
{
908
- sb . Append ( "import java.util.EnumSet;" + Environment . NewLine ) ;
909
+ importStatements . Add ( "import java.util.EnumSet;" ) ;
909
910
}
910
911
911
- return sb ;
912
+ return importStatements ;
912
913
}
913
914
914
915
public static string CreatePackageDefForIBaseMethodBodyRequest ( this CustomT4Host host )
@@ -1184,29 +1185,29 @@ public static string CreatePackageDef(this CustomT4Host host)
1184
1185
1185
1186
// determine current namespace and generate method imports if applicable
1186
1187
string @namespace ;
1187
- var methodImports = new StringBuilder ( ) ;
1188
- var importFormat = "import {0}.{1}.{2};" + Environment . NewLine ;
1188
+ var methodImports = new HashSet < string > ( ) ;
1189
+ const string importFormat = "import {0}.{1}.{2};" ;
1189
1190
const string graphServiceEntityName = "GraphService" ;
1190
1191
const string interfaceTemplatePrefix = "I" ;
1191
1192
switch ( host . CurrentType )
1192
1193
{
1193
1194
case OdcmProperty p :
1194
1195
@namespace = p . Type . Namespace . Name . AddPrefix ( ) ;
1195
1196
if ( p . Class . GetTypeString ( ) != graphServiceEntityName )
1196
- methodImports . AppendFormat ( importFormat , p . Class . Namespace . Name . AddPrefix ( ) , p . Class . GetPackagePrefix ( ) , p . Class . GetTypeString ( ) ) ;
1197
+ methodImports . Add ( string . Format ( importFormat , p . Class . Namespace . Name . AddPrefix ( ) , p . Class . GetPackagePrefix ( ) , p . Class . GetTypeString ( ) ) ) ;
1197
1198
if ( ! ( p . Projection . Type is OdcmPrimitiveType ) )
1198
- methodImports . AppendFormat ( importFormat , p . Projection . Type . Namespace . Name . AddPrefix ( ) , p . Projection . Type . GetPackagePrefix ( ) , p . Projection . Type . GetTypeString ( ) ) ;
1199
- p . Projection ? . Type ? . AsOdcmClass ( ) ? . MethodsAndOverloads ( ) ? . Distinct ( ) ? . ToList ( ) ? . ForEach ( o => ImportClassesOfMethodParameters ( o , importFormat , methodImports ) ) ;
1199
+ methodImports . Add ( string . Format ( importFormat , p . Projection . Type . Namespace . Name . AddPrefix ( ) , p . Projection . Type . GetPackagePrefix ( ) , p . Projection . Type . GetTypeString ( ) ) ) ;
1200
+ p . Projection ? . Type ? . AsOdcmClass ( ) ? . MethodsAndOverloads ( ) ? . Distinct ( ) ? . SelectMany ( o => ImportClassesOfMethodParameters ( o ) ) ? . ToList ( ) ? . ForEach ( x => methodImports . Add ( x ) ) ;
1200
1201
break ;
1201
1202
case OdcmMethod m :
1202
- m . WithDistinctOverloads ( ) . ForEach ( o => ImportClassesOfMethodParameters ( o , importFormat , methodImports ) ) ;
1203
+ m . WithDistinctOverloads ( ) . SelectMany ( o => ImportClassesOfMethodParameters ( o ) ) ? . ToList ( ) ? . ForEach ( x => methodImports . Add ( x ) ) ;
1203
1204
goto default ;
1204
1205
case OdcmClass c :
1205
1206
if ( c . GetTypeString ( ) != graphServiceEntityName )
1206
- methodImports . AppendFormat ( importFormat , c . Namespace . Name . AddPrefix ( ) , c . GetPackagePrefix ( ) , c . GetTypeString ( ) ) ;
1207
+ methodImports . Add ( string . Format ( importFormat , c . Namespace . Name . AddPrefix ( ) , c . GetPackagePrefix ( ) , c . GetTypeString ( ) ) ) ;
1207
1208
1208
1209
var importTypeToExclude = host . TemplateFile . EndsWith ( "BaseEntityRequest.java.tt" ) ? host . TemplateName : string . Empty ;
1209
- c ? . MethodsAndOverloads ( ) ? . Distinct ( ) ? . ToList ( ) ? . ForEach ( o => ImportClassesOfMethodParameters ( o , importFormat , methodImports , importTypeToExclude ) ) ;
1210
+ c ? . MethodsAndOverloads ( ) ? . Distinct ( ) ? . SelectMany ( o => ImportClassesOfMethodParameters ( o , importTypeToExclude : importTypeToExclude ) ) ? . ToList ( ) ? . ForEach ( x => methodImports . Add ( x ) ) ;
1210
1211
c ? . NavigationProperties ( ) ? . Where ( x => x . IsCollection ) ? . Select ( x => x . Projection . Type ) ? . Distinct ( ) ? . ToList ( ) ? . ForEach ( x =>
1211
1212
ImportRequestBuilderTypes ( host , x , methodImports , importFormat , interfaceTemplatePrefix , true )
1212
1213
) ;
@@ -1224,18 +1225,18 @@ public static string CreatePackageDef(this CustomT4Host host)
1224
1225
host . TemplateInfo . OutputParentDirectory . Replace ( "_" , "." ) ,
1225
1226
host . CurrentModel . GetNamespace ( ) . AddPrefix ( ) ,
1226
1227
fullyQualifiedImport ,
1227
- methodImports . ToString ( ) ) ;
1228
+ methodImports . Any ( ) ? methodImports . Aggregate ( ( x , y ) => $ " { x } { Environment . NewLine } { y } " ) : string . Empty ) ;
1228
1229
}
1229
- private static void ImportRequestBuilderTypes ( CustomT4Host host , OdcmType x , StringBuilder methodImports , string importFormat , string interfaceTemplatePrefix , bool includeCollectionTypes )
1230
+ private static void ImportRequestBuilderTypes ( CustomT4Host host , OdcmType x , HashSet < string > methodImports , string importFormat , string interfaceTemplatePrefix , bool includeCollectionTypes )
1230
1231
{
1231
1232
if ( includeCollectionTypes )
1232
- methodImports . AppendFormat ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . ITypeCollectionRequestBuilder ( ) ) ;
1233
- methodImports . AppendFormat ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . ITypeRequestBuilder ( ) ) ;
1233
+ methodImports . Add ( string . Format ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . ITypeCollectionRequestBuilder ( ) ) ) ;
1234
+ methodImports . Add ( string . Format ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . ITypeRequestBuilder ( ) ) ) ;
1234
1235
if ( ! host . TemplateInfo . TemplateName . StartsWith ( interfaceTemplatePrefix ) )
1235
1236
{
1236
1237
if ( includeCollectionTypes )
1237
- methodImports . AppendFormat ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . TypeCollectionRequestBuilder ( ) ) ;
1238
- methodImports . AppendFormat ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . TypeRequestBuilder ( ) ) ;
1238
+ methodImports . Add ( string . Format ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . TypeCollectionRequestBuilder ( ) ) ) ;
1239
+ methodImports . Add ( string . Format ( importFormat , x . Namespace . Name . AddPrefix ( ) , GetPrefixForRequests ( ) , x . TypeRequestBuilder ( ) ) ) ;
1239
1240
}
1240
1241
}
1241
1242
/// <summary>
0 commit comments