pb plugin working really really well

This commit is contained in:
Adam 2021-10-31 09:13:41 +01:00
parent 2920f2fcc2
commit 5bb5f42af0
6 changed files with 45 additions and 34 deletions

View file

@ -24,17 +24,22 @@ class IntelliJPattern : Plugin<Project> {
return return
} }
val genSrcDir = project.layout.buildDirectory.dir("protobuf/generated-sources") val genSrcDir = project.layout.buildDirectory.dir("pbAndG/generated-sources")
val ktGenSrc = genSrcDir.map { it.dir("kotlin") } val ktGenSrc = genSrcDir.map { it.dir("kotlin").asFile }
val jGenSrc = genSrcDir.map { it.dir("java") } val jGenSrc = genSrcDir.map { it.dir("java").asFile }
val protoSrc = project.layout.projectDirectory.dir("src/main/proto").asFile
project.mkdir(ktGenSrc) project.mkdir(ktGenSrc)
project.mkdir(jGenSrc) project.mkdir(jGenSrc)
project.plugins.withType<IdeaPlugin> { project.plugins.withType<IdeaPlugin> {
project.extensions.configure<IdeaModel> { project.extensions.configure<IdeaModel> {
this.module.generatedSourceDirs.add(ktGenSrc.get().asFile) module {
this.module.generatedSourceDirs.add(jGenSrc.get().asFile) generatedSourceDirs.add(ktGenSrc.get())
generatedSourceDirs.add(jGenSrc.get())
sourceDirs.add(protoSrc)
}
} }
} }

View file

@ -1,39 +1,44 @@
package dev.adamko.gradle.pbandg.pattern package dev.adamko.gradle.pbandg.pattern
import dev.adamko.gradle.pbandg.task.ProtobufCompileTask
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSet
import org.gradle.kotlin.dsl.dependencies import org.gradle.api.tasks.SourceSetContainer
import org.gradle.kotlin.dsl.findByType import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.getByName
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
class KotlinProjectConfiguration : Plugin<Project> { class KotlinProjectConfiguration : Plugin<Project> {
override fun apply(project: Project) { override fun apply(project: Project) {
addSourceSets(project) addSourceSets(project)
} }
private fun addSourceSets(project: Project) { private fun addSourceSets(project: Project) {
project.extensions.findByType<KotlinJvmProjectExtension>()?.apply { project.extensions.findByType<KotlinJvmProjectExtension>()?.apply {
val srcSet = project.extensions.getByName<SourceSet>(SourceSet.MAIN_SOURCE_SET_NAME) project.extensions.findByType<SourceSetContainer>()
?.named(SourceSet.MAIN_SOURCE_SET_NAME)
project.tasks ?.configure {
.withType<ProtobufCompileTask>() java {
.map { it.generatedSources.get() } srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/java"))
.forEach { generatedSourcesDir -> srcDir(project.layout.buildDirectory.dir("pbAndG/generated-sources/kotlin"))
project.logger.lifecycle("-------\nadding generated sources $generatedSourcesDir\n-------")
srcSet.java {
srcDir(generatedSourcesDir.dir("java"))
srcDir(generatedSourcesDir.dir("kotlin"))
} }
} }
// val srcSet = project.extensions.getByName<SourceSet>(SourceSet.MAIN_SOURCE_SET_NAME)
//
// project.tasks
// .withType<ProtobufCompileTask>()
// .map { it.generatedSources.get() }
// .forEach { generatedSourcesDir ->
// project.logger.lifecycle("-------\nadding generated sources $generatedSourcesDir\n-------")
//
// srcSet.java {
// srcDir(generatedSourcesDir.dir("java"))
// srcDir(generatedSourcesDir.dir("kotlin"))
// }
// }
} }
} }
} }

View file

@ -1,5 +1,7 @@
package dev.adamko.gradle.pbandg package dev.adamko.gradle.pbandg
import dev.adamko.gradle.pbandg.pattern.IntelliJPattern
import dev.adamko.gradle.pbandg.pattern.KotlinProjectConfiguration
import dev.adamko.gradle.pbandg.settings.PBAndGSettings import dev.adamko.gradle.pbandg.settings.PBAndGSettings
import dev.adamko.gradle.pbandg.task.ProtobufCompileTask import dev.adamko.gradle.pbandg.task.ProtobufCompileTask
import dev.adamko.gradle.pbandg.task.ProtobufPrepareLibrariesTask import dev.adamko.gradle.pbandg.task.ProtobufPrepareLibrariesTask
@ -20,11 +22,11 @@ plugins {
// val pbSrcSet = project.objects.sourceDirectorySet("protobuf", "protobuf") // val pbSrcSet = project.objects.sourceDirectorySet("protobuf", "protobuf")
//if (plugins.hasPlugin(IdeaPlugin::class)) { //if (plugins.hasPlugin(IdeaPlugin::class)) {
// apply(IntelliJPattern()) // IntelliJPattern().apply(project)
//}
//if (plugins.hasPlugin("org.jetbrains.kotlin.jvm")) {
// apply(KotlinProjectConfiguration())
//} //}
if (plugins.hasPlugin("org.jetbrains.kotlin.jvm")) {
KotlinProjectConfiguration().apply(project)
}
val pbAndGSettings = val pbAndGSettings =
project.extensions.create(Constants.PBG_SETTINGS_NAME, PBAndGSettings::class, project) project.extensions.create(Constants.PBG_SETTINGS_NAME, PBAndGSettings::class, project)

View file

@ -1,4 +1,4 @@
package dev.adamko.gradle.pbandg.pattern package dev.adamko.gradle.pbandg.task
import dev.adamko.gradle.pbandg.settings.PBAndGSettings import dev.adamko.gradle.pbandg.settings.PBAndGSettings

View file

@ -1,10 +1,6 @@
package dev.adamko.gradle.pbandg.task.options package dev.adamko.gradle.pbandg.task.options
import dev.adamko.gradle.pbandg.Constants.pbAndGBuildDir
import java.io.Serializable import java.io.Serializable
import org.gradle.api.file.Directory
import org.gradle.api.file.ProjectLayout
import org.gradle.api.provider.Provider
interface ProtocOutput : Serializable { interface ProtocOutput : Serializable {
@ -12,10 +8,6 @@ interface ProtocOutput : Serializable {
val protocOptions: String val protocOptions: String
val outputDirectoryName: String val outputDirectoryName: String
fun outputDirectory(layout: ProjectLayout): Provider<Directory> {
return layout.pbAndGBuildDir.map { it.dir(outputDirectoryName) }
}
data class KotlinOutput( data class KotlinOutput(
override val protocOptions: String = "lite", override val protocOptions: String = "lite",
override val outputDirectoryName: String = "kotlin", override val outputDirectoryName: String = "kotlin",

View file

@ -10,8 +10,15 @@ val buildDir: Directory = layout.buildDirectory.dir(projectId).get()
dependencies { dependencies {
protobufLibrary("com.google.protobuf:protobuf-javalite:3.19.1") protobufLibrary("com.google.protobuf:protobuf-javalite:3.19.1")
api("com.google.protobuf:protobuf-javalite:3.19.1")
api("com.google.protobuf:protobuf-kotlin-lite:3.19.1")
} }
tasks.protobufCompile { tasks.protobufCompile {
protoFile.set(layout.projectDirectory.file("src/main/proto/FactorioServerLogRecord.proto")) protoFile.set(layout.projectDirectory.file("src/main/proto/FactorioServerLogRecord.proto"))
} }
sourceSets {
}