@@ -11,47 +11,94 @@ import org.gradle.kotlin.dsl.register
1111
1212/* *
1313 * Casper 프로젝트의 KDoc 문서화 규칙을 정의하는 Gradle 플러그인입니다.
14+ * 코드 요소(클래스, 함수, 프로퍼티 등)에 KDoc 주석이 있는지 확인하는 태스크를 제공합니다.
1415 */
1516class DocumentationConventionPlugin : Plugin <Project > {
17+ /* *
18+ * 플러그인을 프로젝트에 적용합니다.
19+ * 각 코드 요소별 문서화 확인 태스크와 통합 태스크를 등록하고, 빌드 라이프사이클에 연결합니다.
20+ *
21+ * @param project 플러그인이 적용될 프로젝트
22+ */
1623 override fun apply (project : Project ) {
17- with (project) {
18- // 현재 프로젝트에 태스크 등록
19- registerDocTasks(this )
20-
21- // 모든 서브프로젝트에도 태스크 등록
22- subprojects {
23- registerDocTasks(this )
24- }
25- }
24+ project.logger.lifecycle(" 문서화 규칙 플러그인을 적용합니다: ${project.name} " )
25+ val registeredTasks = registerIndividualDocCheckTasks(project)
26+ registerAggregateTask(project, registeredTasks)
27+ connectToCheckLifecycle(project)
2628 }
2729
30+ /* *
31+ * 각 코드 요소(클래스, 함수, 프로퍼티 등)별로 개별 문서화 확인 태스크를 등록합니다.
32+ * DocCheckTaskType에 정의된 각 유형에 대해 DocCheckTask를 생성합니다.
33+ *
34+ * @param project 태스크가 등록될 프로젝트
35+ * @return 등록된 태스크 프로바이더 목록
36+ */
37+ private fun registerIndividualDocCheckTasks (project : Project ): List <TaskProvider <out Task >> {
38+ val registeredTasks = mutableListOf<TaskProvider <out Task >>()
2839
29- private fun Project.registerDocTasks (project : Project ) {
30- with (project) {
31- val registeredTasks = mutableListOf<TaskProvider <out Task >>()
40+ DocCheckTaskType .values().forEach { taskType ->
41+ val taskName = taskType.taskName
3242
33- DocCheckTaskType .values().forEach { taskType ->
34- val task = tasks.register<DocCheckTask >(taskType.taskName) {
43+ // 이미 같은 이름의 태스크가 있는지 확인
44+ if (project.tasks.findByName(taskName) == null ) {
45+ val task = project.tasks.register<DocCheckTask >(taskName) {
3546 group = DocConstants .DOC_GROUP
3647 description = taskType.description
3748 codeElement.set(taskType.codeElement)
3849 }
3950 registeredTasks.add(task)
51+ project.logger.lifecycle(" ${project.name} 에 ${taskName} 태스크를 등록했습니다." )
52+ } else {
53+ project.logger.lifecycle(" ${project.name} 에 이미 ${taskName} 태스크가 있습니다." )
54+ registeredTasks.add(project.tasks.named(taskName))
4055 }
56+ }
57+ return registeredTasks
58+ }
4159
42- // 모든 문서화 검사를 한 번에 실행하는 태스크
43- tasks.register(" checkAllDocs" ) {
44- group = DocConstants .CHECK_GROUP
45- description = " 모든 코드 요소의 KDoc 주석 여부를 확인합니다"
60+ /* *
61+ * 모든 개별 문서화 확인 태스크를 한 번에 실행하는 통합 태스크를 등록합니다.
62+ * 이 태스크는 모든 개별 태스크에 의존하므로, 하나의 명령으로 모든 확인을 실행할 수 있습니다.
63+ *
64+ * @param project 태스크가 등록될 프로젝트
65+ * @param individualTasks 의존할 개별 태스크 목록
66+ */
67+ private fun registerAggregateTask (project : Project , individualTasks : List <TaskProvider <out Task >>) {
68+ // 모든 문서화 검사를 한 번에 실행하는 태스크
69+ if (project.tasks.findByName(CHECK_ALL_DOCS_TASK ) == null ) {
70+ project.tasks.register(CHECK_ALL_DOCS_TASK ) {
71+ group = DocConstants .CHECK_GROUP
72+ description = " 모든 코드 요소의 KDoc 주석 여부를 확인합니다"
4673
47- // 등록된 모든 검사 태스크에 의존
48- dependsOn(registeredTasks)
74+ // 등록된 모든 검사 태스크에 의존
75+ dependsOn(individualTasks)
76+ }
77+ project.logger.lifecycle(" ${project.name} 에 ${CHECK_ALL_DOCS_TASK } 태스크를 등록했습니다." )
78+ }
79+ }
80+
81+ /* *
82+ * 문서화 확인 태스크를 프로젝트의 기본 check 태스크에 연결합니다.
83+ * 이를 통해 일반적인 빌드 라이프사이클에 문서화 확인이 포함됩니다.
84+ *
85+ * @param project 연결될 프로젝트
86+ */
87+ private fun connectToCheckLifecycle (project : Project ) {
88+ // 프로젝트 평가 후에 check 태스크가 있으면 checkAllDocs를 의존성으로 추가
89+ project.afterEvaluate {
90+ project.tasks.findByName(" check" )?.dependsOn(CHECK_ALL_DOCS_TASK )
91+ project.logger.lifecycle(" ${project.name} 의 check 태스크에 ${CHECK_ALL_DOCS_TASK } 의존성을 추가했습니다." )
92+ }
4993 }
5094
51- // 빌드 검증 과정에 문서화 검사 포함
52- tasks.named(" check" ) {
53- dependsOn(" checkAllDocs" )
95+ /* *
96+ * 플러그인 내에서 사용되는 상수 값들을 정의합니다.
97+ */
98+ companion object {
99+ /* *
100+ * 모든 문서화 확인 태스크를 실행하는 통합 태스크의 이름입니다.
101+ */
102+ const val CHECK_ALL_DOCS_TASK = " checkAllDocs"
54103 }
55- }
56- }
57104}
0 commit comments