Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
run: ./bin/hermit env -r >> $GITHUB_ENV
- name: Test
run: |
gradle clean test --stacktrace
GRADLE_OPTS="-Xmx4g" gradle clean test --stacktrace
- name: Get Test report
uses: actions/upload-artifact@v4
if: always()
Expand All @@ -43,7 +43,7 @@ jobs:
- name: Init Hermit
run: ./bin/hermit env -r >> $GITHUB_ENV
- name: Plugin verification
run: gradle clean verifyPlugin
run: GRADLE_OPTS="-Xmx4g" gradle clean verifyPlugin --info
verify_old:
name: Verify Plugin Against Old Releases
runs-on: ubuntu-latest
Expand All @@ -56,4 +56,4 @@ jobs:
- name: Init Hermit
run: ./bin/hermit env -r >> $GITHUB_ENV
- name: Plugin verification
run: gradle clean verifyPlugin
run: GRADLE_OPTS="-Xmx4g" gradle clean verifyPlugin
20 changes: 12 additions & 8 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ version = project.properties["version"] ?: "1.0-SNAPSHOT"

plugins {
id("java")
kotlin("kapt") version "2.0.21"
id("org.jetbrains.intellij.platform") version "2.3.0"
kotlin("kapt") version "2.2.0"
id("org.jetbrains.intellij.platform") version "2.7.0"

id("org.jetbrains.kotlin.jvm") version "2.0.21"
id("org.jetbrains.kotlin.plugin.serialization") version "2.0.21"
id("org.jetbrains.kotlin.jvm") version "2.2.0"
id("org.jetbrains.kotlin.plugin.serialization") version "2.2.0"
}

