Skip to content

Commit ff4050e

Browse files
committed
Don't init logging during compilation. Fixes #10514
1 parent b1ec62f commit ff4050e

File tree

2 files changed

+49
-23
lines changed

2 files changed

+49
-23
lines changed

grails-bootstrap/src/main/groovy/grails/io/IOUtils.groovy

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ class IOUtils extends SpringIOUtils {
230230

231231

232232
@Memoized
233-
public static File findApplicationDirectoryFile() {
233+
static File findApplicationDirectoryFile() {
234234
def directory = findApplicationDirectory()
235235
if(directory) {
236236
def f = new File(directory)
@@ -248,7 +248,7 @@ class IOUtils extends SpringIOUtils {
248248
* @param targetClass The target class
249249
* @return The application directory or null if it can't be found
250250
*/
251-
public static File findApplicationDirectoryFile(Class targetClass) {
251+
static File findApplicationDirectoryFile(Class targetClass) {
252252

253253
def rootResource = findRootResource(targetClass)
254254
if(rootResource != null) {
@@ -267,8 +267,46 @@ class IOUtils extends SpringIOUtils {
267267
return null
268268
}
269269

270+
/**
271+
* Finds a source file for the given class name
272+
*
273+
* @param className The class name
274+
* @return The source file
275+
*/
276+
@Memoized
277+
static File findSourceFile(String className) {
278+
File applicationDir = BuildSettings.BASE_DIR
279+
File file = null
280+
if(applicationDir != null) {
281+
String fileName = className.replace('.' as char, File.separatorChar) + '.groovy'
282+
List<File> allFiles = [ new File(applicationDir, "src/main/groovy") ]
283+
File[] files = new File(applicationDir, "grails-app").listFiles(new FileFilter() {
284+
@Override
285+
boolean accept(File f) {
286+
return f.isDirectory() && !f.isHidden() && !f.name.startsWith('.')
287+
}
288+
})
289+
if(files != null) {
290+
allFiles.addAll( Arrays.asList(files) )
291+
}
292+
for(File dir in allFiles) {
293+
File possibleFile = new File(dir, fileName)
294+
if(possibleFile.exists()) {
295+
file = possibleFile
296+
break
297+
}
298+
}
299+
300+
}
301+
return file
302+
}
303+
304+
/**
305+
* Finds the directory where the Application class is contained
306+
* @return The application directory
307+
*/
270308
@Memoized
271-
public static String findApplicationDirectory() {
309+
static String findApplicationDirectory() {
272310
if(applicationDirectory) {
273311
return applicationDirectory
274312
}
@@ -296,10 +334,10 @@ class IOUtils extends SpringIOUtils {
296334
final Class<?> mainClass = Thread.currentThread().contextClassLoader.loadClass(mainClassName)
297335
final URL classResource = mainClass ? findClassResource(mainClass) : null
298336
if(classResource) {
299-
def file = new UrlResource(classResource).getFile()
300-
def path = file.canonicalPath
337+
File file = new UrlResource(classResource).getFile()
338+
String path = file.canonicalPath
301339

302-
def buildClassespath = BuildSettings.BUILD_CLASSES_PATH.replace('/', File.separator)
340+
String buildClassespath = BuildSettings.BUILD_CLASSES_PATH.replace('/', File.separator)
303341
if(path.contains(buildClassespath)) {
304342
location = path.substring(0, path.indexOf(buildClassespath) - 1)
305343
}
@@ -312,6 +350,6 @@ class IOUtils extends SpringIOUtils {
312350
// ignore
313351
}
314352
applicationDirectory = location
315-
return location;
353+
return location
316354
}
317355
}

grails-plugin-rest/src/main/groovy/org/grails/plugins/web/rest/transform/ResourceTransform.groovy

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.grails.plugins.web.rest.transform
1717

18+
import grails.io.IOUtils
19+
1820
import static java.lang.reflect.Modifier.*
1921
import static org.grails.compiler.injection.GrailsASTUtils.*
2022
import grails.artefact.Artefact
@@ -69,8 +71,6 @@ import org.grails.compiler.injection.GrailsAwareInjectionOperation
6971
import org.grails.compiler.injection.TraitInjectionUtils
7072
import org.grails.compiler.web.ControllerActionTransformer
7173
import org.grails.core.artefact.ControllerArtefactHandler
72-
import org.grails.core.io.DefaultResourceLocator
73-
import org.grails.core.io.ResourceLocator
7474
import org.grails.transaction.transform.TransactionalTransform
7575
import org.springframework.beans.factory.annotation.Autowired
7676
import org.springframework.beans.factory.annotation.Qualifier
@@ -99,18 +99,8 @@ class ResourceTransform implements ASTTransformation, CompilationUnitAware {
9999
public static final String REDIRECT_METHOD = "redirect"
100100
public static final ClassNode AUTOWIRED_CLASS_NODE = new ClassNode(Autowired).getPlainNodeReference()
101101

102-
private ResourceLocator resourceLocator
103102
private CompilationUnit unit
104103

105-
ResourceLocator getResourceLocator() {
106-
if (resourceLocator == null) {
107-
resourceLocator = new DefaultResourceLocator()
108-
String basedir = BuildSettings.BASE_DIR.absolutePath
109-
110-
resourceLocator.setSearchLocation(basedir)
111-
}
112-
return resourceLocator
113-
}
114104

115105
@Override
116106
void visit(ASTNode[] astNodes, SourceUnit source) {
@@ -124,10 +114,8 @@ class ResourceTransform implements ASTTransformation, CompilationUnitAware {
124114
return
125115
}
126116

127-
final resourceLocator = getResourceLocator()
128-
final className = "${parent.name}${ControllerArtefactHandler.TYPE}"
129-
final resource = resourceLocator.findResourceForClassName(className)
130-
117+
String className = "${parent.name}${ControllerArtefactHandler.TYPE}"
118+
final File resource = IOUtils.findSourceFile(className)
131119
LinkableTransform.addLinkingMethods(parent)
132120

133121
if (resource == null) {

0 commit comments

Comments
 (0)