Skip to content

Commit 94d7905

Browse files
committed
fix: set right classgraph classpath for registration files generation
1 parent a3896bc commit 94d7905

File tree

9 files changed

+256
-179
lines changed

9 files changed

+256
-179
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// THIS FILE IS GENERATED! DO NOT EDIT OR DELETE IT. EDIT OR DELETE THE ASSOCIATED SOURCE CODE FILE INSTEAD
2+
// Note: You can however freely move this file inside your godot project if you want. Keep in mind however, that if you rename the originating source code file, this file will be deleted and regenerated as a new file instead of being updated! Other modifications to the source file however, will result in this file being updated.
3+
4+
registeredName = JavaTestClass
5+
fqName = godot.tests.JavaTestClass
6+
baseType = Node
7+
supertypes = [
8+
godot.api.Node,
9+
godot.api.Object,
10+
godot.core.KtObject,
11+
godot.common.interop.NativeWrapper,
12+
godot.common.interop.NativePointer
13+
]
14+
signals = [
15+
test_signal,
16+
test_signal2
17+
]
18+
properties = [
19+
java_enum,
20+
exported_int,
21+
exported_long,
22+
exported_float,
23+
exported_double,
24+
exported_boolean,
25+
exported_string,
26+
exported_byte,
27+
exported_button,
28+
signal_emitted,
29+
variant_array,
30+
dictionary
31+
]
32+
functions = [
33+
greeting,
34+
_ready,
35+
connect_and_trigger_signal,
36+
signal_callback
37+
]

kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/RegisteredClassMetadataContainerDatabase.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ object RegisteredClassMetadataContainerDatabase {
3030
functions = annotation.getParameterValue("functions")
3131
)
3232
}
33-
.filter { it.second.projectName != "godot-kotlin-tests" } //TODO: remove this line when classgraph generation is ready
3433
.toMap()
3534
}
3635

kt/entry-generation/godot-class-graph-symbol-processor/src/main/kotlin/godot/annotation/processor/classgraph/process.kt

