@@ -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