diff --git a/.github/workflows/compiler_plugin_build.yml b/.github/workflows/compiler_plugin_build.yml new file mode 100644 index 0000000..a94211c --- /dev/null +++ b/.github/workflows/compiler_plugin_build.yml @@ -0,0 +1,31 @@ +name: Compiler plugin Build + +on: + push: + branches: [ master ] + pull_request: + workflow_dispatch: + +jobs: + build: + + runs-on: ubuntu-latest + timeout-minutes: 15 + + steps: + + - name: Checkout branch + uses: actions/checkout@v4 + + - name: set up JDK 21 + uses: actions/setup-java@v3 + with: + java-version: '21' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: build app with compiler plugin + run: ./gradlew :compiler-plugin:build \ No newline at end of file diff --git a/.gitignore b/.gitignore index eb9ba42..269d90c 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ /captures .externalNativeBuild .cxx -local.properties \ No newline at end of file +local.properties +/.gnupg \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cea8693 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 14.02.2025 Ilya Stepanyuk + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 560fc16..61c0adf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,8 +28,8 @@ android { } dependencies { - implementation(project(":compiler-plugin-lib")) - kotlinCompilerPluginClasspath(project(":compiler-plugin-lib")) + implementation(libs.stslex.compilerPlugin) + kotlinCompilerPluginClasspath(libs.stslex.compilerPlugin) coreLibraryDesugaring(libs.android.desugarJdkLibs) implementation(libs.androidx.activity) @@ -38,9 +38,3 @@ dependencies { implementation(libs.androidx.lifecycle.common) implementation(libs.androidx.constraintlayout) } - -tasks.withType().configureEach { - kotlinOptions { - freeCompilerArgs += listOf("-Xplugin=${rootProject.projectDir}/compiler-plugin-lib/build/libs/compiler-plugin-lib.jar") - } -} \ No newline at end of file diff --git a/app/src/main/kotlin/com/stslex/compiler_app/MainActivity.kt b/app/src/main/kotlin/com/stslex/compiler_app/MainActivity.kt index 6bd89d8..a1652fa 100644 --- a/app/src/main/kotlin/com/stslex/compiler_app/MainActivity.kt +++ b/app/src/main/kotlin/com/stslex/compiler_app/MainActivity.kt @@ -9,7 +9,7 @@ import androidx.lifecycle.lifecycleScope import com.stslex.compiler_app.UserToastUtil.sendToastOfUserChanges import com.stslex.compiler_app.app.R import com.stslex.compiler_app.model.UserModel -import com.stslex.compiler_plugin_lib.DistinctUntilChangeFun +import io.github.stslex.compiler_plugin.DistinctUntilChangeFun import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import java.util.logging.Level diff --git a/compiler-plugin-lib/.gitignore b/compiler-plugin-lib/.gitignore deleted file mode 100644 index 42afabf..0000000 --- a/compiler-plugin-lib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/compiler-plugin-lib/build.gradle.kts b/compiler-plugin-lib/build.gradle.kts deleted file mode 100644 index 07aa0e1..0000000 --- a/compiler-plugin-lib/build.gradle.kts +++ /dev/null @@ -1,22 +0,0 @@ -plugins { - `java-library` - alias(libs.plugins.jetbrains.kotlin.jvm) -} - -java { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 -} - -kotlin { - explicitApi() - compilerOptions { - jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 - } -} - -dependencies { - implementation(kotlin("stdlib")) - compileOnly(libs.jetbrains.kotlin.compiler.embeddable) -} - diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/CompilerConsts.kt b/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/CompilerConsts.kt deleted file mode 100644 index 823dc07..0000000 --- a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/CompilerConsts.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.stslex.compiler_plugin_lib.utils - -internal object CompilerConsts { - - const val PATH: String = "com.stslex.compiler_plugin_lib" -} \ No newline at end of file diff --git a/compiler-plugin-lib/src/main/resources/META-INF/gradle-plugins/com.stslex.compiler-plugin.properties b/compiler-plugin-lib/src/main/resources/META-INF/gradle-plugins/com.stslex.compiler-plugin.properties deleted file mode 100644 index 78dce4c..0000000 --- a/compiler-plugin-lib/src/main/resources/META-INF/gradle-plugins/com.stslex.compiler-plugin.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-class=com.stslex.compiler_plugin_lib.WorkshopCompilerPlugin \ No newline at end of file diff --git a/compiler-plugin-lib/src/main/resources/META-INF/services/org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension b/compiler-plugin-lib/src/main/resources/META-INF/services/org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension deleted file mode 100644 index d0e2999..0000000 --- a/compiler-plugin-lib/src/main/resources/META-INF/services/org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension +++ /dev/null @@ -1 +0,0 @@ -com.stslex.compiler_plugin_lib.DistinctChangeIrGenerationExtension \ No newline at end of file diff --git a/compiler-plugin-lib/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar b/compiler-plugin-lib/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar deleted file mode 100644 index 0bc0c93..0000000 --- a/compiler-plugin-lib/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar +++ /dev/null @@ -1 +0,0 @@ -com.stslex.compiler_plugin_lib.WorkshopCompilerPlugin \ No newline at end of file diff --git a/compiler-plugin/.gitignore b/compiler-plugin/.gitignore new file mode 100644 index 0000000..a02f6f7 --- /dev/null +++ b/compiler-plugin/.gitignore @@ -0,0 +1,4 @@ +/build +*.pom +/.gnupg +/gradle.properties \ No newline at end of file diff --git a/compiler-plugin/build.gradle.kts b/compiler-plugin/build.gradle.kts new file mode 100644 index 0000000..1252b14 --- /dev/null +++ b/compiler-plugin/build.gradle.kts @@ -0,0 +1,150 @@ +import java.security.MessageDigest + +plugins { + `java-library` + `maven-publish` + signing + alias(libs.plugins.jetbrains.kotlin.jvm) +} + +group = "io.github.stslex" +version = "0.0.1" + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} + +kotlin { + explicitApi() + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21 + } +} + +dependencies { + implementation(kotlin("stdlib")) + compileOnly(libs.jetbrains.kotlin.compiler.embeddable) +} + +tasks.register("javadocJar") { + archiveClassifier.set("javadoc") +} + +tasks.register("sourcesJar") { + archiveClassifier.set("sources") + from(sourceSets["main"].allSource) +} + +publishing { + publications { + create("mavenJava") { + from(components["java"]) + + groupId = "io.github.stslex" + artifactId = "compiler-plugin" + version = "0.0.1" + + artifact(tasks["javadocJar"]) + artifact(tasks["sourcesJar"]) + suppressPomMetadataWarningsFor("runtime") + + pom { + name.set("My Kotlin Compiler Plugin") + description.set("A custom Kotlin compiler plugin for experimentation") + url.set("https://github.com/stslex/compiler_plugin_workshow") + licenses { + license { + name.set("The Apache License, Version 2.0") + url.set("https://raw.githubusercontent.com/stslex/compiler_plugin_workshow/refs/heads/publish_maven/LICENSE") + } + } + developers { + developer { + id.set("stslex") + name.set("Ilya") + email.set("ilya977.077@gmail.com") + } + } + scm { + connection.set("scm:git:git://github.com/stslex/compiler_plugin_workshow.git") + developerConnection.set("scm:git:ssh://github.com:stslex/compiler_plugin_workshow.git") + url.set("https://github.com/stslex/compiler_plugin_workshow") + } + } + } + } +} + +signing { + sign(publishing.publications["mavenJava"]) +} + +val localRepoPath = File( + "${System.getProperty("user.home")}/.m2/repository/io/github/stslex/compiler-plugin/$version" +) + +tasks.named("publishToMavenLocal") { + finalizedBy(generateChecksums) + finalizedBy(packageArtifacts) +} + +val generateChecksums = tasks.register("generateChecksums") { + group = "publishing" + description = "Generate MD5 ΠΈ SHA1 for all artifacts in local repository" + + doLast { + if (!localRepoPath.exists()) { + error("❌ Local repository not found: $localRepoPath") + } + + val artifacts = localRepoPath.listFiles { file -> + file.isFile && + file.name.endsWith(".md5").not() && + file.name.endsWith(".sha1").not() + } + + if (artifacts.isNullOrEmpty()) error("❌ No artifacts found in local repository: $localRepoPath") + + artifacts.forEach { file -> + val md5File = File(file.parent, "${file.name}.md5") + val sha1File = File(file.parent, "${file.name}.sha1") + + md5File.writeText(file.md5Hex()) + sha1File.writeText(file.sha1Hex()) + + println("βœ… Checksums are generated: ${md5File.name}, ${sha1File.name}") + } + } +} + +val packageArtifacts = tasks.registering(Zip::class) { + group = "publishing" + description = "Create ZIP-archive with artifacts for Central Publisher Portal" + + val localRepo = file(localRepoPath) + + if (localRepo.exists().not()) error("Local repo not found: $localRepo") + + from(localRepo) { + into("io/github/stslex/compiler-plugin/$version/") + include("**/*.jar", "**/*.pom", "**/*.asc", "**/*.md5", "**/*.sha1") + exclude("*.module") + exclude("*.module.*") + } + + archiveFileName.set("compiler-plugin-${version}.zip") + destinationDirectory.set(layout.buildDirectory.dir("distributions")) +} + +fun File.md5Hex(): String = inputStream().use { stream -> + MessageDigest.getInstance("MD5") + .digest(stream.readBytes()) + .joinToString("") { "%02x".format(it) } +} + +fun File.sha1Hex(): String = inputStream().use { stream -> + MessageDigest.getInstance("SHA-1") + .digest(stream.readBytes()) + .joinToString("") { "%02x".format(it) } +} diff --git a/compiler-plugin-lib/settings.gradle.kts b/compiler-plugin/settings.gradle.kts similarity index 88% rename from compiler-plugin-lib/settings.gradle.kts rename to compiler-plugin/settings.gradle.kts index 3e18f66..eedb3a2 100644 --- a/compiler-plugin-lib/settings.gradle.kts +++ b/compiler-plugin/settings.gradle.kts @@ -13,4 +13,4 @@ dependencyResolutionManagement { } } -rootProject.name = "compiler-plugin-lib" \ No newline at end of file +rootProject.name = "compiler-plugin" \ No newline at end of file diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/DistinctChangeCache.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/DistinctChangeCache.kt similarity index 94% rename from compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/DistinctChangeCache.kt rename to compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/DistinctChangeCache.kt index 8b446d8..73ac427 100644 --- a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/DistinctChangeCache.kt +++ b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/DistinctChangeCache.kt @@ -1,4 +1,4 @@ -package com.stslex.compiler_plugin_lib +package io.github.stslex.compiler_plugin import java.util.logging.Level import java.util.logging.Logger diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/DistinctUntilChangeFun.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/DistinctUntilChangeFun.kt similarity index 74% rename from compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/DistinctUntilChangeFun.kt rename to compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/DistinctUntilChangeFun.kt index 0d9a66c..002ee18 100644 --- a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/DistinctUntilChangeFun.kt +++ b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/DistinctUntilChangeFun.kt @@ -1,4 +1,4 @@ -package com.stslex.compiler_plugin_lib +package io.github.stslex.compiler_plugin @Target(AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.BINARY) diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/WorkshopCompilerPlugin.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/WorkshopCompilerPlugin.kt similarity index 82% rename from compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/WorkshopCompilerPlugin.kt rename to compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/WorkshopCompilerPlugin.kt index 0219c1d..eb5b27d 100644 --- a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/WorkshopCompilerPlugin.kt +++ b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/WorkshopCompilerPlugin.kt @@ -1,6 +1,6 @@ -package com.stslex.compiler_plugin_lib +package io.github.stslex.compiler_plugin -import com.stslex.compiler_plugin_lib.extensions.DistinctChangeIrGenerationExtension +import io.github.stslex.compiler_plugin.extensions.DistinctChangeIrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/extensions/DistinctChangeIrGenerationExtension.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/extensions/DistinctChangeIrGenerationExtension.kt similarity index 81% rename from compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/extensions/DistinctChangeIrGenerationExtension.kt rename to compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/extensions/DistinctChangeIrGenerationExtension.kt index 950f524..c2bcc7a 100644 --- a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/extensions/DistinctChangeIrGenerationExtension.kt +++ b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/extensions/DistinctChangeIrGenerationExtension.kt @@ -1,6 +1,6 @@ -package com.stslex.compiler_plugin_lib.extensions +package io.github.stslex.compiler_plugin.extensions -import com.stslex.compiler_plugin_lib.transformers.IrFunctionTransformer +import io.github.stslex.compiler_plugin.transformers.IrFunctionTransformer import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.ir.declarations.IrModuleFragment diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/transformers/IrFunctionTransformer.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/transformers/IrFunctionTransformer.kt similarity index 86% rename from compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/transformers/IrFunctionTransformer.kt rename to compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/transformers/IrFunctionTransformer.kt index 538f9b4..a1b8eaf 100644 --- a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/transformers/IrFunctionTransformer.kt +++ b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/transformers/IrFunctionTransformer.kt @@ -1,10 +1,10 @@ -package com.stslex.compiler_plugin_lib.transformers +package io.github.stslex.compiler_plugin.transformers import buildArgsListExpression -import com.stslex.compiler_plugin_lib.DistinctUntilChangeFun -import com.stslex.compiler_plugin_lib.utils.buildLambdaForBody -import com.stslex.compiler_plugin_lib.utils.buildSaveInCacheCall -import com.stslex.compiler_plugin_lib.utils.fullyQualifiedName +import io.github.stslex.compiler_plugin.DistinctUntilChangeFun +import io.github.stslex.compiler_plugin.utils.buildLambdaForBody +import io.github.stslex.compiler_plugin.utils.buildSaveInCacheCall +import io.github.stslex.compiler_plugin.utils.fullyQualifiedName import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.ir.IrStatement diff --git a/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/CompilerConsts.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/CompilerConsts.kt new file mode 100644 index 0000000..24334fe --- /dev/null +++ b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/CompilerConsts.kt @@ -0,0 +1,6 @@ +package io.github.stslex.compiler_plugin.utils + +internal object CompilerConsts { + + const val PATH: String = "io.github.stslex.compiler_plugin" +} \ No newline at end of file diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/CompilerExtensions.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/CompilerExtensions.kt similarity index 97% rename from compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/CompilerExtensions.kt rename to compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/CompilerExtensions.kt index ed0e79b..80f9e19 100644 --- a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/CompilerExtensions.kt +++ b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/CompilerExtensions.kt @@ -1,6 +1,6 @@ -package com.stslex.compiler_plugin_lib.utils +package io.github.stslex.compiler_plugin.utils -import com.stslex.compiler_plugin_lib.DistinctChangeCache +import io.github.stslex.compiler_plugin.DistinctChangeCache import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.builders.declarations.buildFun diff --git a/compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/GetFunctionArgsUtil.kt b/compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/GetFunctionArgsUtil.kt similarity index 100% rename from compiler-plugin-lib/src/main/kotlin/com/stslex/compiler_plugin_lib/utils/GetFunctionArgsUtil.kt rename to compiler-plugin/src/main/kotlin/io/github/stslex/compiler_plugin/utils/GetFunctionArgsUtil.kt diff --git a/compiler-plugin/src/main/resources/META-INF/gradle-plugins/com.stslex.compiler-plugin.properties b/compiler-plugin/src/main/resources/META-INF/gradle-plugins/com.stslex.compiler-plugin.properties new file mode 100644 index 0000000..4b8ab65 --- /dev/null +++ b/compiler-plugin/src/main/resources/META-INF/gradle-plugins/com.stslex.compiler-plugin.properties @@ -0,0 +1 @@ +implementation-class=io.github.stslex.compiler_plugin.WorkshopCompilerPlugin \ No newline at end of file diff --git a/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension new file mode 100644 index 0000000..b151472 --- /dev/null +++ b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension @@ -0,0 +1 @@ +io.github.stslex.compiler_plugin.DistinctChangeIrGenerationExtension \ No newline at end of file diff --git a/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar new file mode 100644 index 0000000..a9effc6 --- /dev/null +++ b/compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar @@ -0,0 +1 @@ +io.github.stslex.compiler_plugin.WorkshopCompilerPlugin \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 2cbd6d1..3c5031e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,4 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a2ef779..2490567 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,6 +14,8 @@ activity = "1.10.0" constraintLayout = "2.2.0" jetbrainsKotlinJvm = "2.0.20" +stslexCompilerPlugin = "0.0.1" + [libraries] android-desugarJdkLibs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "androidDesugarJdkLibs" } @@ -25,6 +27,7 @@ androidx-constraintlayout = { group = "androidx.constraintlayout", name = "const jetbrains-kotlin-compiler-embeddable = { group = "org.jetbrains.kotlin", name = "kotlin-compiler-embeddable", version.ref = "kotlin" } +stslex-compilerPlugin = { group = "io.github.stslex", name = "compiler-plugin", version.ref = "stslexCompilerPlugin" } [plugins] kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } application = { id = "com.android.application", version.ref = "androidGradlePlugin" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 5e4c6f6..a120b22 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,11 +1,12 @@ pluginManagement { + includeBuild("compiler-plugin") repositories { gradlePluginPortal() google() mavenCentral() - flatDir { - dirs("../compiler-plugin-lib/build/libs") - } + + // for getting plugin from local maven repository + // mavenLocal() } } @@ -21,5 +22,4 @@ dependencyResolutionManagement { rootProject.name = "CompilerPlugin" -include(":compiler-plugin-lib") include(":app") \ No newline at end of file