-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathProjectStyleChecker.groovy
119 lines (102 loc) · 4.94 KB
/
ProjectStyleChecker.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// Copyright (c) 2018 Gonzalo Müller Bravo.
// Licensed under the MIT License (MIT), see LICENSE.txt
package all.shared.gradle.quality.code
import all.shared.gradle.file.FileListerExtension
import all.shared.gradle.file.FileListerPlugin
import all.shared.gradle.quality.code.assess.AssessTaskDefinition
import all.shared.gradle.quality.code.assess.common.CreateAssessCommonAction
import all.shared.gradle.quality.code.assess.gradle.CreateAssessGradleAction
import all.shared.gradle.quality.code.assess.gradle.LogCodeNarcReportAction
import groovy.transform.CompileStatic
import org.gradle.api.Action
import org.gradle.api.Task
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.quality.CheckstylePlugin
import org.gradle.api.plugins.quality.CodeNarc
import org.gradle.api.plugins.quality.CodeNarcExtension
import org.gradle.api.plugins.quality.CodeNarcPlugin
@CompileStatic
class ProjectStyleChecker {
public static final String LOG_CODENARC_MAIN_REPORT_TASK = 'logForCodeNarcMain'
public static final String LOG_CODENARC_TEST_REPORT_TASK = 'logForCodeNarcTest'
final Project project
ProjectStyleChecker(final Project project) {
this.project = project
}
private void addPlugin(final String extensionName, Plugin<?> plugin) {
if (project.extensions.findByName(extensionName) == null) {
plugin.apply(project)
project.logger.debug('project-style-check extension applied {} plugin', plugin.class)
}
}
private <T extends Task> void addTask(
final AssessTaskDefinition<T> taskDefinition,
final Action<T> configuration) {
if (project.tasks.findByPath(taskDefinition.name) == null) {
project.tasks.create(taskDefinition.name, taskDefinition.type, configuration)
project.logger.debug('Added {} task', taskDefinition.name)
}
}
private void addLogCodenarcReportTasks(final String logReportTaskName, final String taskName) {
final CodeNarc task = (CodeNarc) project.tasks.findByPath(taskName)
if (task) {
LogCodeNarcReportAction.addLogReportTask(logReportTaskName, task)
}
else {
project.tasks.whenTaskAdded { final Task addedTask ->
if (addedTask.name == taskName) {
LogCodeNarcReportAction.addLogReportTask(logReportTaskName, (CodeNarc) addedTask)
}
}
}
}
private void establishCodenarcConfig(final CodeNarcExtension extension, final ProjectStyleCheckerExtension config) {
extension.config = config.gradle.config
project.logger.debug('Set codenarc config filled with projectStyleChecker')
}
ProjectStyleCheckerExtension addExtension(final String extensionName) {
if (project.extensions.findByName(extensionName) == null) {
project.extensions.create(extensionName, ProjectStyleCheckerExtension)
}
}
void addRequiredPlugins() {
addPlugin(BaseStyleConfigWrapperPlugin.EXTENSION_NAME, new BaseStyleConfigWrapperPlugin())
addPlugin(FileListerPlugin.EXTENSION_NAME, new FileListerPlugin())
addPlugin('checkstyle', new CheckstylePlugin())
addPlugin('codenarc', new CodeNarcPlugin())
}
void fillExtensionConfigs(final ProjectStyleCheckerExtension config) {
final BaseStyleConfigWrapperExtension baseStyleConfig = (BaseStyleConfigWrapperExtension) project.extensions
.findByName(BaseStyleConfigWrapperPlugin.EXTENSION_NAME)
config.common.config = baseStyleConfig.common.checkstyleConfig
config.gradle.config = baseStyleConfig.groovy.codenarcConfig
project.logger.debug('project-style-check extension filled with {}', BaseStyleConfigWrapperPlugin.EXTENSION_NAME)
}
void fillExtensionFileTree(final ProjectStyleCheckerExtension config) {
config.common.fileTree = config.gradle.fileTree = ((FileListerExtension) project.extensions
.findByName(FileListerPlugin.EXTENSION_NAME))
.obtainPartialFileTree()
project.logger.debug('project-style-check extension filled with {}', FileListerPlugin.EXTENSION_NAME)
}
void establishCodenarcSettings(final ProjectStyleCheckerExtension config) {
final CodeNarcExtension extension = (CodeNarcExtension) project.extensions.findByName('codenarc')
establishCodenarcConfig(extension, config)
}
/**
* Calls all extensions' configuration methods. <br/>
* fillAllExtensions(config) = fillExtensionConfigs(config) + fillExtensionFileTree(config) +
* establishCodenarcSettings(config)
*/
void fillAllExtensions(final ProjectStyleCheckerExtension config) {
fillExtensionConfigs(config)
fillExtensionFileTree(config)
establishCodenarcSettings(config)
}
void addTasks(final ProjectStyleCheckerExtension assessTaskConfig) {
addTask(CreateAssessCommonAction.ASSESS_TASK_DEFINITION, new CreateAssessCommonAction(assessTaskConfig.common))
addTask(CreateAssessGradleAction.ASSESS_TASK_DEFINITION, new CreateAssessGradleAction(assessTaskConfig.gradle))
addLogCodenarcReportTasks(LOG_CODENARC_MAIN_REPORT_TASK, 'codenarcMain')
addLogCodenarcReportTasks(LOG_CODENARC_TEST_REPORT_TASK, 'codenarcTest')
}
}