Skip to content

Commit

Permalink
remove KSP and generate code directly on KCP
Browse files Browse the repository at this point in the history
  • Loading branch information
arildojr7 committed Jul 29, 2023
1 parent 34a13fd commit 779b81a
Show file tree
Hide file tree
Showing 27 changed files with 178 additions and 73 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/publish_release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: publish
name: publish release

on:
push:
Expand Down Expand Up @@ -40,5 +40,8 @@ jobs:
- name: Publish iris-mock
run: ./gradlew :iris-mock:publish

- name: Publish iris-mock-compiler
run: ./gradlew :iris-mock-compiler:publish

- name: Publish iris-mock-plugin
run: ./gradlew :iris-mock-plugin:publishPlugins
5 changes: 4 additions & 1 deletion .github/workflows/publish_snapshot.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: publish
name: publish snapshot

on:
push:
Expand Down Expand Up @@ -40,5 +40,8 @@ jobs:
- name: Publish iris-mock
run: ./gradlew :iris-mock:publish

- name: Publish iris-mock-compiler
run: ./gradlew :iris-mock-compiler:publish

- name: Publish iris-mock-plugin
run: ./gradlew :iris-mock-plugin:publishPlugins
4 changes: 2 additions & 2 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,5 +56,5 @@ jobs:
- name: Build iris-mock-plugin
run: ./gradlew :iris-mock-plugin:assemble

# - name: Build app sample
# run: ./gradlew :sample:assembleDebug
- name: Build app sample
run: ./gradlew :sample:assembleDebug
95 changes: 95 additions & 0 deletions iris-mock-compiler/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
plugins {
kotlin("jvm")
kotlin("kapt")
id("java-library")
id("maven-publish")
id("signing")
id("com.github.gmazzo.buildconfig") version "3.0.3"
}

publishing {
publications {
create<MavenPublication>("maven") {
groupId = findProperty("GROUP_ID").toString()
artifactId = findProperty("PLUGIN_ARTIFACT_ID").toString()
version = findProperty("PLUGIN_VERSION").toString()

from(components["java"])

pom {
name.set("iris-mock")
description.set("A kotlin-first tool to intercept android network calls, modify requests/responses and mock entire APIs")
url.set("https://github.com/arildojr7/iris-mock")
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
developers {
developer {
id.set("arildojr7")
name.set("Arildo Borges Jr")
email.set("[email protected]")
}
}
scm {
connection.set("scm:git:git://github.com/arildojr7/iris-mock.git")
url.set("https://github.com/arildojr7/iris-mock")
}
}
}
}
repositories {
maven {
name = "OSSRH"
url = uri(getMavenUrl())
credentials {
username = System.getenv("SONATYPE_USER")
password = System.getenv("SONATYPE_PASSWORD")
}
}
}
}

signing {
setRequired {
gradle.taskGraph.allTasks.any { it is PublishToMavenRepository }
}
sign(publishing.publications["maven"])
}

java {
withJavadocJar()
withSourcesJar()
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
freeCompilerArgs += listOf(
"-opt-in=kotlin.RequiresOptIn",
"-opt-in=org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi"
)
}
}

dependencies {
implementation("com.squareup:kotlinpoet:1.14.2")
compileOnly("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.21")

compileOnly("com.google.auto.service:auto-service-annotations:1.0.1")
kapt("com.google.auto.service:auto-service:1.0.1")
}

val pluginId = findProperty("PLUGIN_ID").toString()

buildConfig {
packageName("dev.arildo.iris.plugin")
buildConfigField("String", "PLUGIN_ID", "\"${pluginId}\"")
}

