@@ -15,70 +15,106 @@ import java.io.File
15
15
/* *
16
16
* Provides all [SarifGradleExtension] fields in a convenient form:
17
17
* 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].
18
20
*/
19
21
class SarifGradleExtensionProvider (
20
22
private val project : Project ,
21
- private val extension : SarifGradleExtension
23
+ private val extension : SarifGradleExtension ,
24
+ var taskParameters : Map <String , String > = mapOf()
22
25
) : SarifExtensionProvider {
23
26
24
27
override val targetClasses: List <String >
25
- get() = extension.targetClasses
26
- .getOrElse(listOf ())
28
+ get() = taskParameters[" targetClasses" ]?.transformKeywordAll()?.parseToList()
29
+ ? : extension.targetClasses.orNull
30
+ ? : listOf ()
27
31
28
32
override val projectRoot: File
29
- get() = extension.projectRoot.orNull
33
+ get() = (taskParameters[ " projectRoot " ] ? : extension.projectRoot.orNull)
30
34
?.toPath()?.toFile()
31
35
? : project.projectDir
32
36
33
37
override val generatedTestsRelativeRoot: String
34
- get() = extension.generatedTestsRelativeRoot.orNull
38
+ get() = taskParameters[" generatedTestsRelativeRoot" ]
39
+ ? : extension.generatedTestsRelativeRoot.orNull
35
40
? : " build/generated/test"
36
41
37
42
override val sarifReportsRelativeRoot: String
38
- get() = extension.sarifReportsRelativeRoot.orNull
43
+ get() = taskParameters[" sarifReportsRelativeRoot" ]
44
+ ? : extension.sarifReportsRelativeRoot.orNull
39
45
? : " build/generated/sarif"
40
46
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).
41
51
override val markGeneratedTestsDirectoryAsTestSourcesRoot: Boolean
42
52
get() = extension.markGeneratedTestsDirectoryAsTestSourcesRoot.orNull
43
53
? : true
44
54
45
55
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
49
59
50
60
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
54
64
55
65
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
59
69
60
70
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
64
74
65
75
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
69
79
70
80
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
74
84
75
85
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
79
89
80
90
override val classesToMockAlways: Set <ClassId >
81
91
get() = classesToMockAlwaysParse(
82
- extension.classesToMockAlways.getOrElse(listOf ())
92
+ specifiedClasses = taskParameters[" classesToMockAlways" ]?.parseToList()
93
+ ? : extension.classesToMockAlways.orNull
94
+ ? : listOf ()
83
95
)
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 != " " }
84
120
}
0 commit comments