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
3 changes: 3 additions & 0 deletions Sources/JExtractSwiftLib/JNI/JNIJavaTypeTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ enum JNIJavaTypeTranslator {
.unsafePointer, .unsafeMutablePointer,
.unsafeRawBufferPointer, .unsafeMutableRawBufferPointer,
.unsafeBufferPointer, .unsafeMutableBufferPointer,
.opaquePointer,
.optional,
.foundationData, .foundationDataProtocol,
.essentialsData, .essentialsDataProtocol,
Expand Down Expand Up @@ -73,6 +74,7 @@ enum JNIJavaTypeTranslator {
.unsafePointer, .unsafeMutablePointer,
.unsafeRawBufferPointer, .unsafeMutableRawBufferPointer,
.unsafeBufferPointer, .unsafeMutableBufferPointer,
.opaquePointer,
.optional,
.foundationData, .foundationDataProtocol,
.essentialsData, .essentialsDataProtocol,
Expand Down Expand Up @@ -100,6 +102,7 @@ enum JNIJavaTypeTranslator {
.unsafePointer, .unsafeMutablePointer,
.unsafeRawBufferPointer, .unsafeMutableRawBufferPointer,
.unsafeBufferPointer, .unsafeMutableBufferPointer,
.opaquePointer,
.optional,
.foundationData, .foundationDataProtocol,
.essentialsData, .essentialsDataProtocol,
Expand Down
2 changes: 2 additions & 0 deletions Sources/SwiftExtract/SwiftTypes/SwiftKnownModules.swift
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ private let swiftSourceFile: SourceFileSyntax = """
public struct UnsafeBufferPointer<Element> {}
public struct UnsafeMutableBufferPointer<Element> {}

public struct OpaquePointer {}

public struct Optional<Wrapped> {}

public struct Array<Element> {}
Expand Down
4 changes: 4 additions & 0 deletions Sources/SwiftExtract/SwiftTypes/SwiftKnownTypeDecls.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public enum SwiftKnownType: Equatable {
case unsafeMutablePointer(_ pointee: SwiftType)
case unsafeBufferPointer(_ element: SwiftType)
case unsafeMutableBufferPointer(_ element: SwiftType)
case opaquePointer
case optional(_ wrapped: SwiftType)
case void
case string
Expand Down Expand Up @@ -86,6 +87,7 @@ public enum SwiftKnownType: Equatable {
case .unsafeMutableBufferPointer:
guard let arg = genericArguments?.first else { return nil }
self = .unsafeMutableBufferPointer(arg)
case .opaquePointer: self = .opaquePointer
case .optional:
guard let arg = genericArguments?.first else { return nil }
self = .optional(arg)
Expand Down Expand Up @@ -136,6 +138,7 @@ public enum SwiftKnownType: Equatable {
case .unsafeMutablePointer: .unsafeMutablePointer
case .unsafeBufferPointer: .unsafeBufferPointer
case .unsafeMutableBufferPointer: .unsafeMutableBufferPointer
case .opaquePointer: .opaquePointer
case .optional: .optional
case .void: .void
case .string: .string
Expand Down Expand Up @@ -179,6 +182,7 @@ public enum SwiftKnownTypeDeclKind: String, Hashable {
case unsafeMutablePointer = "Swift.UnsafeMutablePointer"
case unsafeBufferPointer = "Swift.UnsafeBufferPointer"
case unsafeMutableBufferPointer = "Swift.UnsafeMutableBufferPointer"
case opaquePointer = "Swift.OpaquePointer"
case optional = "Swift.Optional"
case void = "Swift.Void"
case string = "Swift.String"
Expand Down
25 changes: 25 additions & 0 deletions Tests/SwiftExtractTests/AnalysisResultTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,31 @@ struct AnalysisResultSuite {
#expect(unresolvable.functionSignature.thrownTypedError == nil)
}

@Test
func opaquePointerIsAKnownSwiftType() throws {
let result = try analyze(
sources: [
(
"/fake/Source.swift",
"""
public func takePointer(_ pointer: OpaquePointer) {}
public func makePointer() -> OpaquePointer? { nil }
"""
)
],
moduleName: "Aquarium"
)

let byName = Dictionary(uniqueKeysWithValues: result.extractedGlobalFuncs.map { ($0.name, $0) })

let take = try #require(byName["takePointer"])
let parameterType = try #require(take.functionSignature.parameters.first?.type)
#expect(parameterType.asNominalTypeDeclaration?.knownTypeKind == .opaquePointer)

let make = try #require(byName["makePointer"])
#expect(make.functionSignature.result.type.description == "OpaquePointer?")
}

@Test
func typedThrowsOnInitializers() throws {
let result = try analyze(
Expand Down
1 change: 1 addition & 0 deletions Tests/SwiftExtractTests/SwiftKnownModuleTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ struct SwiftKnownModuleSuite {
"Float", "Double",
"Bool", "String",
"Array", "Dictionary", "Set", "Optional",
"OpaquePointer",
])
func swiftModuleContains(_ typeName: String) throws {
let table = SwiftKnownModule.swift.symbolTable
Expand Down
Loading