Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2025 Apple Inc. and the Swift.org project authors
// Copyright (c) 2026 Apple Inc. and the Swift.org project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
Expand All @@ -27,3 +27,15 @@ public func compareDates(date1: Date, date2: Date) -> Bool {
public func dateFromSeconds(_ seconds: Double) -> Date {
Date(timeIntervalSince1970: seconds)
}

public func echoUUID(_ uuid: UUID) -> UUID {
uuid
}

public func makeUUID() -> UUID {
UUID()
}

public func echoURL(_ url: URL) -> URL {
url
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2025 Apple Inc. and the Swift.org project authors
// Copyright (c) 2026 Apple Inc. and the Swift.org project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
Expand All @@ -19,10 +19,11 @@

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.UUID;

import static org.junit.jupiter.api.Assertions.*;

public class DateTest {
public class FoundationTypeTest {
@Test
void date_functions() {
try (var arena = SwiftArena.ofConfined()) {
Expand Down Expand Up @@ -59,4 +60,27 @@ void date_timeIntervalSince1970() {
assertEquals(1000, date.getTimeIntervalSince1970());
}
}
}

@Test
void echoUUID() {
var uuid = UUID.randomUUID();
assertEquals(uuid, MySwiftLibrary.echoUUID(uuid));
}

@Test
void makeUUID() {
var uuid = MySwiftLibrary.makeUUID();
assertEquals(4, uuid.version());
}

@Test
void echoURL() {
try (var arena = SwiftArena.ofConfined()) {
var url = URL.init("http://example.com", arena);
assertDoesNotThrow(() -> {
var unwrapped = url.orElseThrow();
assertEquals("http://example.com", unwrapped.getAbsoluteString());
});
}
}
}

This file was deleted.

9 changes: 6 additions & 3 deletions Sources/JExtractSwiftLib/JNI/JNIJavaTypeTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ enum JNIJavaTypeTranslator {
.dictionary,
.set,
.foundationDate, .essentialsDate,
.foundationUUID, .essentialsUUID:
.foundationUUID, .essentialsUUID,
.foundationURL, .essentialsURL:
return nil
}
}
Expand All @@ -79,7 +80,8 @@ enum JNIJavaTypeTranslator {
.dictionary,
.set,
.foundationDate, .essentialsDate,
.foundationUUID, .essentialsUUID:
.foundationUUID, .essentialsUUID,
.foundationURL, .essentialsURL:
nil
}
}
Expand All @@ -105,7 +107,8 @@ enum JNIJavaTypeTranslator {
.dictionary,
.set,
.foundationDate, .essentialsDate,
.foundationUUID, .essentialsUUID:
.foundationUUID, .essentialsUUID,
.foundationURL, .essentialsURL:
nil
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -438,10 +438,7 @@ extension JNISwift2JavaGenerator {
genericRequirements: genericRequirements,
)

case .foundationDate, .essentialsDate:
break // Handled as wrapped struct

case .foundationData, .essentialsData:
case .foundationDate, .essentialsDate, .foundationData, .essentialsData, .foundationURL, .essentialsURL:
break // Handled as wrapped struct

case .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer:
Expand Down Expand Up @@ -877,11 +874,7 @@ extension JNISwift2JavaGenerator {
genericRequirements: genericRequirements,
)

case .foundationDate, .essentialsDate:
// Handled as wrapped struct
break

case .foundationData, .essentialsData:
case .foundationDate, .essentialsDate, .foundationData, .essentialsData, .foundationURL, .essentialsURL:
// Handled as wrapped struct
break

Expand Down Expand Up @@ -1043,6 +1036,9 @@ extension JNISwift2JavaGenerator {
case .foundationDataProtocol, .essentialsDataProtocol:
return .class(package: nil, name: "DataProtocol")

case .foundationURL, .essentialsURL:
return .class(package: nil, name: "URL")

case .foundationUUID, .essentialsUUID:
return .javaUtilUUID

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ extension JNISwift2JavaGenerator {
conversionCheck: nil
)

case .foundationDate, .essentialsDate, .foundationData, .essentialsData:
case .foundationDate, .essentialsDate, .foundationData, .essentialsData, .foundationURL, .essentialsURL:
// Handled as wrapped struct
break

Expand Down Expand Up @@ -743,7 +743,7 @@ extension JNISwift2JavaGenerator {
resultName: resultName
)

case .foundationDate, .essentialsDate, .foundationData, .essentialsData:
case .foundationDate, .essentialsDate, .foundationData, .essentialsData, .foundationURL, .essentialsURL:
// Handled as wrapped struct
break

Expand Down
6 changes: 6 additions & 0 deletions Sources/SwiftExtract/SwiftAnalyzer+Foundation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ extension SwiftAnalyzer {
fakeSourceFilePath: "Foundation/FAKE_FOUNDATION_UUID.swift",
)
],
[
.init(
candidates: [.foundationURL, .essentialsURL],
fakeSourceFilePath: "Foundation/FAKE_FOUNDATION_URL.swift",
)
],
]

for group in groups {
Expand Down
8 changes: 8 additions & 0 deletions Sources/SwiftExtract/SwiftTypes/SwiftKnownTypeDecls.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ public enum SwiftKnownType: Equatable {
case essentialsDate
case foundationUUID
case essentialsUUID
case foundationURL
case essentialsURL

public init?(kind: SwiftKnownTypeDeclKind, genericArguments: [SwiftType]?) {
switch kind {
Expand Down Expand Up @@ -106,6 +108,8 @@ public enum SwiftKnownType: Equatable {
case .essentialsDate: self = .essentialsDate
case .foundationUUID: self = .foundationUUID
case .essentialsUUID: self = .essentialsUUID
case .foundationURL: self = .foundationURL
case .essentialsURL: self = .essentialsURL
}
}

Expand Down Expand Up @@ -146,6 +150,8 @@ public enum SwiftKnownType: Equatable {
case .essentialsDate: .essentialsDate
case .foundationUUID: .foundationUUID
case .essentialsUUID: .essentialsUUID
case .foundationURL: .foundationURL
case .essentialsURL: .essentialsURL
}
}
}
Expand Down Expand Up @@ -189,6 +195,8 @@ public enum SwiftKnownTypeDeclKind: String, Hashable {
case essentialsDate = "FoundationEssentials.Date"
case foundationUUID = "Foundation.UUID"
case essentialsUUID = "FoundationEssentials.UUID"
case foundationURL = "Foundation.URL"
case essentialsURL = "FoundationEssentials.URL"

public var moduleAndName: (module: String, name: String) {
let qualified = self.rawValue
Expand Down
2 changes: 2 additions & 0 deletions Sources/SwiftExtract/SwiftTypes/SwiftKnownTypes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ public struct SwiftKnownTypes {
public var essentialsData: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsData])) }
public var foundationUUID: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.foundationUUID])) }
public var essentialsUUID: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsUUID])) }
public var foundationURL: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.foundationURL])) }
public var essentialsURL: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsURL])) }

/// `(UnsafeRawPointer, Long) -> ()` function type.
///
Expand Down
Loading