// region Build, dependencies
Expand Down Expand Up @@ -57,13 +57,16 @@ val product = products.first { it.releaseType == (System.getenv("RELEASE_TYPE")

val verifyOldVersions = System.getenv("VERIFY_VERSIONS") == "old"

val kotlinVersion = "2.0.21"
val kotlinVersion = "2.2.0"
val arrowVersion = "0.11.0"

dependencies {
intellijPlatform {
intellijIdeaUltimate(product.sdkVersion, useInstaller = false)
pluginVerifier("1.378")
intellijIdeaUltimate(product.sdkVersion) {
useInstaller = false
}
pluginVerifier("1.394")

plugins(
"org.jetbrains.plugins.go:${product.goPluginVersion}"
)
Expand Down Expand Up @@ -98,6 +101,7 @@ kotlin {
tasks {
test {
systemProperty("idea.force.use.core.classloader", "true")
maxHeapSize = "2g"
}
}

Expand Down Expand Up @@ -155,4 +159,4 @@ tasks {
publishPlugin {
token.set(System.getenv("JETBRAINS_TOKEN")) // JETBRAINS_TOKEN env var available in CI
}
}
}
18 changes: 9 additions & 9 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
kotlin.code.style=official

# The latest supported versions. Note, these are updated automatically from update-major-versions.sh
IIC.release.version=251.23774.435
IIC.eap.version=251.17181.16
IIC.release.version=252.23892.409
IIC.eap.version=252.25557.23

IIC.release.go_plugin.version=251.23774.435
IIC.eap.go_plugin.version=251.17181.16
GO.release.version=251.23774.430
GO.eap.version=251.17181.28
# The oldest supported versions.
IIC.from.version=232.10335.12
GO.from.version=232.10335.12
IIC.release.go_plugin.version=252.23892.360
IIC.eap.go_plugin.version=252.25557.23
GO.release.version=252.23892.530
GO.eap.version=252.23892.238
# The oldest supported versions
IIC.from.version=241.14494.240
GO.from.version=241.14494.240
17 changes: 17 additions & 0 deletions src/main/kotlin/com/squareup/cash/hermit/Hermit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,23 @@ object Hermit {
HANDLER_EP_NAME.extensions.forEach {
it.handle(hermitPackage, project)
}

// Fallback for Go packages when the Go plugin handler is not registered
// This can happen when Go plugin dependencies are not properly loaded
if (hermitPackage.type == PackageType.Go) {
val hasGoHandler = HANDLER_EP_NAME.extensions.any {
it.javaClass.simpleName == "HermitGoEnvUpdater"
}
if (!hasGoHandler) {
try {
val updaterClass = Class.forName("com.squareup.cash.hermit.goland.HermitGoEnvUpdater")
val updater = updaterClass.getDeclaredConstructor().newInstance() as HermitPropertyHandler
updater.handle(hermitPackage, project)
} catch (e: Exception) {
log.debug("Go plugin handler not available: ${e.message}")
}
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,12 @@ class HermitDynamicPluginListener : DynamicPluginListener {
projects.forEach { Hermit(it).open() }
}
}

override fun pluginsLoaded() {
// Empty implementation for compatibility
}

override fun beforePluginsLoaded() {
// Empty implementation for compatibility
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ fun Project.isTrustedForHermit(): ThreeState {
return ThreeState.UNSURE
}

return ThreeState.fromBoolean(result)
return if (result) ThreeState.YES else ThreeState.NO
} catch (e: Exception) {
when(e) {
is ClassNotFoundException,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.intellij.openapi.project.Project
import com.squareup.cash.hermit.HermitPackage

fun HermitPackage.setSdk(project: Project): GoSdk {
val new = GoSdkImpl(this.goURL(), this.version, this.path + "/src/runtime/internal/sys/zversion.go")
val new = GoSdkImpl(this.goURL(), this.version, null)
GoSdkService.getInstance(project).setSdk(new)
return new
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,26 @@ class HermitGoEnvUpdater : HermitPropertyHandler {

override fun handle(hermitPackage: HermitPackage, project: Project) {
if (hermitPackage.type == PackageType.Go) {
val sdkService = GoSdkService.getInstance(project);
val sdk = sdkService.getSdk(null);
try {
val sdkService = GoSdkService.getInstance(project);
val sdk = sdkService.getSdk(null);

if (
hermitPackage.version != sdk.version
|| hermitPackage.goURL() != sdk.homeUrl
// If the current sdk has the same version,but it was not available before Hermit downloaded it,
// set it again to force re-indexing, and marking it as a valid one
|| !sdk.isValid
) {
log.debug("setting project (" + project.name + ") GoSDK to " + hermitPackage.logString())
UI.showInfo(project, "Hermit", "Switching to SDK ${hermitPackage.displayName()}")
hermitPackage.setSdk(project)
if (
sdk.homeUrl.isEmpty()
|| hermitPackage.version != sdk.version
|| hermitPackage.goURL() != sdk.homeUrl
// If the current sdk has the same version,but it was not available before Hermit downloaded it,
// set it again to force re-indexing, and marking it as a valid one
|| !sdk.isValid
) {
log.debug("setting project (" + project.name + ") GoSDK to " + hermitPackage.logString())
UI.showInfo(project, "Hermit", "Switching to SDK ${hermitPackage.displayName()}")
hermitPackage.setSdk(project)
}
} catch (e: Exception) {
log.warn("Failed to update Go SDK - Go plugin may not be properly loaded: ${e.message}")
// This can happen when Go plugin dependencies are not met (e.g., missing Ultimate modules)
// The plugin should continue to work for other features even if Go SDK management fails
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,20 @@ class HermitGradleExecutionAware: GradleExecutionAware {
}
}

override fun getBuildLayoutParameters(project: Project, projectPath: String): BuildLayoutParameters? = null
@ApiStatus.OverrideOnly
override fun getBuildLayoutParameters(project: Project, projectPath: java.nio.file.Path): BuildLayoutParameters? {
return null
}


override fun getDefaultBuildLayoutParameters(project: Project): BuildLayoutParameters? = null

override fun isGradleInstallationHomeDir(project: Project, homePath: String): Boolean = false
// Newer API with Path parameter
@ApiStatus.OverrideOnly
override fun isGradleInstallationHomeDir(project: Project, homePath: java.nio.file.Path): Boolean {
return false
}


companion object {
const val TIMEOUT_MS = 120000
Expand Down
Loading