Skip to content

Commit 64725b8

Browse files
reid-spencerclaude
andcommitted
Fix AnalysisResult for Scala Native cross-compilation
Replace java.util.UUID and java.time.Instant with cross-platform alternatives (AtomicLong counter + currentTimeMillis). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 6851047 commit 64725b8

2 files changed

Lines changed: 13 additions & 13 deletions

File tree

passes/jvm-native/src/test/scala/com/ossuminc/riddl/passes/analysis/AnalysisResultSpec.scala

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ package com.ossuminc.riddl.passes.analysis
99
import org.scalatest.wordspec.AnyWordSpec
1010
import org.scalatest.matchers.must.Matchers
1111

12-
import java.time.Instant
13-
1412
class AnalysisResultSpec extends AnyWordSpec with Matchers {
1513

1614
"AnalysisToken" should {
@@ -29,15 +27,15 @@ class AnalysisResultSpec extends AnyWordSpec with Matchers {
2927

3028
"AnalysisMetadata" should {
3129
"capture analysis timestamp" in {
32-
val before = Instant.now()
30+
val before = System.currentTimeMillis()
3331
val metadata = AnalysisMetadata(
34-
analyzedAt = Instant.now(),
32+
analyzedAt = System.currentTimeMillis(),
3533
rootDomainName = Some("TestDomain"),
3634
sourceLocation = None,
3735
sourceHash = None,
3836
riddlVersion = None
3937
)
40-
val after = Instant.now()
38+
val after = System.currentTimeMillis()
4139

4240
metadata.analyzedAt must (be >= before and be <= after)
4341
metadata.rootDomainName mustBe Some("TestDomain")

passes/shared/src/main/scala/com/ossuminc/riddl/passes/analysis/AnalysisResult.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ import com.ossuminc.riddl.passes.stats.{StatsOutput, StatsPass}
2121
import com.ossuminc.riddl.passes.symbols.{SymbolsOutput, SymbolsPass}
2222
import com.ossuminc.riddl.passes.validate.{HandlerCompleteness, ValidationOutput, ValidationPass}
2323

24-
import java.time.Instant
25-
import java.util.UUID
26-
2724
/** Unique token identifying a cached AnalysisResult.
2825
*
2926
* Tokens are opaque handles used by MCP tools to reference previously
@@ -32,8 +29,13 @@ import java.util.UUID
3229
opaque type AnalysisToken = String
3330

3431
object AnalysisToken:
32+
private val counter = new java.util.concurrent.atomic.AtomicLong(0)
33+
3534
/** Generate a new unique token */
36-
def generate(): AnalysisToken = UUID.randomUUID().toString
35+
def generate(): AnalysisToken =
36+
val time = System.currentTimeMillis()
37+
val count = counter.incrementAndGet()
38+
f"$time%x-$count%04x"
3739

3840
/** Create token from string (for deserialization) */
3941
def fromString(s: String): AnalysisToken = s
@@ -43,8 +45,8 @@ end AnalysisToken
4345

4446
/** Metadata about the analysis */
4547
case class AnalysisMetadata(
46-
/** When the analysis was performed */
47-
analyzedAt: Instant,
48+
/** When the analysis was performed (epoch millis) */
49+
analyzedAt: Long,
4850

4951
/** Name of the root domain (primary identifier) */
5052
rootDomainName: Option[String],
@@ -63,7 +65,7 @@ object AnalysisMetadata:
6365
def apply(root: Root): AnalysisMetadata =
6466
val rootDomainName = root.domains.headOption.map(_.id.value)
6567
AnalysisMetadata(
66-
analyzedAt = Instant.now(),
68+
analyzedAt = System.currentTimeMillis(),
6769
rootDomainName = rootDomainName,
6870
sourceLocation = None,
6971
sourceHash = None,
@@ -75,7 +77,7 @@ object AnalysisMetadata:
7577
case root: Root => apply(root)
7678
case other =>
7779
AnalysisMetadata(
78-
analyzedAt = Instant.now(),
80+
analyzedAt = System.currentTimeMillis(),
7981
rootDomainName = Some(other.id.value),
8082
sourceLocation = None,
8183
sourceHash = None,

0 commit comments

Comments
 (0)