Skip to content

Commit 2de8c30

Browse files
committed
Merge branch '2024.0.x'
2 parents 39f7c70 + b86cb42 commit 2de8c30

File tree

5 files changed

+55
-21
lines changed

5 files changed

+55
-21
lines changed

grace-core/src/main/groovy/org/grails/compiler/injection/GrailsASTUtils.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,16 +1818,14 @@ public static boolean isGrailsSource(SourceUnit source, String artefactPath) {
18181818
String filename = source.getName();
18191819
String projectDir = ast.getNodeMetaData(META_DATA_KEY_PROJECT_DIR);
18201820
String grailsAppDir = ast.getNodeMetaData(META_DATA_KEY_GRAILS_APP_DIR);
1821-
if (filename == null || projectDir == null || grailsAppDir == null) {
1821+
if (filename == null || projectDir == null) {
18221822
return false;
18231823
}
1824-
if (GrailsStringUtils.isNotBlank(artefactPath)) {
1825-
return filename.startsWith(grailsAppDir + File.separatorChar + artefactPath);
1826-
}
1827-
else {
1828-
return filename.startsWith(grailsAppDir) || (filename.startsWith(projectDir + File.separatorChar + "src")
1829-
&& (filename.endsWith("GrailsPlugin.groovy") || filename.endsWith("Application.groovy")));
1830-
}
1824+
boolean inGrailsAppDir = GrailsStringUtils.isNotBlank(grailsAppDir)
1825+
&& filename.startsWith(grailsAppDir + File.separatorChar + artefactPath);
1826+
boolean inProjectDir = filename.startsWith(projectDir + File.separatorChar + "src")
1827+
&& (filename.endsWith("GrailsPlugin.groovy") || filename.endsWith("Application.groovy"));
1828+
return inProjectDir || inGrailsAppDir;
18311829
}
18321830

18331831
/**

grace-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GenerateConfigScript.groovy

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022-2025 the original author or authors.
2+
* Copyright 2022-2026 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@ import org.gradle.api.file.RegularFileProperty
2525
import org.gradle.api.provider.MapProperty
2626
import org.gradle.api.provider.Property
2727
import org.gradle.api.tasks.Input
28+
import org.gradle.api.tasks.Optional
2829
import org.gradle.api.tasks.OutputFile
2930
import org.gradle.api.tasks.TaskAction
3031

@@ -53,6 +54,7 @@ abstract class GenerateConfigScript extends DefaultTask {
5354
abstract Property<String> getProjectDir()
5455

5556
@Input
57+
@Optional
5658
abstract Property<String> getGrailsAppDir()
5759

5860
@OutputFile
@@ -70,21 +72,24 @@ abstract class GenerateConfigScript extends DefaultTask {
7072
void generateConfigScript() throws IOException {
7173
File configFile = getConfigFile().getAsFile().get()
7274
String projectDir = getProjectDir().get()
73-
String grailsAppDir = getGrailsAppDir().get()
75+
String grailsAppDir = getGrailsAppDir().getOrNull()
7476
if (System.getProperty('os.name').startsWith('Windows')) {
75-
projectDir = projectDir.replace('\\', '\\\\')
76-
grailsAppDir = grailsAppDir.replace('\\', '\\\\')
77+
projectDir = projectDir?.replace('\\', '\\\\')
78+
grailsAppDir = grailsAppDir?.replace('\\', '\\\\')
7779
}
7880

7981
// Default node metadata used for Groovy compiler
8082
Map<String, String> properties = [
8183
'PROJECT_NAME': getProjectName().get(),
8284
'PROJECT_TYPE': getProjectType().get(),
8385
'PROJECT_VERSION': getProjectVersion().get(),
84-
'PROJECT_DIR': projectDir,
85-
'GRAILS_APP_DIR': grailsAppDir
86+
'PROJECT_DIR': projectDir
8687
] as HashMap<String, String>
8788

89+
if (grailsAppDir) {
90+
properties.put('GRAILS_APP_DIR', grailsAppDir)
91+
}
92+
8893
// Add the user defined node metadata
8994
properties.putAll(getMetaDataMap().get())
9095

grace-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ class GrailsGradlePlugin extends GroovyPlugin {
568568
configScript.projectDir.set(project.projectDir.absolutePath)
569569
configScript.projectType.set(getGrailsProjectType().toString())
570570
configScript.projectVersion.set(project.getVersion().toString())
571-
configScript.grailsAppDir.set(project.file(SourceSets.resolveGrailsAppPath(project)).absolutePath)
571+
configScript.grailsAppDir.set(SourceSets.resolveGrailsAppPath(project) ? project.file(SourceSets.resolveGrailsAppPath(project)).absolutePath : null)
572572
}
573573
project.tasks.named('compileGroovy', GroovyCompile).configure {
574574
it.dependsOn(configScriptTask)

grace-plugin-api/src/main/groovy/org/grails/plugins/GrailsPluginArtefactHandler.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2021-2025 the original author or authors.
2+
* Copyright 2021-2026 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
3232
import grails.core.ArtefactHandler;
3333
import grails.core.ArtefactInfo;
3434
import grails.core.GrailsClass;
35+
import grails.util.GrailsStringUtils;
3536

3637
/**
3738
* An {@link grails.core.ArtefactHandler} that identifies the Grails Plugin class
@@ -134,12 +135,14 @@ private boolean isArtefactClass(ClassNode classNode) {
134135
ModuleNode ast = source.getAST();
135136
String projectDir = ast.getNodeMetaData(META_DATA_KEY_PROJECT_DIR);
136137
String grailsAppDir = ast.getNodeMetaData(META_DATA_KEY_GRAILS_APP_DIR);
137-
if (filename == null || projectDir == null || grailsAppDir == null) {
138+
if (filename == null || projectDir == null) {
138139
return false;
139140
}
140-
141-
return (filename.startsWith(grailsAppDir + File.separatorChar + "plugins") ||
142-
filename.startsWith(projectDir + File.separatorChar + "src")) && filename.endsWith(TYPE + ".groovy");
141+
boolean inGrailsAppDir = GrailsStringUtils.isNotBlank(grailsAppDir)
142+
&& filename.startsWith(grailsAppDir + File.separatorChar + "plugins") && filename.endsWith(TYPE + ".groovy");
143+
boolean inProjectDir = filename.startsWith(projectDir + File.separatorChar + "src")
144+
&& filename.endsWith(TYPE + ".groovy");
145+
return inProjectDir || inGrailsAppDir;
143146
}
144147

145148
private boolean hasArtefactAnnotation(ClassNode classNode, String value) {

grace-plugin-domain-class/src/main/groovy/org/grails/core/artefact/DomainClassArtefactHandler.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,19 @@
1515
*/
1616
package org.grails.core.artefact;
1717

18+
import java.io.File;
19+
1820
import org.codehaus.groovy.ast.ClassNode;
1921
import org.codehaus.groovy.ast.InnerClassNode;
22+
import org.codehaus.groovy.ast.ModuleNode;
23+
import org.codehaus.groovy.control.SourceUnit;
2024
import org.springframework.core.Ordered;
2125

2226
import grails.artefact.ArtefactTypes;
2327
import grails.core.ArtefactHandlerAdapter;
2428
import grails.core.GrailsClass;
2529
import grails.core.GrailsDomainClass;
30+
import grails.util.GrailsStringUtils;
2631

2732
import org.grails.compiler.injection.GrailsASTUtils;
2833
import org.grails.core.DefaultGrailsDomainClass;
@@ -69,7 +74,30 @@ protected boolean isValidArtefactClassNode(ClassNode classNode, int modifiers) {
6974

7075
@Override
7176
public boolean isArtefactClass(ClassNode classNode) {
72-
return !GrailsASTUtils.isJpaEntityClass(classNode) && super.isArtefactClass(classNode);
77+
if (classNode == null) {
78+
return false;
79+
}
80+
81+
if (hasArtefactAnnotation(classNode, TYPE)) {
82+
return true;
83+
}
84+
if (classNode.getModule() == null || classNode.getModule().getContext() == null) {
85+
return false;
86+
}
87+
88+
SourceUnit source = classNode.getModule().getContext();
89+
String filename = source.getName();
90+
ModuleNode ast = source.getAST();
91+
String projectDir = ast.getNodeMetaData(GrailsASTUtils.META_DATA_KEY_PROJECT_DIR);
92+
String grailsAppDir = ast.getNodeMetaData(GrailsASTUtils.META_DATA_KEY_GRAILS_APP_DIR);
93+
94+
if (filename == null || projectDir == null) {
95+
return false;
96+
}
97+
boolean inGrailsAppDir = GrailsStringUtils.isNotBlank(grailsAppDir)
98+
&& filename.startsWith(grailsAppDir + File.separatorChar + PATH) && filename.endsWith(".groovy");
99+
100+
return !GrailsASTUtils.isJpaEntityClass(classNode) && inGrailsAppDir;
73101
}
74102

75103
@Override

0 commit comments

Comments
 (0)