@@ -15,70 +15,106 @@ import java.io.File
1515/* *
1616 * Provides all [SarifGradleExtension] fields in a convenient form: 
1717 * Defines default values and a transform function for these fields. 
18+  * Takes the fields from the [taskParameters] if they are available there, 
19+  * otherwise takes them from the [extension]. 
1820 */  
1921class  SarifGradleExtensionProvider (
2022    private  val  project :  Project ,
21-     private  val  extension :  SarifGradleExtension 
23+     private  val  extension :  SarifGradleExtension ,
24+     var  taskParameters :  Map <String , String > = mapOf()
2225) : SarifExtensionProvider {
2326
2427    override  val  targetClasses:  List <String >
25-         get() =  extension.targetClasses
26-             .getOrElse(listOf ())
28+         get() =  taskParameters[" targetClasses"  ]?.transformKeywordAll()?.parseToList()
29+             ? :  extension.targetClasses.orNull
30+             ? :  listOf ()
2731
2832    override  val  projectRoot:  File 
29-         get() =  extension.projectRoot.orNull
33+         get() =  (taskParameters[ " projectRoot " ]  ? :   extension.projectRoot.orNull) 
3034            ?.toPath()?.toFile()
3135            ? :  project.projectDir
3236
3337    override  val  generatedTestsRelativeRoot:  String 
34-         get() =  extension.generatedTestsRelativeRoot.orNull
38+         get() =  taskParameters[" generatedTestsRelativeRoot"  ]
39+             ? :  extension.generatedTestsRelativeRoot.orNull
3540            ? :  " build/generated/test" 
3641
3742    override  val  sarifReportsRelativeRoot:  String 
38-         get() =  extension.sarifReportsRelativeRoot.orNull
43+         get() =  taskParameters[" sarifReportsRelativeRoot"  ]
44+             ? :  extension.sarifReportsRelativeRoot.orNull
3945            ? :  " build/generated/sarif" 
4046
47+     //  We don't get this field from `taskParameters` because marking the directory
48+     //  as a test source root is possible while the gradle project is reloading,
49+     //  but `taskParameters` become available only when the user runs the gradle task
50+     //  `generateTestsAndSarifReport` (that is, after a reloading).
4151    override  val  markGeneratedTestsDirectoryAsTestSourcesRoot:  Boolean 
4252        get() =  extension.markGeneratedTestsDirectoryAsTestSourcesRoot.orNull
4353            ? :  true 
4454
4555    override  val  testFramework:  TestFramework 
46-         get() =  extension.testFramework
47-             .map (::testFrameworkParse)
48-             .getOrElse( TestFramework .defaultItem) 
56+         get() =  (taskParameters[ " testFramework " ]  ? :   extension.testFramework.orNull) 
57+             ?. let (::testFrameworkParse)
58+             ? :   TestFramework .defaultItem
4959
5060    override  val  mockFramework:  MockFramework 
51-         get() =  extension.mockFramework
52-             .map (::mockFrameworkParse)
53-             .getOrElse( MockFramework .defaultItem) 
61+         get() =  (taskParameters[ " mockFramework " ]  ? :   extension.mockFramework.orNull) 
62+             ?. let (::mockFrameworkParse)
63+             ? :   MockFramework .defaultItem
5464
5565    override  val  generationTimeout:  Long 
56-         get() =  extension.generationTimeout
57-             .map (::generationTimeoutParse)
58-             .getOrElse (60  *  1000L ) //  60 seconds
66+         get() =  (taskParameters[ " generationTimeout " ]?.toLongOrNull()  ? :   extension.generationTimeout.orNull) 
67+             ?. let (::generationTimeoutParse)
68+             ? :   (60  *  1000L ) //  60 seconds
5969
6070    override  val  codegenLanguage:  CodegenLanguage 
61-         get() =  extension.codegenLanguage
62-             .map (::codegenLanguageParse)
63-             .getOrElse( CodegenLanguage .defaultItem) 
71+         get() =  (taskParameters[ " codegenLanguage " ]  ? :   extension.codegenLanguage.orNull) 
72+             ?. let (::codegenLanguageParse)
73+             ? :   CodegenLanguage .defaultItem
6474
6575    override  val  mockStrategy:  MockStrategyApi 
66-         get() =  extension.mockStrategy
67-             .map (::mockStrategyParse)
68-             .getOrElse( MockStrategyApi .defaultItem) 
76+         get() =  (taskParameters[ " mockStrategy " ]  ? :   extension.mockStrategy.orNull) 
77+             ?. let (::mockStrategyParse)
78+             ? :   MockStrategyApi .defaultItem
6979
7080    override  val  staticsMocking:  StaticsMocking 
71-         get() =  extension.staticsMocking
72-             .map (::staticsMockingParse)
73-             .getOrElse( StaticsMocking .defaultItem) 
81+         get() =  (taskParameters[ " staticsMocking " ]  ? :   extension.staticsMocking.orNull) 
82+             ?. let (::staticsMockingParse)
83+             ? :   StaticsMocking .defaultItem
7484
7585    override  val  forceStaticMocking:  ForceStaticMocking 
76-         get() =  extension.forceStaticMocking
77-             .map (::forceStaticMockingParse)
78-             .getOrElse( ForceStaticMocking .defaultItem) 
86+         get() =  (taskParameters[ " forceStaticMocking " ]  ? :   extension.forceStaticMocking.orNull) 
87+             ?. let (::forceStaticMockingParse)
88+             ? :   ForceStaticMocking .defaultItem
7989
8090    override  val  classesToMockAlways:  Set <ClassId >
8191        get() =  classesToMockAlwaysParse(
82-             extension.classesToMockAlways.getOrElse(listOf ())
92+             specifiedClasses =  taskParameters[" classesToMockAlways"  ]?.parseToList()
93+                 ? :  extension.classesToMockAlways.orNull
94+                 ? :  listOf ()
8395        )
96+ 
97+     /* *
98+      * SARIF report file containing static analysis information about all [targetClasses]. 
99+      */  
100+     val  mergedSarifReportFileName:  String? 
101+         get() =  taskParameters[" mergedSarifReportFileName"  ]
102+ 
103+     //  internal
104+ 
105+     /* *
106+      * Keyword "all" is the same as "[]" for [targetClasses], but more user-friendly. 
107+      */  
108+     private  fun  String.transformKeywordAll (): String  = 
109+         if  (this  ==  " all"  ) " []"   else  this 
110+ 
111+     /* *
112+      * Example: "[A, B, C]" -> ["A", "B", "C"]. 
113+      */  
114+     private  fun  String.parseToList () = 
115+         this .removePrefix(" ["  )
116+             .removeSuffix(" ]"  )
117+             .split(" ,"  )
118+             .map { it.trim() }
119+             .filter { it !=  " "   }
84120}
0 commit comments