fun getMavenUrl(): String = if (System.getenv("IS_RELEASE") == "true") {
"https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
} else {
"https://s01.oss.sonatype.org/content/repositories/snapshots/"
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package dev.arildo.iris.plugin

import com.google.auto.service.AutoService
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_ID
import dev.arildo.iris.plugin.util.srcGenDirKey
import dev.arildo.iris.plugin.util.srcGenDirName
import dev.arildo.iris.plugin.utils.srcGenDirKey
import dev.arildo.iris.plugin.utils.srcGenDirName
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
import org.jetbrains.kotlin.compiler.plugin.CliOption
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.google.auto.service.AutoService
import dev.arildo.iris.plugin.codegen.CodeGenerationExtension
import dev.arildo.iris.plugin.codegen.CodeGenerator
import dev.arildo.iris.plugin.codegen.IrisMockModuleDescriptorImpl
import dev.arildo.iris.plugin.util.srcGenDirKey
import dev.arildo.iris.plugin.utils.srcGenDirKey
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import dev.arildo.iris.plugin.codegen.CodeGenerator
import dev.arildo.iris.plugin.codegen.classAndInnerClassReferences
import dev.arildo.iris.plugin.codegen.generateIrisMockWrapper
import dev.arildo.iris.plugin.codegen.irisMockWrapperFactory
import dev.arildo.iris.plugin.util.IRIS_MOCK_INTERCEPTOR
import dev.arildo.iris.plugin.util.IRIS_WRAPPER_NAME
import dev.arildo.iris.plugin.util.IRIS_WRAPPER_PACKAGE
import dev.arildo.iris.plugin.util.fq
import dev.arildo.iris.plugin.utils.IRIS_MOCK_INTERCEPTOR
import dev.arildo.iris.plugin.utils.IRIS_WRAPPER_NAME
import dev.arildo.iris.plugin.utils.IRIS_WRAPPER_PACKAGE
import dev.arildo.iris.plugin.utils.fq
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.psi.KtFile
import java.io.File
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.arildo.iris.plugin.codegen

import dev.arildo.iris.plugin.util.requireFqName
import dev.arildo.iris.plugin.utils.requireFqName
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.name.FqName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package dev.arildo.iris.plugin.codegen

import dev.arildo.iris.plugin.codegen.ClassReference.Descriptor
import dev.arildo.iris.plugin.codegen.ClassReference.Psi
import dev.arildo.iris.plugin.util.classIdBestGuess
import dev.arildo.iris.plugin.utils.classIdBestGuess
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.incremental.components.LookupLocation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package dev.arildo.iris.plugin.codegen
import dev.arildo.iris.plugin.codegen.ClassReference.Descriptor
import dev.arildo.iris.plugin.codegen.ClassReference.Psi
import dev.arildo.iris.plugin.codegen.IrisMockModuleDescriptorImpl.ClassReferenceCacheKey.Companion.toClassReferenceCacheKey
import dev.arildo.iris.plugin.util.requireFqName
import dev.arildo.iris.plugin.utils.requireFqName
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.resolveClassByFqName
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package dev.arildo.iris.plugin.utils

import org.jetbrains.kotlin.config.CompilerConfigurationKey

internal const val srcGenDirName = "src-gen-dir"
internal val srcGenDirKey = CompilerConfigurationKey.create<String>("$srcGenDirName")

internal const val IRIS_MOCK_INTERCEPTOR = "IrisMockInterceptor"
internal const val IRIS_WRAPPER_NAME = "IrisMockWrapper"
internal const val IRIS_WRAPPER_PACKAGE = "dev.arildo.iris.mock"
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.arildo.iris.plugin.util
package dev.arildo.iris.plugin.utils

import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.arildo.iris.plugin.util
package dev.arildo.iris.plugin.utils

import dev.arildo.iris.plugin.codegen.ClassReference
import dev.arildo.iris.plugin.codegen.canResolveFqName
Expand Down
5 changes: 0 additions & 5 deletions iris-mock-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ plugins {
`kotlin-dsl`
signing
kotlin("jvm")
kotlin("kapt")
}

group = findProperty("GROUP_ID").toString()
Expand Down Expand Up @@ -43,13 +42,9 @@ dependencies {
implementation("com.android.tools.build:gradle:7.2.2")
implementation(kotlin("stdlib"))
implementation(kotlin("gradle-plugin-api"))
implementation("com.squareup:kotlinpoet:1.14.2")

compileOnly("dev.gradleplugins:gradle-api:7.6")
compileOnly("com.squareup.okhttp3:okhttp:3.14.9")
compileOnly("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.8.21")
compileOnly("com.google.auto.service:auto-service-annotations:1.0.1")
kapt("com.google.auto.service:auto-service:1.0.1")

arrayOf("asm", "asm-util", "asm-commons").forEach {
compileOnly("org.ow2.asm:$it:9.4")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package dev.arildo.iris.plugin

import org.gradle.api.model.ObjectFactory
import javax.inject.Inject

abstract class IrisMockGradleExtension @Inject constructor(objects: ObjectFactory) {

open class IrisMockGradleExtension {
// val enableOnlyOnDebugVariant: Property<Boolean> =
// objects.property(Boolean::class.java).convention(false)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,18 @@ package dev.arildo.iris.plugin
import com.android.build.api.instrumentation.FramesComputationMode
import com.android.build.api.instrumentation.InstrumentationScope
import com.android.build.api.variant.AndroidComponentsExtension
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_ARTIFACT_ID
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_GROUP_ID
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_ID
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_VERSION
import dev.arildo.iris.plugin.util.srcGenDirName
import dev.arildo.iris.plugin.visitor.IrisMockVisitorFactory
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.getByType
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
import java.io.File

class IrisMockGradlePlugin : KotlinCompilerPluginSupportPlugin {
class IrisMockGradlePlugin : Plugin<Project> {
override fun apply(target: Project) {
target.extensions.create("irisMock", IrisMockGradleExtension::class.java)
addIrisMockRuntimeDependency(target)

target.plugins.apply(IrisMockSubPlugin::class.java)

target.pluginManager.withPlugin("com.android.application") {
val androidComponents = target.extensions.getByType(AndroidComponentsExtension::class)
Expand All @@ -41,30 +35,9 @@ class IrisMockGradlePlugin : KotlinCompilerPluginSupportPlugin {
}
}

override fun getCompilerPluginId(): String = PLUGIN_ID

override fun getPluginArtifact(): SubpluginArtifact = SubpluginArtifact(
groupId = PLUGIN_GROUP_ID,
artifactId = PLUGIN_ARTIFACT_ID,
version = PLUGIN_VERSION
)

override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true

override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider<List<SubpluginOption>> {
val project = kotlinCompilation.target.project

private fun addIrisMockRuntimeDependency(project: Project) {
project.configurations.getByName("implementation").dependencies.add(
project.dependencies.create("dev.arildo:iris-mock:$PLUGIN_VERSION")
)

return project.provider {
listOf(
SubpluginOption(
key = srcGenDirName,
value = "${project.buildDir}${File.separator}iris-mock"
)
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package dev.arildo.iris.plugin

import dev.arildo.iris.plugin.BuildConfig.PLUGIN_ARTIFACT_ID
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_GROUP_ID
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_ID
import dev.arildo.iris.plugin.BuildConfig.PLUGIN_VERSION
import org.gradle.api.provider.Provider
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
import java.io.File

class IrisMockSubPlugin : KotlinCompilerPluginSupportPlugin {
override fun isApplicable(kotlinCompilation: KotlinCompilation<*>) = true

override fun getCompilerPluginId() = PLUGIN_ID

override fun getPluginArtifact() = SubpluginArtifact(
groupId = PLUGIN_GROUP_ID,
artifactId = PLUGIN_ARTIFACT_ID,
version = PLUGIN_VERSION
)

override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider<List<SubpluginOption>> {
return kotlinCompilation.target.project.let { project ->
project.provider {
listOf(
SubpluginOption(
key = "src-gen-dir",
value = "${project.buildDir}${File.separator}iris-mock"
)
)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.arildo.iris.plugin.util

import org.jetbrains.kotlin.config.CompilerConfigurationKey

internal const val LIST_DESCRIPTOR = "Ljava/util/List;"
internal const val LIST_OWNER = "java/util/List"
internal const val OBJECT = "(Ljava/lang/Object;)Z"
Expand All @@ -14,10 +12,4 @@ internal const val ADD = "add"
internal const val BUILD = "build"
internal const val NETWORK_INTERCEPTORS = "networkInterceptors"

internal const val IRIS_MOCK_INTERCEPTOR = "IrisMockInterceptor"
internal const val IRIS_WRAPPER_INTERCEPTOR = "dev/arildo/iris/mock/IrisMockWrapper"
internal const val IRIS_WRAPPER_NAME = "IrisMockWrapper"
internal const val IRIS_WRAPPER_PACKAGE = "dev.arildo.iris.mock"

internal const val srcGenDirName = "src-gen-dir"
internal val srcGenDirKey = CompilerConfigurationKey.create<String>("$srcGenDirName")
4 changes: 2 additions & 2 deletions iris-mock/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ signing {
}

dependencies {
api("com.squareup.okhttp3:okhttp:3.14.9")
api("com.squareup.okio:okio:2.8.0")
implementation("com.squareup.okhttp3:okhttp:3.14.9")
implementation("com.squareup.okio:okio:2.8.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0")
testImplementation("org.junit.jupiter:junit-jupiter:5.8.2")
Expand Down
Loading

0 comments on commit 779b81a

Please sign in to comment.