diff --git a/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinCompilerConfigurationFactory.groovy b/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinCompilerConfigurationFactory.groovy index 04ce0178..3da38f15 100644 --- a/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinCompilerConfigurationFactory.groovy +++ b/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinCompilerConfigurationFactory.groovy @@ -41,17 +41,16 @@ class KotlinCompilerConfigurationFactory { classpath.addAll(bootClasspath.split(File.pathSeparatorChar.toString()).collect { new File(it) }) } - def classpathFiles = classpath.findAll { it.exists() } - def classLoader = new URLClassLoader(classpathFiles.collect { it.toURL() }.toArray(new URL[classpath.size()])) + def classLoader = new URLClassLoader(classpath.collect { it.toURL() }.toArray(new URL[classpath.size()])) def configuration = new CompilerConfiguration() def scriptDefinitionClass = classLoader.loadClass(scriptDefinitionClassName) def scriptDefinition = new KotlinScriptDefinitionFromAnnotatedTemplate(JvmClassMappingKt.getKotlinClass(scriptDefinitionClass), - null, null, null, classpathFiles) + null, null, null, classpath.collect()) configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, scriptDefinition) configuration.put(JVMConfigurationKeys.CONTENT_ROOTS, classpath.collect { new JvmClasspathRoot(it) }) - configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, true) + configuration.put(JVMConfigurationKeys.RETAIN_OUTPUT_IN_MEMORY, false) configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector) configuration.copy() diff --git a/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinScriptBinaryArtifactRemapper.groovy b/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinScriptBinaryArtifactRemapper.groovy index 7216c1ba..ffaae951 100644 --- a/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinScriptBinaryArtifactRemapper.groovy +++ b/buildSrc/src/main/groovy/org/apollo/build/plugin/compiler/KotlinScriptBinaryArtifactRemapper.groovy @@ -4,17 +4,23 @@ import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassWriter import org.objectweb.asm.commons.Remapper import org.objectweb.asm.commons.RemappingClassAdapter +import org.objectweb.asm.tree.ClassNode class KotlinScriptBinaryArtifactRemapper { - String mainClassName + final String originalSourceFileName + final String mainClassName - KotlinScriptBinaryArtifactRemapper(String mainClassName) { + KotlinScriptBinaryArtifactRemapper(String originalSourceFileName, String mainClassName) { + this.originalSourceFileName = originalSourceFileName this.mainClassName = mainClassName } KotlinScriptBinaryArtifact remapToPackage(KotlinScriptBinaryArtifact artifact, String packageName) { - def reader = new ClassReader(new ByteArrayInputStream(artifact.data)) + def node = new ClassNode() def writer = new ClassWriter(0) + def reader = new ClassReader(new ByteArrayInputStream(artifact.data)) + reader.accept(node, ClassReader.EXPAND_FRAMES) + def normalizedPackageName = packageName.replace('.', '/') def oldClassName = reader.getClassName() def newClassName = artifact.relativePath.replace(oldClassName, "$normalizedPackageName/$oldClassName") @@ -31,7 +37,8 @@ class KotlinScriptBinaryArtifactRemapper { } def remappingAdapter = new RemappingClassAdapter(writer, remapper) - reader.accept(remappingAdapter, ClassReader.EXPAND_FRAMES) + node.accept(remappingAdapter) + writer.visitSource(originalSourceFileName, null) writer.visitEnd() return new KotlinScriptBinaryArtifact(newClassName, writer.toByteArray()) diff --git a/buildSrc/src/main/groovy/org/apollo/build/plugin/tasks/ApolloScriptCompileTask.groovy b/buildSrc/src/main/groovy/org/apollo/build/plugin/tasks/ApolloScriptCompileTask.groovy index d1e06c12..df590410 100644 --- a/buildSrc/src/main/groovy/org/apollo/build/plugin/tasks/ApolloScriptCompileTask.groovy +++ b/buildSrc/src/main/groovy/org/apollo/build/plugin/tasks/ApolloScriptCompileTask.groovy @@ -48,7 +48,7 @@ class ApolloScriptCompileTask extends DefaultTask { removeBinariesFor(it.file) def binary = compiler.compile(it.file.toPath()) - def binaryArtifactRemapper = new KotlinScriptBinaryArtifactRemapper(binary.mainClassName) + def binaryArtifactRemapper = new KotlinScriptBinaryArtifactRemapper(it.file.name, binary.mainClassName) def artifacts = binary.artifacts.collect { binaryArtifactRemapper.remapToPackage(it, packageName) } artifacts.each {