@@ -20,6 +20,14 @@ interface IBuildRule
20
20
BuildScript Analyse ( Autobuilder builder , bool auto ) ;
21
21
}
22
22
23
+ /// <summary>
24
+ /// Exception indicating that environment variables are missing or invalid.
25
+ /// </summary>
26
+ class InvalidEnvironmentException : Exception
27
+ {
28
+ public InvalidEnvironmentException ( string m ) : base ( m ) { }
29
+ }
30
+
23
31
/// <summary>
24
32
/// Main application logic, containing all data
25
33
/// gathered from the project and filesystem.
@@ -69,7 +77,7 @@ public class Autobuilder
69
77
/// List of project/solution files to build.
70
78
/// </summary>
71
79
public IList < IProjectOrSolution > ProjectsOrSolutionsToBuild => projectsOrSolutionsToBuildLazy . Value ;
72
- readonly Lazy < IList < IProjectOrSolution > > projectsOrSolutionsToBuildLazy ;
80
+ private readonly Lazy < IList < IProjectOrSolution > > projectsOrSolutionsToBuildLazy ;
73
81
74
82
/// <summary>
75
83
/// Holds if a given path was found.
@@ -129,7 +137,7 @@ public Autobuilder(IBuildActions actions, AutobuildOptions options)
129
137
130
138
projectsOrSolutionsToBuildLazy = new Lazy < IList < IProjectOrSolution > > ( ( ) =>
131
139
{
132
- List < IProjectOrSolution > ret ;
140
+ List < IProjectOrSolution > ? ret ;
133
141
if ( options . Solution . Any ( ) )
134
142
{
135
143
ret = new List < IProjectOrSolution > ( ) ;
@@ -143,7 +151,7 @@ public Autobuilder(IBuildActions actions, AutobuildOptions options)
143
151
return ret ;
144
152
}
145
153
146
- IEnumerable < IProjectOrSolution > FindFiles ( string extension , Func < string , ProjectOrSolution > create )
154
+ IEnumerable < IProjectOrSolution > ? FindFiles ( string extension , Func < string , ProjectOrSolution > create )
147
155
{
148
156
var matchingFiles = GetExtensions ( extension ) .
149
157
Select ( p => ( ProjectOrSolution : create ( p . Item1 ) , DistanceFromRoot : p . Item2 ) ) .
@@ -177,19 +185,34 @@ IEnumerable<IProjectOrSolution> FindFiles(string extension, Func<string, Project
177
185
} ) ;
178
186
179
187
CodeQLExtractorCSharpRoot = Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_ROOT" ) ;
180
-
181
- CodeQLJavaHome = Actions . GetEnvironmentVariable ( "CODEQL_JAVA_HOME" ) ;
182
-
183
188
SemmleDist = Actions . GetEnvironmentVariable ( "SEMMLE_DIST" ) ;
184
-
185
- SemmleJavaHome = Actions . GetEnvironmentVariable ( "SEMMLE_JAVA_HOME" ) ;
186
-
187
189
SemmlePlatformTools = Actions . GetEnvironmentVariable ( "SEMMLE_PLATFORM_TOOLS" ) ;
188
190
189
- if ( CodeQLExtractorCSharpRoot == null && SemmleDist == null )
190
- Log ( Severity . Error , "The environment variables CODEQL_EXTRACTOR_CSHARP_ROOT and SEMMLE_DIST have not been set." ) ;
191
+ JavaHome =
192
+ Actions . GetEnvironmentVariable ( "CODEQL_JAVA_HOME" ) ??
193
+ Actions . GetEnvironmentVariable ( "SEMMLE_JAVA_HOME" ) ??
194
+ throw new InvalidEnvironmentException ( "The environment variable CODEQL_JAVA_HOME or SEMMLE_JAVA_HOME has not been set." ) ;
195
+
196
+ Distribution =
197
+ CodeQLExtractorCSharpRoot ??
198
+ SemmleDist ??
199
+ throw new InvalidEnvironmentException ( "The environment variable CODEQL_EXTRACTOR_CSHARP_ROOT or SEMMLE_DIST has not been set." ) ;
200
+
201
+ TrapDir =
202
+ Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_TRAP_DIR" ) ??
203
+ Actions . GetEnvironmentVariable ( "TRAP_FOLDER" ) ??
204
+ throw new InvalidEnvironmentException ( "The environment variable CODEQL_EXTRACTOR_CSHARP_TRAP_DIR or TRAP_FOLDER has not been set." ) ;
205
+
206
+ SourceArchiveDir =
207
+ Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR" ) ??
208
+ Actions . GetEnvironmentVariable ( "SOURCE_ARCHIVE" ) ??
209
+ throw new InvalidEnvironmentException ( "The environment variable CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR or SOURCE_ARCHIVE has not been set." ) ;
191
210
}
192
211
212
+ private string TrapDir { get ; }
213
+
214
+ private string SourceArchiveDir { get ; }
215
+
193
216
readonly ILogger logger = new ConsoleLogger ( Verbosity . Info ) ;
194
217
195
218
/// <summary>
@@ -271,9 +294,9 @@ BuildScript CheckExtractorRun(bool warnOnFailure) =>
271
294
break ;
272
295
case CSharpBuildStrategy . Auto :
273
296
var cleanTrapFolder =
274
- BuildScript . DeleteDirectory ( Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_TRAP_DIR" ) ?? Actions . GetEnvironmentVariable ( "TRAP_FOLDER" ) ) ;
297
+ BuildScript . DeleteDirectory ( TrapDir ) ;
275
298
var cleanSourceArchive =
276
- BuildScript . DeleteDirectory ( Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR" ) ?? Actions . GetEnvironmentVariable ( "SOURCE_ARCHIVE" ) ) ;
299
+ BuildScript . DeleteDirectory ( SourceArchiveDir ) ;
277
300
var tryCleanExtractorArgsLogs =
278
301
BuildScript . Create ( actions =>
279
302
{
@@ -376,38 +399,33 @@ BuildScript AutobuildFailure() =>
376
399
/// <summary>
377
400
/// Value of CODEQL_EXTRACTOR_CSHARP_ROOT environment variable.
378
401
/// </summary>
379
- public string CodeQLExtractorCSharpRoot { get ; private set ; }
380
-
381
- /// <summary>
382
- /// Value of CODEQL_JAVA_HOME environment variable.
383
- /// </summary>
384
- public string CodeQLJavaHome { get ; private set ; }
402
+ private string ? CodeQLExtractorCSharpRoot { get ; }
385
403
386
404
/// <summary>
387
405
/// Value of SEMMLE_DIST environment variable.
388
406
/// </summary>
389
- public string SemmleDist { get ; private set ; }
407
+ private string ? SemmleDist { get ; }
390
408
391
- /// <summary>
392
- /// Value of SEMMLE_JAVA_HOME environment variable.
393
- /// </summary>
394
- public string SemmleJavaHome { get ; private set ; }
409
+ public string Distribution { get ; }
410
+
411
+ public string JavaHome { get ; }
395
412
396
413
/// <summary>
397
414
/// Value of SEMMLE_PLATFORM_TOOLS environment variable.
398
415
/// </summary>
399
- public string SemmlePlatformTools { get ; private set ; }
416
+ public string ? SemmlePlatformTools { get ; }
400
417
401
418
/// <summary>
402
419
/// The absolute path of the odasa executable.
420
+ /// null if we are running in CodeQL.
403
421
/// </summary>
404
- public string Odasa => SemmleDist == null ? null : Actions . PathCombine ( SemmleDist , "tools" , "odasa" ) ;
422
+ public string ? Odasa => SemmleDist is null ? null : Actions . PathCombine ( SemmleDist , "tools" , "odasa" ) ;
405
423
406
424
/// <summary>
407
425
/// Construct a command that executed the given <paramref name="cmd"/> wrapped in
408
426
/// an <code>odasa --index</code>, unless indexing has been disabled, in which case
409
427
/// <paramref name="cmd"/> is run directly.
410
428
/// </summary>
411
- internal CommandBuilder MaybeIndex ( CommandBuilder builder , string cmd ) => Options . Indexing ? builder . IndexCommand ( Odasa , cmd ) : builder . RunCommand ( cmd ) ;
429
+ internal CommandBuilder MaybeIndex ( CommandBuilder builder , string cmd ) => Options . Indexing && ! ( Odasa is null ) ? builder . IndexCommand ( Odasa , cmd ) : builder . RunCommand ( cmd ) ;
412
430
}
413
431
}
0 commit comments