diff --git a/.github/workflows/PR.yml b/.github/workflows/PR.yml index fee8a2390fe..9c2b7ea1165 100644 --- a/.github/workflows/PR.yml +++ b/.github/workflows/PR.yml @@ -37,7 +37,7 @@ jobs: - name: Run spotless run: ./gradlew spotlessCheck - name: Assemble parallel - run: ./gradlew assemble + run: ./gradlew assemble dokkaHtml # Linux tests - name: Run gradle tests diff --git a/dialects/hsql/build.gradle b/dialects/hsql/build.gradle index 9b11a13a64f..4d5352aa115 100644 --- a/dialects/hsql/build.gradle +++ b/dialects/hsql/build.gradle @@ -13,17 +13,18 @@ grammarKit { dependencies { api projects.sqldelightCompiler.dialect - compileOnly libs.intellij.ideImpl - - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core + testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { exclude group: "com.jetbrains.intellij.platform" } + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } } apply from: "$rootDir/gradle/gradle-mvn-push.gradle" diff --git a/dialects/mysql/build.gradle b/dialects/mysql/build.gradle index 4a63a8196a5..af354e8d82f 100644 --- a/dialects/mysql/build.gradle +++ b/dialects/mysql/build.gradle @@ -17,14 +17,14 @@ dependencies { api libs.mysqlJdbc api projects.sqldelightCompiler.dialect - compileOnly libs.intellij.ideImpl - compileOnly libs.intellij.core.ui + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } compileOnly libs.moshi - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/postgresql/build.gradle b/dialects/postgresql/build.gradle index 1783fd8cb50..54a94a7e97a 100644 --- a/dialects/postgresql/build.gradle +++ b/dialects/postgresql/build.gradle @@ -17,14 +17,14 @@ dependencies { api libs.postgresJdbc api projects.sqldelightCompiler.dialect - compileOnly libs.intellij.ideImpl - compileOnly libs.intellij.core.ui + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } compileOnly libs.moshi - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite-3-18/build.gradle b/dialects/sqlite-3-18/build.gradle index 8141679cfcd..47250b606ab 100644 --- a/dialects/sqlite-3-18/build.gradle +++ b/dialects/sqlite-3-18/build.gradle @@ -12,13 +12,13 @@ grammarKit { dependencies { api projects.sqldelightCompiler.dialect - compileOnly libs.intellij.ideImpl - compileOnly libs.intellij.core.ui + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite-3-24/build.gradle b/dialects/sqlite-3-24/build.gradle index 09968199098..424e7842027 100644 --- a/dialects/sqlite-3-24/build.gradle +++ b/dialects/sqlite-3-24/build.gradle @@ -12,12 +12,13 @@ grammarKit { dependencies { api projects.dialects.sqlite318 - compileOnly libs.intellij.ideImpl + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite-3-25/build.gradle b/dialects/sqlite-3-25/build.gradle index 2c673171125..b44dcbe918b 100644 --- a/dialects/sqlite-3-25/build.gradle +++ b/dialects/sqlite-3-25/build.gradle @@ -12,12 +12,13 @@ grammarKit { dependencies { api projects.dialects.sqlite324 - compileOnly libs.intellij.ideImpl + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite-3-30/build.gradle b/dialects/sqlite-3-30/build.gradle index 74849d81239..e4a8799617f 100644 --- a/dialects/sqlite-3-30/build.gradle +++ b/dialects/sqlite-3-30/build.gradle @@ -12,12 +12,13 @@ grammarKit { dependencies { api projects.dialects.sqlite325 - compileOnly libs.intellij.ideImpl + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite-3-33/build.gradle b/dialects/sqlite-3-33/build.gradle index 39cedc41a8b..0945d61f003 100644 --- a/dialects/sqlite-3-33/build.gradle +++ b/dialects/sqlite-3-33/build.gradle @@ -12,12 +12,13 @@ grammarKit { dependencies { api projects.dialects.sqlite330 - compileOnly libs.intellij.ideImpl + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite-3-35/build.gradle b/dialects/sqlite-3-35/build.gradle index 5d930a67ed0..1f390031e65 100644 --- a/dialects/sqlite-3-35/build.gradle +++ b/dialects/sqlite-3-35/build.gradle @@ -12,12 +12,13 @@ grammarKit { dependencies { api projects.dialects.sqlite333 - compileOnly libs.intellij.ideImpl + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite-3-38/build.gradle b/dialects/sqlite-3-38/build.gradle index 1d6db15c01f..641915acff1 100644 --- a/dialects/sqlite-3-38/build.gradle +++ b/dialects/sqlite-3-38/build.gradle @@ -12,12 +12,13 @@ grammarKit { dependencies { api projects.dialects.sqlite335 - compileOnly libs.intellij.ideImpl + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/dialects/sqlite/json-module/build.gradle b/dialects/sqlite/json-module/build.gradle index b3368f35fdc..ce281e2078c 100644 --- a/dialects/sqlite/json-module/build.gradle +++ b/dialects/sqlite/json-module/build.gradle @@ -13,13 +13,14 @@ grammarKit { dependencies { api projects.sqldelightCompiler.dialect - compileOnly libs.intellij.ideImpl + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } testImplementation projects.dialects.sqlite318 - testImplementation(libs.intellij.ideImpl) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core testImplementation libs.junit testImplementation libs.truth testImplementation(libs.sqlPsiTestFixtures) { diff --git a/gradle/gradle-mvn-push.gradle b/gradle/gradle-mvn-push.gradle index 2f4af794a9b..3519967f9ae 100644 --- a/gradle/gradle-mvn-push.gradle +++ b/gradle/gradle-mvn-push.gradle @@ -19,3 +19,8 @@ publishing { } } } + +tasks.withType(AbstractArchiveTask).configureEach { + setPreserveFileTimestamps false + setReproducibleFileOrder true +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d2c586723bd..9234e3b57b9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -49,7 +49,9 @@ moshiCodegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version = " intellij-core = { module = "com.jetbrains.intellij.platform:core", version.ref = "idea" } intellij-coreImpl = { module = "com.jetbrains.intellij.platform:core-impl", version.ref = "idea" } -intellij-core-ui = { module = "com.jetbrains.intellij.platform:core-ui", version.ref = "idea" } +intellij-coreUi = { module = "com.jetbrains.intellij.platform:core-ui", version.ref = "idea" } +intellij-ide = { module = "com.jetbrains.intellij.platform:ide", version.ref = "idea" } +intellij-ideCore = { module = "com.jetbrains.intellij.platform:ide-core", version.ref = "idea" } intellij-ideImpl = { module = "com.jetbrains.intellij.platform:ide-impl", version.ref = "idea" } intellij-testFramework = { module = "com.jetbrains.intellij.platform:test-framework", version.ref = "idea" } intellij-lang = { module = "com.jetbrains.intellij.platform:lang", version.ref = "idea" } @@ -60,6 +62,8 @@ intellij-android = { module = "com.jetbrains.intellij.android:android-adt-ui-mod intellij-projectModel = { module = "com.jetbrains.intellij.platform:project-model", version.ref = "idea" } intellij-projectModelImpl = { module = "com.jetbrains.intellij.platform:project-model-impl", version.ref = "idea" } intellij-utilEx = { module = "com.jetbrains.intellij.platform:util-ex", version.ref = "idea" } +intellij-utilUi = { module = "com.jetbrains.intellij.platform:util-ui", version.ref = "idea" } +intellij-util = { module = "com.jetbrains.intellij.platform:util", version.ref = "idea" } jna = { module = "net.java.dev.jna:jna", version = "5.13.0" } diff --git a/sample/settings.gradle b/sample/settings.gradle index 328a9686f81..167b10179e8 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -64,6 +64,8 @@ includeBuild('..') { substitute module("app.cash.sqldelight:runtime-jvm") using project(":runtime") substitute module("app.cash.sqldelight:gradle-plugin") using project(":sqldelight-gradle-plugin") substitute module("app.cash.sqldelight:sqlite-3-18-dialect") using project(":dialects:sqlite-3-18") + substitute module("app.cash.sqldelight:compiler-env") using project(":sqldelight-compiler:environment") + substitute module("app.cash.sqldelight:migration-env") using project(":sqlite-migrations:environment") substitute module("app.cash.sqldelight:async-extensions") using project(":extensions:async-extensions") } } diff --git a/settings.gradle b/settings.gradle index c922289ae54..87669153d81 100644 --- a/settings.gradle +++ b/settings.gradle @@ -56,8 +56,10 @@ include ':extensions:rxjava3-extensions' include ':runtime' include ':sqldelight-compiler' include ':sqldelight-compiler:dialect' +include ':sqldelight-compiler:environment' include ':sqldelight-compiler:integration-tests' include ':sqldelight-gradle-plugin' include ':sqldelight-idea-plugin' include ':sqlite-migrations' +include ':sqlite-migrations:environment' include ':test-util' diff --git a/sqldelight-compiler/build.gradle b/sqldelight-compiler/build.gradle index a1cf05fc286..bb96ce04eca 100644 --- a/sqldelight-compiler/build.gradle +++ b/sqldelight-compiler/build.gradle @@ -25,21 +25,21 @@ grammarKit { } dependencies { - api libs.sqlPsi api projects.sqldelightCompiler.dialect - implementation libs.kotlinPoet implementation libs.jgrapht compileOnly libs.sqliteJdbc - compileOnly libs.intellij.testFramework + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } testImplementation libs.burst testImplementation libs.sqliteJdbc - testImplementation (libs.intellij.testFramework) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + testImplementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - testImplementation libs.kotlin.coroutines.core + testImplementation libs.kotlin.test.junit testImplementation libs.truth testImplementation projects.testUtil diff --git a/sqldelight-compiler/dialect/build.gradle b/sqldelight-compiler/dialect/build.gradle index 211777667a6..b4792af79b2 100644 --- a/sqldelight-compiler/dialect/build.gradle +++ b/sqldelight-compiler/dialect/build.gradle @@ -9,8 +9,9 @@ dependencies { api libs.sqlPsi api libs.kotlinPoet - compileOnly libs.intellij.coreImpl - compileOnly libs.intellij.utilEx + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" + } } apply from: "$rootDir/gradle/gradle-mvn-push.gradle" diff --git a/sqldelight-compiler/environment/build.gradle b/sqldelight-compiler/environment/build.gradle new file mode 100644 index 00000000000..96b82bdd866 --- /dev/null +++ b/sqldelight-compiler/environment/build.gradle @@ -0,0 +1,151 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.shadow) + alias(libs.plugins.publish) + id("app.cash.sqldelight.toolchain.compiler") +} + +dependencies { + shadow(libs.intellij.core) { + transitive = true + } + shadow(libs.intellij.analysis) { + // Only shade the minimum IntelliJ libs. + transitive = false + } + shadow(libs.intellij.lang) { + transitive = false + } + shadow(libs.intellij.coreImpl) { + transitive = false + } + shadow(libs.intellij.coreUi) { + transitive = false + } + shadow(libs.intellij.projectModel) { + transitive = false + } + shadow(libs.intellij.projectModelImpl) { + transitive = false + } + shadow(libs.intellij.analysisImpl) { + transitive = false + } + shadow(libs.intellij.testFramework) { + transitive = false + } + shadow(libs.intellij.langImpl) { + transitive = false + } + shadow(libs.intellij.ide) { + transitive = false + } + shadow(libs.intellij.ideCore) { + transitive = false + } + shadow(libs.intellij.ideImpl) { + transitive = false + } + shadow(libs.intellij.util) { + transitive = false + } + shadow(libs.intellij.utilUi) { + transitive = false + } + shadow(libs.intellij.utilEx) { + transitive = false + } +} + +tasks.named("jar") { + // shadowjar overwrites the normal jar, this overlapping outputs are not cacheable. + // and we don't need the non shaded jar. + enabled = false +} + +tasks.named("shadowJar") { + archiveClassifier.set("") + configurations = [project.configurations.shadow] + + /** + Before minimizing + Total dependencies size: 66,93 Mb + + lang-impl-222.4459.24.jar 19.057,84 kb + ide-impl-222.4459.24.jar 18.642,82 kb + intellij-deps-fastutil-8.5.8-11.jar 3.945,56 kb + ide-222.4459.24.jar 3.860,40 kb + util-222.4459.24.jar 2.385,63 kb + + After minimizing: 43 MB, mostly due to minimizing ide-impl + */ + minimize { + // Needed for MockProject and MockModule. + exclude(dependency(libs.intellij.testFramework.get())) + + // Needed for general utils like PsiTreeUtil. + exclude(dependency(libs.intellij.util.get())) + + // Base intellij platform. + exclude(dependency(libs.intellij.core.get())) + exclude(dependency(libs.intellij.coreImpl.get())) + + // Base required language support. + exclude(dependency(libs.intellij.lang.get())) + exclude(dependency(libs.intellij.langImpl.get())) + + // Base required analysis support, like resolve references. + exclude(dependency(libs.intellij.analysis.get())) + exclude(dependency(libs.intellij.analysisImpl.get())) + + // Needed for resolving files and the file index. + exclude(dependency(libs.intellij.projectModel.get())) + exclude(dependency(libs.intellij.projectModelImpl.get())) + + // Don't minimize coroutines support. + exclude(dependency(libs.intellij.utilEx.get())) + + // Needed for Icon support. + exclude(dependency(libs.intellij.utilUi.get())) + } + + include '*.jar' + include '**/*.class' + include "misc/*.properties" + include 'messages/*.properties' + include "org/intellij/**" + include "com/intellij/**" + include "org/picocontainer/**" + include "it/unimi/**" + include "org/jdom/**" + include "com/github/benmanes/**" + include "kotlinx/**" + + exclude '/kotlin/**' +} + +// Remove useless and bloated dependencies not require to run the sqldelight compiler. +configurations.shadow { + exclude(group: "com.jetbrains.rd") + exclude(group: "com.github.jetbrains", module: "jetCheck") + exclude(group: "com.jetbrains.intellij.platform", module: "wsl-impl") + exclude(group: "com.jetbrains.intellij.platform", module: "util-xml-dom") + exclude(group: "com.jetbrains.intellij.platform", module: "util-text-matching") + exclude(group: "com.jetbrains.intellij.platform", module: "util-diff") + exclude(group: "com.fasterxml", module: "aalto-xml") + exclude(group: "com.jetbrains.infra") + exclude(group: "org.roaringbitmap") + exclude(group: "ai.grazie.spell") + exclude(group: "ai.grazie.model") + exclude(group: "ai.grazie.utils") + exclude(group: "ai.grazie.nlp") +} + +configurations { + [apiElements, runtimeElements].each { + it.outgoing.artifacts.removeIf { it.buildDependencies.getDependencies(null).contains(jar) } + it.outgoing.artifact(shadowJar) + } +} + +apply from: "$rootDir/gradle/gradle-mvn-push.gradle" diff --git a/sqldelight-compiler/environment/gradle.properties b/sqldelight-compiler/environment/gradle.properties new file mode 100644 index 00000000000..2fd8cc647ce --- /dev/null +++ b/sqldelight-compiler/environment/gradle.properties @@ -0,0 +1,3 @@ +POM_ARTIFACT_ID=compiler-env +POM_NAME=SQLDelight Compiler Environment +POM_DESCRIPTION=IntelliJ compiler environment for SQLDelight diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/SqlDelightPropertiesFile.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/SqlDelightPropertiesFile.kt index f94377b591c..09b6515b34c 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/SqlDelightPropertiesFile.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/SqlDelightPropertiesFile.kt @@ -23,7 +23,6 @@ val MINIMUM_SUPPORTED_VERSION = "2.0.0" interface SqlDelightPropertiesFile : Serializable { val databases: List val dialectJars: Collection - val moduleJars: Collection val minimumSupportedVersion: String val currentVersion: String } diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFile.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFile.kt index 0398f5cddbf..b11cf634a25 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFile.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFile.kt @@ -8,7 +8,7 @@ class MigrationFile( viewProvider: FileViewProvider, ) : SqlDelightFile(viewProvider, MigrationLanguage) { val version: Int by lazy { - name.substringBeforeLast(".${MigrationFileType.EXTENSION}") + name.substringBeforeLast(".$MIGRATION_EXTENSION") .filter { it in '0'..'9' }.toIntOrNull() ?: 0 } diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFileType.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFileType.kt index 476902188ff..2b099d6b0fe 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFileType.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/MigrationFileType.kt @@ -3,13 +3,13 @@ package app.cash.sqldelight.core.lang import com.intellij.icons.AllIcons import com.intellij.openapi.fileTypes.LanguageFileType +const val MIGRATION_EXTENSION = "sqm" + object MigrationFileType : LanguageFileType(MigrationLanguage) { private val ICON = AllIcons.Providers.Sqlite - const val EXTENSION = "sqm" - override fun getName() = "SqlDelight Migration" override fun getDescription() = "SqlDelight Migration" - override fun getDefaultExtension() = EXTENSION + override fun getDefaultExtension() = MIGRATION_EXTENSION override fun getIcon() = ICON } diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFile.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFile.kt index 9dc92d6b579..33766757233 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFile.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFile.kt @@ -80,7 +80,7 @@ abstract class SqlDelightFile( val manager = PsiManager.getInstance(project) var result: SqlFileBase? = null val folders = SqlDelightFileIndex.getInstance(module).sourceFolders(virtualFile ?: return null) - folders.forEach { dir -> + for (dir in folders) { VfsUtilCore.iterateChildrenRecursively( dir, { it.isDirectory || it.fileType == DatabaseFileType }, @@ -90,11 +90,10 @@ abstract class SqlDelightFile( val vFile = (manager.findViewProvider(file) as? DatabaseFileViewProvider)?.getSchemaFile() ?: return@iterateChildrenRecursively true - manager.findFile(vFile)?.let { psiFile -> - if (psiFile is SqlFileBase) { - result = psiFile - return@iterateChildrenRecursively false - } + val psiFile = manager.findFile(vFile) + if (psiFile != null && psiFile is SqlFileBase) { + result = psiFile + return@iterateChildrenRecursively false } return@iterateChildrenRecursively true diff --git a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFileType.kt b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFileType.kt index b6f2527e2eb..17ce90549e0 100644 --- a/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFileType.kt +++ b/sqldelight-compiler/src/main/kotlin/app/cash/sqldelight/core/lang/SqlDelightFileType.kt @@ -18,14 +18,15 @@ package app.cash.sqldelight.core.lang import com.intellij.icons.AllIcons import com.intellij.openapi.fileTypes.LanguageFileType +const val SQLDELIGHT_EXTENSION = "sq" + object SqlDelightFileType : LanguageFileType(SqlDelightLanguage) { private val ICON = AllIcons.Providers.Sqlite - const val EXTENSION = "sq" const val FOLDER_NAME = "sqldelight" override fun getName() = "SqlDelight" override fun getDescription() = "SqlDelight" - override fun getDefaultExtension() = EXTENSION + override fun getDefaultExtension() = SQLDELIGHT_EXTENSION override fun getIcon() = ICON } diff --git a/sqldelight-gradle-plugin/build.gradle b/sqldelight-gradle-plugin/build.gradle index 65b24930980..615282ca206 100644 --- a/sqldelight-gradle-plugin/build.gradle +++ b/sqldelight-gradle-plugin/build.gradle @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.konan.target.HostManager plugins { alias(libs.plugins.kotlin.jvm) - alias(libs.plugins.shadow) alias(libs.plugins.publish) alias(libs.plugins.dokka) id("java-gradle-plugin") @@ -35,54 +34,21 @@ gradlePlugin { testSourceSets(sourceSets.test, sourceSets.dockerTest, sourceSets.grammarkitTest) } -configurations { - shade -} -configurations.compileOnly.extendsFrom(configurations.shade) dependencies { - api(libs.sqlPsi) { - exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' + api projects.sqldelightCompiler + compileOnly(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - implementation libs.sqliteJdbc - implementation libs.objectDiff - implementation libs.schemaCrawler.tools - implementation libs.schemaCrawler.sqlite - implementation projects.sqliteMigrations - api projects.sqldelightCompiler - // Only shade the minimum IntelliJ libs. - shade libs.intellij.core - // Analysis has no dependencies. - shade libs.intellij.analysis - shade (libs.intellij.lang) { - transitive = false - } - shade(libs.intellij.coreImpl) { - transitive = false - } - shade(libs.intellij.projectModel) { - transitive = false - } - shade(libs.intellij.projectModelImpl) { - transitive = false - } - shade(libs.intellij.analysisImpl) { - transitive = false - } - shade(libs.intellij.testFramework) { - transitive = false - } - shade(libs.intellij.langImpl) { - transitive = false + compileOnly(projects.sqliteMigrations.environment) { + targetConfiguration = "shadow" } implementation libs.kotlin.plugin compileOnly libs.android.plugin - implementation libs.jna - testImplementation libs.junit testImplementation libs.truth testImplementation libs.testParameterInjector @@ -114,6 +80,8 @@ tasks.named('test') { ":sqldelight-gradle-plugin:publishAllPublicationsToInstallLocallyRepository", ":extensions:async-extensions:publishAllPublicationsToInstallLocallyRepository", ":extensions:coroutines-extensions:publishAllPublicationsToInstallLocallyRepository", + ":sqldelight-compiler:environment:publishAllPublicationsToInstallLocallyRepository", + ":sqlite-migrations:environment:publishAllPublicationsToInstallLocallyRepository", ) if (HostManager.hostIsMac) { dependsOn( @@ -155,6 +123,8 @@ tasks.named('dockerTest') { ":sqldelight-gradle-plugin:publishAllPublicationsToInstallLocallyRepository", ":drivers:r2dbc-driver:publishAllPublicationsToInstallLocallyRepository", ":extensions:async-extensions:publishAllPublicationsToInstallLocallyRepository", + ":sqldelight-compiler:environment:publishAllPublicationsToInstallLocallyRepository", + ":sqlite-migrations:environment:publishAllPublicationsToInstallLocallyRepository", ) environment("ORG_GRADLE_PROJECT_sqldelightVersion", project.version) } @@ -170,6 +140,8 @@ tasks.named("grammarkitTest") { ":sqlite-migrations:publishAllPublicationsToInstallLocallyRepository", ":sqldelight-compiler:publishAllPublicationsToInstallLocallyRepository", ":sqldelight-gradle-plugin:publishAllPublicationsToInstallLocallyRepository", + ":sqldelight-compiler:environment:publishAllPublicationsToInstallLocallyRepository", + ":sqlite-migrations:environment:publishAllPublicationsToInstallLocallyRepository", ) javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(17) @@ -181,34 +153,4 @@ tasks.named('validatePlugins') { enableStricterValidation = true } -tasks.named("shadowJar") { - archiveClassifier.set("") - configurations = [project.configurations.shade] - - minimize { - exclude(dependency(libs.intellij.testFramework.get())) - exclude(dependency(libs.intellij.langImpl.get())) - } - - include '*.jar' - include '**/*.class' - include 'META-INF/gradle-plugins/*' - include "misc/*.properties" - include 'messages/*.properties' - include "org/intellij/**" - include "com/intellij/**" - include "org/picocontainer/**" - include "it/unimi/**" - include "org/jdom/**" - include "com/github/benmanes/**" - - exclude '/groovy**' - exclude '/kotlin/**' -} - -artifacts { - runtimeOnly(tasks.named('shadowJar')) - archives(tasks.named('shadowJar')) -} - apply from: "$rootDir/gradle/gradle-mvn-push.gradle" diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/PropertiesImpl.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/PropertiesImpl.kt index 02ba5e30118..0ff5fa4961d 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/PropertiesImpl.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/PropertiesImpl.kt @@ -15,7 +15,6 @@ data class SqlDelightPropertiesFileImpl( override val dialectJars: Collection, override val minimumSupportedVersion: String, override val currentVersion: String, - override val moduleJars: Collection = emptySet(), ) : SqlDelightPropertiesFile data class SqlDelightDatabasePropertiesImpl( diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt index f1369bb53e8..a61292bbc29 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt @@ -2,8 +2,8 @@ package app.cash.sqldelight.gradle import app.cash.sqldelight.VERSION import app.cash.sqldelight.core.capitalize -import app.cash.sqldelight.core.lang.MigrationFileType -import app.cash.sqldelight.core.lang.SqlDelightFileType +import app.cash.sqldelight.core.lang.MIGRATION_EXTENSION +import app.cash.sqldelight.core.lang.SQLDELIGHT_EXTENSION import app.cash.sqldelight.gradle.kotlin.Source import app.cash.sqldelight.gradle.kotlin.sources import app.cash.sqldelight.gradle.squash.MigrationSquashTask @@ -12,6 +12,7 @@ import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.FileCollection import org.gradle.api.internal.catalog.DelegatingProjectDependency import org.gradle.api.provider.Property import org.gradle.api.provider.Provider @@ -40,15 +41,22 @@ abstract class SqlDelightDatabase @Inject constructor( isVisible = false } - internal val moduleConfiguration = project.configurations.create("${name}ModuleClasspath").apply { + private val intellijEnv = project.configurations.create("${name}IntellijEnv").apply { isCanBeConsumed = false isVisible = false + dependencies.add(project.dependencies.create("app.cash.sqldelight:compiler-env:$VERSION")) + } + + private val migrationEnv = project.configurations.create("${name}MigrationEnv").apply { + isCanBeConsumed = false + isVisible = false + dependencies.add(project.dependencies.create("app.cash.sqldelight:migration-env:$VERSION")) } internal var addedDialect: Boolean = false fun module(module: Any) { - moduleConfiguration.dependencies.add(project.dependencies.create(module)) + configuration.dependencies.add(project.dependencies.create(module)) } fun dialect(dialect: Any) { @@ -213,13 +221,12 @@ abstract class SqlDelightDatabase @Inject constructor( it.compilationUnit = getProperties().compilationUnits.single { it.name == source.name } it.outputDirectory = source.outputDir it.source(sourceFiles) - it.include("**${File.separatorChar}*.${SqlDelightFileType.defaultExtension}") - it.include("**${File.separatorChar}*.${MigrationFileType.defaultExtension}") + it.include("**${File.separatorChar}*.$SQLDELIGHT_EXTENSION") + it.include("**${File.separatorChar}*.$MIGRATION_EXTENSION") it.group = SqlDelightPlugin.GROUP it.description = "Generate ${source.name} Kotlin interface for $name" it.verifyMigrations = verifyMigrations.get() - it.classpath.setFrom(configuration.fileCollection { true }) - it.classpath.from(moduleConfiguration.fileCollection { true }) + it.classpath.setFrom(intellijEnv, migrationEnv, configuration) } val outputDirectoryProvider: Provider = task.map { it.outputDirectory!! } @@ -227,7 +234,7 @@ abstract class SqlDelightDatabase @Inject constructor( // Add the source dependency on the generated code. // Use a Provider generated from the task to carry task dependencies // See https://github.com/cashapp/sqldelight/issues/2119 - source.sourceDirectorySet.srcDir(outputDirectoryProvider) + source.sourceDirectorySet.srcDir(task) // And register the output directory to the IDE if needed source.registerGeneratedDirectory?.invoke(outputDirectoryProvider) @@ -236,21 +243,21 @@ abstract class SqlDelightDatabase @Inject constructor( } if (!deriveSchemaFromMigrations.get()) { - addMigrationTasks(sourceFiles.files, source) + addMigrationTasks(sourceFiles, source) } if (deriveSchemaFromMigrations.get()) { - addSquashTask(sourceFiles.files, source) + addSquashTask(sourceFiles, source) } if (migrationOutputDirectory.getOrNull() != null) { - addMigrationOutputTasks(sourceFiles.files, source) + addMigrationOutputTasks(sourceFiles, source) } } } private fun addMigrationTasks( - sourceSet: Collection, + sourceSet: FileCollection, source: Source, ) { val verifyMigrationTask = @@ -258,15 +265,14 @@ abstract class SqlDelightDatabase @Inject constructor( it.projectName.set(project.name) it.compilationUnit = getProperties().compilationUnits.single { it.name == source.name } it.source(sourceSet) - it.include("**${File.separatorChar}*.${SqlDelightFileType.defaultExtension}") - it.include("**${File.separatorChar}*.${MigrationFileType.defaultExtension}") + it.include("**${File.separatorChar}*.$SQLDELIGHT_EXTENSION") + it.include("**${File.separatorChar}*.$MIGRATION_EXTENSION") it.workingDirectory = File(project.buildDir, "sqldelight/migration_verification/${source.name.capitalize()}$name") it.group = SqlDelightPlugin.GROUP it.description = "Verify ${source.name} $name migrations and CREATE statements match." it.properties = getProperties() it.verifyMigrations = verifyMigrations.get() - it.classpath.setFrom(configuration.fileCollection { true }) - it.classpath.from(moduleConfiguration.fileCollection { true }) + it.classpath.setFrom(intellijEnv, migrationEnv, configuration) } if (schemaOutputDirectory.getOrNull() != null) { @@ -275,14 +281,13 @@ abstract class SqlDelightDatabase @Inject constructor( it.compilationUnit = getProperties().compilationUnits.single { it.name == source.name } it.outputDirectory = schemaOutputDirectory.get().asFile it.source(sourceSet) - it.include("**${File.separatorChar}*.${SqlDelightFileType.defaultExtension}") - it.include("**${File.separatorChar}*.${MigrationFileType.defaultExtension}") + it.include("**${File.separatorChar}*.$SQLDELIGHT_EXTENSION") + it.include("**${File.separatorChar}*.$MIGRATION_EXTENSION") it.group = SqlDelightPlugin.GROUP it.description = "Generate a .db file containing the current $name schema for ${source.name}." it.properties = getProperties() it.verifyMigrations = verifyMigrations.get() - it.classpath.setFrom(configuration.fileCollection { true }) - it.classpath.from(moduleConfiguration.fileCollection { true }) + it.classpath.setFrom(intellijEnv, migrationEnv, configuration) } } project.tasks.named("check").configure { @@ -294,38 +299,36 @@ abstract class SqlDelightDatabase @Inject constructor( } private fun addMigrationOutputTasks( - sourceSet: Collection, + sourceSet: FileCollection, source: Source, ) { project.tasks.register("generate${source.name.capitalize()}${name}Migrations", GenerateMigrationOutputTask::class.java) { it.projectName.set(project.name) it.compilationUnit = getProperties().compilationUnits.single { it.name == source.name } it.source(sourceSet) - it.include("**${File.separatorChar}*.${MigrationFileType.defaultExtension}") + it.include("**${File.separatorChar}*.$MIGRATION_EXTENSION") it.migrationOutputExtension = migrationOutputFileFormat.get() it.outputDirectory = migrationOutputDirectory.get().asFile it.group = SqlDelightPlugin.GROUP it.description = "Generate valid sql migration files for ${source.name} $name." it.properties = getProperties() - it.classpath.setFrom(configuration.fileCollection { true }) - it.classpath.from(moduleConfiguration.fileCollection { true }) + it.classpath.setFrom(intellijEnv, configuration) } } private fun addSquashTask( - sourceSet: Collection, + sourceSet: FileCollection, source: Source, ) { project.tasks.register("squash${source.name.capitalize()}${name}Migrations", MigrationSquashTask::class.java) { it.projectName.set(project.name) it.compilationUnit = getProperties().compilationUnits.single { it.name == source.name } it.source(sourceSet) - it.include("**${File.separatorChar}*.${MigrationFileType.defaultExtension}") + it.include("**${File.separatorChar}*.$MIGRATION_EXTENSION") it.group = SqlDelightPlugin.GROUP it.description = "Squash migrations into a single file for ${source.name} $name." it.properties = getProperties() - it.classpath.setFrom(configuration.fileCollection { true }) - it.classpath.from(moduleConfiguration.fileCollection { true }) + it.classpath.setFrom(intellijEnv, configuration) } } diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt index 928714651e2..555abc073ae 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightPlugin.kt @@ -170,7 +170,6 @@ abstract class SqlDelightPlugin : Plugin { currentVersion = VERSION, minimumSupportedVersion = MINIMUM_SUPPORTED_VERSION, dialectJars = databases.first().configuration.files, - moduleJars = databases.first().moduleConfiguration.files, ) } } diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/VerifyMigrationTask.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/VerifyMigrationTask.kt index 36b17d136aa..d2357f87afc 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/VerifyMigrationTask.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/VerifyMigrationTask.kt @@ -13,6 +13,7 @@ import app.cash.sqlite.migrations.ObjectDifferDatabaseComparator import app.cash.sqlite.migrations.findDatabaseFiles import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.FileTree +import org.gradle.api.file.RegularFileProperty import org.gradle.api.logging.Logging import org.gradle.api.provider.MapProperty import org.gradle.api.provider.Property @@ -65,22 +66,16 @@ abstract class VerifyMigrationTask : SqlDelightWorkerTask() { @TaskAction fun verifyMigrations() { - runCatching { - val workQueue = workQueue() - workQueue.submit(VerifyMigrationAction::class.java) { - it.workingDirectory.set(workingDirectory) - it.projectName.set(projectName) - it.properties.set(properties) - it.verifyMigrations.set(verifyMigrations) - it.compilationUnit.set(compilationUnit) - it.verifyDefinitions.set(verifyDefinitions) - it.driverProperties.set(driverProperties.get()) - } - workQueue.await() - }.onSuccess { - getDummyOutputFile().createNewFile() - }.onFailure { - throw it + val workQueue = workQueue() + workQueue.submit(VerifyMigrationAction::class.java) { + it.workingDirectory.set(workingDirectory) + it.projectName.set(projectName) + it.properties.set(properties) + it.verifyMigrations.set(verifyMigrations) + it.compilationUnit.set(compilationUnit) + it.verifyDefinitions.set(verifyDefinitions) + it.driverProperties.set(driverProperties.get()) + it.outputFile.set(getDummyOutputFile()) } } @@ -100,6 +95,7 @@ abstract class VerifyMigrationTask : SqlDelightWorkerTask() { val verifyMigrations: Property val verifyDefinitions: Property val driverProperties: MapProperty + val outputFile: RegularFileProperty } abstract class VerifyMigrationAction : WorkAction { @@ -141,6 +137,7 @@ abstract class VerifyMigrationTask : SqlDelightWorkerTask() { } checkForGaps() + parameters.outputFile.get().asFile.createNewFile() } private fun createCurrentDb(): CatalogDatabase { diff --git a/sqldelight-gradle-plugin/src/test/custom-dialect/dialect/build.gradle b/sqldelight-gradle-plugin/src/test/custom-dialect/dialect/build.gradle index c1934809bfc..1f61f0b794b 100644 --- a/sqldelight-gradle-plugin/src/test/custom-dialect/dialect/build.gradle +++ b/sqldelight-gradle-plugin/src/test/custom-dialect/dialect/build.gradle @@ -4,5 +4,5 @@ plugins { dependencies { api "app.cash.sqldelight:sqlite-3-18-dialect:${app.cash.sqldelight.VersionKt.VERSION}" - compileOnly libs.intellij.coreImpl + compileOnly "app.cash.sqldelight:compiler-env:${app.cash.sqldelight.VersionKt.VERSION}" } diff --git a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/IntegrationTest.kt b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/IntegrationTest.kt index f1ce826f93a..14f45cdd863 100644 --- a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/IntegrationTest.kt +++ b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/integrations/IntegrationTest.kt @@ -241,6 +241,7 @@ class IntegrationTest { val runner = GradleRunner.create() .withCommonConfiguration(integrationRoot) .withArguments("clean", "test", "--stacktrace") + .withDebug(true) val result = runner.build() assertThat(result.output).contains("BUILD SUCCESSFUL") diff --git a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt index 1b115ce48a4..b9da26e3fb1 100644 --- a/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt +++ b/sqldelight-gradle-plugin/src/test/kotlin/app/cash/sqldelight/tests/MigrationTest.kt @@ -40,6 +40,7 @@ class MigrationTest { val output = GradleRunner.create() .withCommonConfiguration(File("src/test/migration-driver-initializer")) .withArguments("clean", "verifyMainDatabaseMigration", "--stacktrace") + .withDebug(true) .build() assertThat(output.output).contains("DriverInitializerImpl executed!") diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/gradle/FileIndexMap.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/gradle/FileIndexMap.kt index 25e091bb8af..a42f3527951 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/gradle/FileIndexMap.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/gradle/FileIndexMap.kt @@ -120,7 +120,7 @@ internal class FileIndexMap { val pluginDescriptor = PluginManagerCore.getPlugin(PluginId.getId("com.squareup.sqldelight"))!! val shouldInvalidate = pluginDescriptor.addDialect( - (value!!.dialectJars + value.moduleJars).map { it.toURI() }, + value!!.dialectJars.map { it.toURI() }, ) val database = value.databases.first() diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt index 01f8effcaa3..0b34b2c67da 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/inspections/UnusedColumnInspection.kt @@ -110,7 +110,7 @@ internal class UnusedColumnInspection : LocalInspectionTool() { |) """.trimMargin() val dummyFile = factory.createFileFromText( - "_Dummy_.${SqlDelightFileType.EXTENSION}", + "_Dummy_.${app.cash.sqldelight.core.lang.SQLDELIGHT_EXTENSION}", SqlDelightFileType, createTableStmt, ) diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightImportOptimizer.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightImportOptimizer.kt index bed1d0da18f..f206b9eaffe 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightImportOptimizer.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/lang/SqlDelightImportOptimizer.kt @@ -31,7 +31,7 @@ class SqlDelightImportOptimizer : ImportOptimizer { .joinToString("\n") val factory = PsiFileFactory.getInstance(file.project) val dummyFile = factory.createFileFromText( - "_Dummy_.${SqlDelightFileType.EXTENSION}", + "_Dummy_.${app.cash.sqldelight.core.lang.SQLDELIGHT_EXTENSION}", SqlDelightFileType, remainingImports, ) diff --git a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/refactoring/SqlDelightSuggestedRefactoringExecution.kt b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/refactoring/SqlDelightSuggestedRefactoringExecution.kt index 220aeacb384..4d284d9f719 100644 --- a/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/refactoring/SqlDelightSuggestedRefactoringExecution.kt +++ b/sqldelight-idea-plugin/src/main/kotlin/app/cash/sqldelight/intellij/refactoring/SqlDelightSuggestedRefactoringExecution.kt @@ -166,7 +166,7 @@ internal class SqlDelightSuggestedRefactoringExecution { } private fun Project.createMigrationFile(migration: String, version: Int): MigrationFile { - val fileName = "$version.${MigrationFileType.EXTENSION}" + val fileName = "$version.${app.cash.sqldelight.core.lang.MIGRATION_EXTENSION}" return PsiFileFactory.getInstance(this) .createFileFromText(fileName, MigrationFileType, migration) as MigrationFile } diff --git a/sqlite-migrations/build.gradle b/sqlite-migrations/build.gradle index dcc262672cd..02b9bc7133c 100644 --- a/sqlite-migrations/build.gradle +++ b/sqlite-migrations/build.gradle @@ -7,12 +7,11 @@ plugins { dependencies { // These dependencies will not be shadowed by sqldelight-gradle-plugin - compileOnly libs.sqliteJdbc - compileOnly libs.objectDiff - compileOnly libs.schemaCrawler.tools - compileOnly libs.schemaCrawler.sqlite + compileOnly(projects.sqliteMigrations.environment) { + targetConfiguration = "shadow" + } - implementation libs.sqlPsi + compileOnly libs.sqlPsi } apply from: "$rootDir/gradle/gradle-mvn-push.gradle" diff --git a/sqlite-migrations/environment/build.gradle b/sqlite-migrations/environment/build.gradle new file mode 100644 index 00000000000..857cd987c06 --- /dev/null +++ b/sqlite-migrations/environment/build.gradle @@ -0,0 +1,33 @@ +plugins { + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.shadow) + alias(libs.plugins.publish) + id("app.cash.sqldelight.toolchain.compiler") +} + +dependencies { + shadow libs.sqliteJdbc + shadow libs.objectDiff + shadow libs.schemaCrawler.tools + shadow libs.schemaCrawler.sqlite +} + +tasks.named("jar", Jar) { + // shadowjar overwrites the normal jar, this overlapping outputs are not cacheable. + // and we don't need the non shaded jar. + enabled = false +} + +tasks.named("shadowJar") { + archiveClassifier.set("") + configurations = [project.configurations.shadow] +} + +configurations { + [apiElements, runtimeElements].each { + it.outgoing.artifacts.removeIf { it.buildDependencies.getDependencies(null).contains(jar) } + it.outgoing.artifact(shadowJar) + } +} + +apply from: "$rootDir/gradle/gradle-mvn-push.gradle" diff --git a/sqlite-migrations/environment/gradle.properties b/sqlite-migrations/environment/gradle.properties new file mode 100644 index 00000000000..fed8defffc5 --- /dev/null +++ b/sqlite-migrations/environment/gradle.properties @@ -0,0 +1,3 @@ +POM_ARTIFACT_ID=migration-env +POM_NAME=SQLDelight Migration Environment +POM_DESCRIPTION=IntelliJ compiler environment for SQLDelight diff --git a/test-util/build.gradle b/test-util/build.gradle index 42cb95e87eb..4578a00e441 100644 --- a/test-util/build.gradle +++ b/test-util/build.gradle @@ -8,9 +8,8 @@ dependencies { api projects.dialects.sqlite318 implementation libs.sqlPsi - implementation(libs.intellij.testFramework) { - exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core" + implementation(projects.sqldelightCompiler.environment) { + targetConfiguration = "shadow" } - implementation libs.kotlin.coroutines.core implementation libs.junit }