@@ -20,6 +20,14 @@ interface IBuildRule
2020 BuildScript Analyse ( Autobuilder builder , bool auto ) ;
2121 }
2222
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+
2331 /// <summary>
2432 /// Main application logic, containing all data
2533 /// gathered from the project and filesystem.
@@ -69,7 +77,7 @@ public class Autobuilder
6977 /// List of project/solution files to build.
7078 /// </summary>
7179 public IList < IProjectOrSolution > ProjectsOrSolutionsToBuild => projectsOrSolutionsToBuildLazy . Value ;
72- readonly Lazy < IList < IProjectOrSolution > > projectsOrSolutionsToBuildLazy ;
80+ private readonly Lazy < IList < IProjectOrSolution > > projectsOrSolutionsToBuildLazy ;
7381
7482 /// <summary>
7583 /// Holds if a given path was found.
@@ -129,7 +137,7 @@ public Autobuilder(IBuildActions actions, AutobuildOptions options)
129137
130138 projectsOrSolutionsToBuildLazy = new Lazy < IList < IProjectOrSolution > > ( ( ) =>
131139 {
132- List < IProjectOrSolution > ret ;
140+ List < IProjectOrSolution > ? ret ;
133141 if ( options . Solution . Any ( ) )
134142 {
135143 ret = new List < IProjectOrSolution > ( ) ;
@@ -143,7 +151,7 @@ public Autobuilder(IBuildActions actions, AutobuildOptions options)
143151 return ret ;
144152 }
145153
146- IEnumerable < IProjectOrSolution > FindFiles ( string extension , Func < string , ProjectOrSolution > create )
154+ IEnumerable < IProjectOrSolution > ? FindFiles ( string extension , Func < string , ProjectOrSolution > create )
147155 {
148156 var matchingFiles = GetExtensions ( extension ) .
149157 Select ( p => ( ProjectOrSolution : create ( p . Item1 ) , DistanceFromRoot : p . Item2 ) ) .
@@ -177,19 +185,34 @@ IEnumerable<IProjectOrSolution> FindFiles(string extension, Func<string, Project
177185 } ) ;
178186
179187 CodeQLExtractorCSharpRoot = Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_ROOT" ) ;
180-
181- CodeQLJavaHome = Actions . GetEnvironmentVariable ( "CODEQL_JAVA_HOME" ) ;
182-
183188 SemmleDist = Actions . GetEnvironmentVariable ( "SEMMLE_DIST" ) ;
184-
185- SemmleJavaHome = Actions . GetEnvironmentVariable ( "SEMMLE_JAVA_HOME" ) ;
186-
187189 SemmlePlatformTools = Actions . GetEnvironmentVariable ( "SEMMLE_PLATFORM_TOOLS" ) ;
188190
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." ) ;
191210 }
192211
212+ private string TrapDir { get ; }
213+
214+ private string SourceArchiveDir { get ; }
215+
193216 readonly ILogger logger = new ConsoleLogger ( Verbosity . Info ) ;
194217
195218 /// <summary>
@@ -271,9 +294,9 @@ BuildScript CheckExtractorRun(bool warnOnFailure) =>
271294 break ;
272295 case CSharpBuildStrategy . Auto :
273296 var cleanTrapFolder =
274- BuildScript . DeleteDirectory ( Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_TRAP_DIR" ) ?? Actions . GetEnvironmentVariable ( "TRAP_FOLDER" ) ) ;
297+ BuildScript . DeleteDirectory ( TrapDir ) ;
275298 var cleanSourceArchive =
276- BuildScript . DeleteDirectory ( Actions . GetEnvironmentVariable ( "CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR" ) ?? Actions . GetEnvironmentVariable ( "SOURCE_ARCHIVE" ) ) ;
299+ BuildScript . DeleteDirectory ( SourceArchiveDir ) ;
277300 var tryCleanExtractorArgsLogs =
278301 BuildScript . Create ( actions =>
279302 {
@@ -376,38 +399,33 @@ BuildScript AutobuildFailure() =>
376399 /// <summary>
377400 /// Value of CODEQL_EXTRACTOR_CSHARP_ROOT environment variable.
378401 /// </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 ; }
385403
386404 /// <summary>
387405 /// Value of SEMMLE_DIST environment variable.
388406 /// </summary>
389- public string SemmleDist { get ; private set ; }
407+ private string ? SemmleDist { get ; }
390408
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 ; }
395412
396413 /// <summary>
397414 /// Value of SEMMLE_PLATFORM_TOOLS environment variable.
398415 /// </summary>
399- public string SemmlePlatformTools { get ; private set ; }
416+ public string ? SemmlePlatformTools { get ; }
400417
401418 /// <summary>
402419 /// The absolute path of the odasa executable.
420+ /// null if we are running in CodeQL.
403421 /// </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" ) ;
405423
406424 /// <summary>
407425 /// Construct a command that executed the given <paramref name="cmd"/> wrapped in
408426 /// an <code>odasa --index</code>, unless indexing has been disabled, in which case
409427 /// <paramref name="cmd"/> is run directly.
410428 /// </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 ) ;
412430 }
413431}
0 commit comments