Skip to content

Commit

Permalink
Grails Gradle Plugin: configure Groovy AST Metadata for configuration…
Browse files Browse the repository at this point in the history
…Script of GroovyCompileOptions

* GRAILS_APP_DIR
* PROJECT_DIR
* PROJECT_NAME
* PROJECT_TYPE
* PROJECT_VERSION
  • Loading branch information
rainboyan committed Jun 9, 2023
1 parent 9da7dd2 commit 371db31
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ class GrailsGradlePlugin extends GroovyPlugin {
configureRunCommand(project)

configurePathingJar(project)

configureGroovyASTMetadata(project)
}

protected void excludeDependencies(Project project) {
Expand Down Expand Up @@ -737,6 +739,48 @@ class GrailsGradlePlugin extends GroovyPlugin {
}
}

@CompileDynamic
protected void configureGroovyASTMetadata(Project project) {
def configScriptTask = project.tasks.create('configScript')

def configFile = project.file("$project.buildDir/config.groovy")
configScriptTask.outputs.file(configFile)

def projectName = project.name
def projectVersion = project.version
def projectDir = project.projectDir.absolutePath
def projectType = getGrailsProjectType()
def isPlugin = projectType == GrailsProjectType.PLUGIN
def grailsAppDir = new File(project.projectDir, grailsAppDir).absolutePath
configScriptTask.inputs.property('name', projectName)
configScriptTask.inputs.property('version', projectVersion)
configScriptTask.doLast {
configFile.parentFile.mkdirs()
configFile.text = """
withConfig(configuration) {
inline(phase: 'CONVERSION') { source, context, classNode ->
source.ast.putNodeMetaData('GRAILS_APP_DIR', '$grailsAppDir')
source.ast.putNodeMetaData('PROJECT_DIR', '$projectDir')
source.ast.putNodeMetaData('PROJECT_NAME', '$projectName')
source.ast.putNodeMetaData('PROJECT_TYPE', '$projectType')
source.ast.putNodeMetaData('PROJECT_VERSION', '$projectVersion')
classNode.putNodeMetaData('projectVersion', '$projectVersion')
classNode.putNodeMetaData('projectName', '$projectName')
classNode.putNodeMetaData('isPlugin', '$isPlugin')
}
}
"""
}
project.tasks.getByName('compileGroovy').dependsOn(configScriptTask)
project.compileGroovy {
groovyOptions.configurationScript = configFile
}
}

protected GrailsProjectType getGrailsProjectType() {
GrailsProjectType.NONE
}

protected FileCollection buildClasspath(Project project, Configuration... configurations) {
SourceSet mainSourceSet = SourceSets.findMainSourceSet(project)
SourceSetOutput output = mainSourceSet?.output
Expand All @@ -749,4 +793,14 @@ class GrailsGradlePlugin extends GroovyPlugin {
fileCollection
}

enum GrailsProjectType {
NONE,

WEB_APP,

PLUGIN,

PROFILE
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ class GrailsPluginGradlePlugin extends GrailsGradlePlugin {

configureAstSources(project)

configureProjectNameAndVersionASTMetadata(project)

configurePluginResources(project)

configurePluginJarTask(project)
Expand Down Expand Up @@ -220,33 +218,9 @@ class GrailsPluginGradlePlugin extends GrailsGradlePlugin {
}
}

@CompileDynamic
protected void configureProjectNameAndVersionASTMetadata(Project project) {
def configScriptTask = project.tasks.create('configScript')

def configFile = project.file("$project.buildDir/config.groovy")
configScriptTask.outputs.file(configFile)

def projectName = project.name
def projectVersion = project.version
configScriptTask.inputs.property('name', projectName)
configScriptTask.inputs.property('version', projectVersion)
configScriptTask.doLast {
configFile.parentFile.mkdirs()
configFile.text = """
withConfig(configuration) {
inline(phase: 'CONVERSION') { source, context, classNode ->
classNode.putNodeMetaData('projectVersion', '$projectVersion')
classNode.putNodeMetaData('projectName', '$projectName')
classNode.putNodeMetaData('isPlugin', 'true')
}
}
"""
}
project.tasks.getByName('compileGroovy').dependsOn(configScriptTask)
project.compileGroovy {
groovyOptions.configurationScript = configFile
}
@Override
protected GrailsProjectType getGrailsProjectType() {
GrailsProjectType.PLUGIN
}

protected void checkForConfigurationClash(Project project) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2015-2022 the original author or authors.
* Copyright 2015-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -59,4 +59,9 @@ class GrailsWebGradlePlugin extends GrailsGradlePlugin {
}
}

@Override
protected GrailsProjectType getGrailsProjectType() {
GrailsProjectType.WEB_APP
}

}

0 comments on commit 371db31

Please sign in to comment.