Lines changed: 94 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -18,77 +18,106 @@ import java.io.FileOutputStream
1818
fun generateEntryUsingClassGraph(
1919
settings: Settings,
2020
logger: Logger,
21-
files: Set<File>
21+
runtimeClassPathFiles: Set<File>
2222
) {
2323
val scanResult = ClassGraph()
24-
.overrideClasspath(files)
24+
.overrideClasspath(runtimeClassPathFiles)
2525
.enableAllInfo()
2626
.enableSystemJarsAndModules()
2727
.scan()
2828
Context.scanResult = scanResult
2929
scanResult
3030
.use {
31-
with(it) {
32-
RegisteredClassMetadataContainerDatabase.populateDependencies(it)
31+
RegisteredClassMetadataContainerDatabase.populateDependencies(it)
3332

34-
val classes = it.allClasses
35-
.filter { clazz ->
36-
clazz.extendsSuperclass(KtObject::class.java)
37-
&& !clazz.hasAnnotation(GodotBaseType::class.java)
38-
}
39-
.filter { classInfo -> !RegisteredClassMetadataContainerDatabase.dependenciesContainsFqdn(classInfo.name) }
40-
.map { classInfo ->
41-
classInfo.mapToClazz(settings)
42-
}
33+
val classes = it.allClasses
34+
.filter { clazz ->
35+
clazz.extendsSuperclass(KtObject::class.java)
36+
&& !clazz.hasAnnotation(GodotBaseType::class.java)
37+
}
38+
.filter { classInfo -> !RegisteredClassMetadataContainerDatabase.dependenciesContainsFqdn(classInfo.name) }
39+
.map { classInfo ->
40+
classInfo.mapToClazz(settings)
41+
}
4342

44-
val registeredClasses = classes.filterIsInstance<RegisteredClass>().distinctBy { clazz -> clazz.fqName }
45-
46-
RegisteredClassMetadataContainerDatabase.populateCurrentProject(registeredClasses, settings)
47-
48-
val existingRegistrationFiles = settings.projectBaseDir.provideExistingRegistrationFiles()
49-
50-
EntryGenerator.generateEntryFilesUsingRegisteredClasses(
51-
projectName = settings.projectName,
52-
projectDir = settings.projectBaseDir.absolutePath,
53-
registeredClasses = registeredClasses,
54-
logger = LoggerWrapper(logger),
55-
jvmTypeFqNamesProvider = DefaultJvmTypeProvider(),
56-
compilationTimeRelativeRegistrationFilePathProvider = {registeredClass ->
57-
val registrationFile = existingRegistrationFiles["${registeredClass.registeredName}.${FileExtensions.GodotKotlinJvm.registrationFile}"]
58-
?.relativeTo(settings.projectBaseDir)
59-
?: File(
60-
registeredClass.provideRegistrationFilePathForInitialGeneration(
61-
isRegistrationFileHierarchyEnabled = settings.isRegistrationFileHierarchyEnabled,
62-
compilationProjectName = settings.projectName,
63-
classProjectName = settings.projectName, // same as project name as no registration file exists for this class, hence it is new / renamed
64-
registrationFileOutDir = settings.registrationBaseDirPathRelativeToProjectDir
65-
)
43+
val registeredClasses = classes.filterIsInstance<RegisteredClass>().distinctBy { clazz -> clazz.fqName }
44+
45+
RegisteredClassMetadataContainerDatabase.populateCurrentProject(registeredClasses, settings)
46+
47+
val existingRegistrationFiles = settings.projectBaseDir.provideExistingRegistrationFiles()
48+
49+
EntryGenerator.generateEntryFilesUsingRegisteredClasses(
50+
projectName = settings.projectName,
51+
projectDir = settings.projectBaseDir.absolutePath,
52+
registeredClasses = registeredClasses,
53+
logger = LoggerWrapper(logger),
54+
jvmTypeFqNamesProvider = DefaultJvmTypeProvider(),
55+
compilationTimeRelativeRegistrationFilePathProvider = {registeredClass ->
56+
val registrationFile = existingRegistrationFiles["${registeredClass.registeredName}.${FileExtensions.GodotKotlinJvm.registrationFile}"]
57+
?.relativeTo(settings.projectBaseDir)
58+
?: File(
59+
registeredClass.provideRegistrationFilePathForInitialGeneration(
60+
isRegistrationFileHierarchyEnabled = settings.isRegistrationFileHierarchyEnabled,
61+
compilationProjectName = settings.projectName,
62+
classProjectName = settings.projectName, // same as project name as no registration file exists for this class, hence it is new / renamed
63+
registrationFileOutDir = settings.registrationBaseDirPathRelativeToProjectDir
6664
)
65+
)
66+
67+
registrationFile.invariantSeparatorsPath
68+
},
69+
classRegistrarAppendableProvider = { registeredClass ->
70+
val file = settings.generatedSourceRootDir
71+
.resolve("main")
72+
.resolve("kotlin")
73+
.resolve("godot")
74+
.resolve("entry")
75+
.resolve("${registeredClass.registeredName}Registrar.kt")
76+
77+
file.parentFile.mkdirs()
78+
79+
if (!file.exists()) {
80+
file.createNewFile()
81+
}
6782

68-
registrationFile.invariantSeparatorsPath
69-
},
70-
classRegistrarAppendableProvider = { registeredClass ->
71-
val file = settings.generatedSourceRootDir
72-
.resolve("main")
73-
.resolve("kotlin")
74-
.resolve("godot")
75-
.resolve("entry")
76-
.resolve("${registeredClass.registeredName}Registrar.kt")
83+
FileOutputStream(file).bufferedWriter()
84+
},
85+
mainBufferedWriterProvider = {
86+
val file = settings.generatedSourceRootDir
87+
.resolve("main")
88+
.resolve("kotlin")
89+
.resolve("godot")
90+
.resolve("Entry.kt")
7791

78-
file.parentFile.mkdirs()
92+
file.parentFile.mkdirs()
7993

80-
if (!file.exists()) {
81-
file.createNewFile()
82-
}
94+
if (!file.exists()) {
95+
file.createNewFile()
96+
}
97+
98+
FileOutputStream(file).bufferedWriter()
99+
},
100+
classRegistrarFromDependencyCount = RegisteredClassMetadataContainerDatabase.dependenciesSize
101+
)
102+
103+
if (settings.isRegistrationFileGenerationEnabled) {
104+
EntryGenerator.generateRegistrationFiles(
105+
registeredClassMetadataContainers = RegisteredClassMetadataContainerDatabase.list(),
106+
registrationFileAppendableProvider = { metadata ->
107+
val registrationFile = provideRegistrationFilePathForInitialGeneration(
108+
isRegistrationFileHierarchyEnabled = settings.isRegistrationFileHierarchyEnabled,
109+
fqName = metadata.fqName,
110+
registeredName = metadata.registeredName,
111+
compilationProjectName = settings.projectName,
112+
classProjectName = metadata.projectName,
113+
registrationFileOutDir = settings.registrationBaseDirPathRelativeToProjectDir
114+
)
83115

84-
FileOutputStream(file).bufferedWriter()
85-
},
86-
mainBufferedWriterProvider = {
87116
val file = settings.generatedSourceRootDir
88117
.resolve("main")
89-
.resolve("kotlin")
90-
.resolve("godot")
91-
.resolve("Entry.kt")
118+
.resolve("resources")
119+
.resolve("entryFiles")
120+
.resolve(registrationFile)
92121

93122
file.parentFile.mkdirs()
94123

@@ -97,52 +126,21 @@ fun generateEntryUsingClassGraph(
97126
}
98127

99128
FileOutputStream(file).bufferedWriter()
100-
},
101-
classRegistrarFromDependencyCount = RegisteredClassMetadataContainerDatabase.dependenciesSize
129+
}
102130
)
103-
104-
if (settings.isRegistrationFileGenerationEnabled) {
105-
EntryGenerator.generateRegistrationFiles(
106-
registeredClassMetadataContainers = RegisteredClassMetadataContainerDatabase.list(),
107-
registrationFileAppendableProvider = { metadata ->
108-
val registrationFile = provideRegistrationFilePathForInitialGeneration(
109-
isRegistrationFileHierarchyEnabled = settings.isRegistrationFileHierarchyEnabled,
110-
fqName = metadata.fqName,
111-
registeredName = metadata.registeredName,
112-
compilationProjectName = settings.projectName,
113-
classProjectName = metadata.projectName,
114-
registrationFileOutDir = settings.registrationBaseDirPathRelativeToProjectDir
115-
)
116-
117-
val file = settings.generatedSourceRootDir
118-
.resolve("main")
119-
.resolve("resources")
120-
.resolve("entryFiles")
121-
.resolve(registrationFile)
122-
123-
file.parentFile.mkdirs()
124-
125-
if (!file.exists()) {
126-
file.createNewFile()
127-
}
128131

129-
FileOutputStream(file).bufferedWriter()
130-
}
131-
)
132-
133-
val classgraphRegistrationFilesBaseDir = settings.projectBaseDir
134-
.resolve("build/generated/classgraph/main/resources/entryFiles")
135-
.resolve(settings.registrationBaseDirPathRelativeToProjectDir)
132+
val classgraphRegistrationFilesBaseDir = settings.projectBaseDir
133+
.resolve("build/generated/classgraph/main/resources/entryFiles")
134+
.resolve(settings.registrationBaseDirPathRelativeToProjectDir)
136135

137-
val initialRegistrationFilesOutDir = settings.projectBaseDir
138-
.resolve(settings.registrationBaseDirPathRelativeToProjectDir)
136+
val initialRegistrationFilesOutDir = settings.projectBaseDir
137+
.resolve(settings.registrationBaseDirPathRelativeToProjectDir)
139138

140-
EntryGenerator.updateRegistrationFiles(
141-
generatedRegistrationFilesBaseDir = classgraphRegistrationFilesBaseDir,
142-
initialRegistrationFilesOutDir = initialRegistrationFilesOutDir,
143-
existingRegistrationFilesMap = existingRegistrationFiles,
144-
)
145-
}
139+
EntryGenerator.updateRegistrationFiles(
140+
generatedRegistrationFilesBaseDir = classgraphRegistrationFilesBaseDir,
141+
initialRegistrationFilesOutDir = initialRegistrationFilesOutDir,
142+
existingRegistrationFilesMap = existingRegistrationFiles,
143+
)
146144
}
147145
}
148146
}

kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/projectExt/setupTasks.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ import godot.gradle.tasks.graal.ios.createIOSGraalNativeImageTask
1717
import godot.gradle.tasks.graal.ios.createIOSStaticLibraryTask
1818
import godot.gradle.tasks.graal.ios.downloadIOSCapCacheFiles
1919
import godot.gradle.tasks.graal.ios.downloadIOSJdkStaticLibraries
20-
import godot.gradle.tasks.initialCompileForClassGraph
20+
import godot.gradle.tasks.initialJavaCompileForClassGraph
21+
import godot.gradle.tasks.initialKotlinCompileForClassGraph
22+
import godot.gradle.tasks.initialScalaCompileForClassGraph
2123
import godot.gradle.tasks.packageBootstrapJarTask
2224
import godot.gradle.tasks.packageMainJarTask
2325
import godot.gradle.tasks.setupAfterIdeaSyncTasks
@@ -28,11 +30,19 @@ import org.gradle.api.Project
2830
fun Project.setupTasks() {
2931
afterEvaluate {
3032
with(it) {
31-
val classGraphKotlinCompile = initialCompileForClassGraph()
33+
val classGraphScalaCompile = initialScalaCompileForClassGraph()
34+
val classGraphJavaCompile = initialJavaCompileForClassGraph()
35+
val classGraphKotlinCompile = initialKotlinCompileForClassGraph(
36+
classGraphScalaCompile,
37+
classGraphJavaCompile
38+
)
3239

3340
val deleteClassGraphGeneratedTask = deleteClassGraphGeneratedSourceTask()
3441

35-
val classGraphGenerationTask = classGraphSymbolsProcess(classGraphKotlinCompile, deleteClassGraphGeneratedTask)
42+
val classGraphGenerationTask = classGraphSymbolsProcess(
43+
classGraphKotlinCompile,
44+
deleteClassGraphGeneratedTask
45+
)
3646

3747
val packageBootstrapJarTask = packageBootstrapJarTask()
3848
val packageMainJarTask = packageMainJarTask(classGraphGenerationTask = classGraphGenerationTask)

kt/plugins/godot-gradle-plugin/src/main/kotlin/godot/gradle/tasks/classGraphSymbolsProcess.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation
1313
import java.io.File
1414

1515
fun Project.classGraphSymbolsProcess(
16-
classGraphCompile: KotlinWithJavaCompilation<KotlinJvmOptions, KotlinJvmCompilerOptions>,
16+
classGraphKotlinCompile: KotlinWithJavaCompilation<KotlinJvmOptions, KotlinJvmCompilerOptions>,
1717
deleteClassGraphGeneratedTask: TaskProvider<out Task>
1818
): TaskProvider<out Task> {
1919
val classGraphGenerationTask = tasks.register(
@@ -23,13 +23,11 @@ fun Project.classGraphSymbolsProcess(
2323
description = "Generates entry files using ClassGraph api"
2424

2525
with(it) {
26-
dependsOn(classGraphCompile.compileTaskProvider)
26+
dependsOn(classGraphKotlinCompile.compileTaskProvider)
2727
dependsOn(deleteClassGraphGeneratedTask)
2828

2929
doFirst {
30-
val runtimeClassPath =
31-
(classGraphCompile.runtimeDependencyFiles + classGraphCompile.compileDependencyFiles +
32-
classGraphCompile.output.allOutputs).files
30+
val classPath = (classGraphKotlinCompile.compileDependencyFiles + classGraphKotlinCompile.output.allOutputs).files
3331

3432
generateEntryUsingClassGraph(
3533
Settings(
@@ -63,7 +61,7 @@ fun Project.classGraphSymbolsProcess(
6361
.resolve("classgraph")
6462
),
6563
logger,
66-
runtimeClassPath
64+
classPath
6765
)
6866
}
6967
}

0 commit comments

Comments
 (0)