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 @@ -476,7 +476,7 @@ extension FFMSwift2JavaGenerator {
}

// Generic types are not supported yet.
guard swiftNominalType.genericArguments == nil else {
guard swiftNominalType.genericArguments.isEmpty else {
throw JavaTranslationError.unhandledType(swiftType)
}

Expand Down Expand Up @@ -821,7 +821,7 @@ extension FFMSwift2JavaGenerator {
}

// Generic types are not supported yet.
guard swiftNominalType.genericArguments == nil else {
guard swiftNominalType.genericArguments.isEmpty else {
throw JavaTranslationError.unhandledType(swiftType)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -481,13 +481,13 @@ extension JNISwift2JavaGenerator {
let javaType = JavaType.class(
package: moduleJavaPackages[nominalType.nominalTypeDecl.moduleName],
name: nominalTypeName,
typeParameters: try nominalType.genericArguments?.map { swiftType in
typeParameters: try nominalType.genericArguments.map { swiftType in
try translateGenericTypeParameter(
swiftType,
genericParameters: genericParameters,
genericRequirements: genericRequirements,
)
} ?? [],
},
)

// We assume this is a JExtract class.
Expand Down Expand Up @@ -918,13 +918,13 @@ extension JNISwift2JavaGenerator {
let javaType = JavaType.class(
package: moduleJavaPackages[nominalType.nominalTypeDecl.moduleName],
name: nominalType.nominalTypeDecl.qualifiedName,
typeParameters: try nominalType.genericArguments?.map { swiftType in
typeParameters: try nominalType.genericArguments.map { swiftType in
try translateGenericTypeParameter(
swiftType,
genericParameters: genericParameters,
genericRequirements: genericRequirements,
)
} ?? [],
},
)

// We assume this is a JExtract class.
Expand Down Expand Up @@ -1062,13 +1062,13 @@ extension JNISwift2JavaGenerator {

// We assume this is a JExtract class.
let typeParameters =
try nominalType.genericArguments?.map { swiftType in
try nominalType.genericArguments.map { swiftType in
try translateGenericTypeParameter(
swiftType,
genericParameters: genericParameters,
genericRequirements: genericRequirements,
)
} ?? []
}

return .class(
package: moduleJavaPackages[nominalType.nominalTypeDecl.moduleName],
Expand Down
6 changes: 2 additions & 4 deletions Sources/JExtractSwiftLib/Swift2JavaTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -181,10 +181,8 @@ extension Swift2JavaTranslator {
func check(_ type: SwiftType) -> Bool {
switch type {
case .nominal(let nominal):
if let genericArguments = nominal.genericArguments {
if genericArguments.contains(where: check) {
return true
}
if nominal.genericArguments.contains(where: check) {
return true
}
return predicate(nominal.nominalTypeDecl)
case .tuple(let tuple):
Expand Down
26 changes: 13 additions & 13 deletions Sources/JExtractSwiftLib/SwiftTypes/SwiftType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -200,13 +200,13 @@ struct SwiftNominalType: Equatable {
private var storedParent: Parent?
var sugarName: SugarName?
var nominalTypeDecl: SwiftNominalTypeDeclaration
var genericArguments: [SwiftType]?
var genericArguments: [SwiftType]

init(
parent: SwiftNominalType? = nil,
sugarName: SugarName? = nil,
nominalTypeDecl: SwiftNominalTypeDeclaration,
genericArguments: [SwiftType]? = nil
genericArguments: [SwiftType] = []
) {
self.storedParent =
parent.map { .nominal($0) } ?? nominalTypeDecl.parent.map { .nominal(SwiftNominalType(nominalTypeDecl: $0)) }
Expand Down Expand Up @@ -242,15 +242,15 @@ extension SwiftNominalType: CustomStringConvertible {
switch sugarName {
case .none:
resultString += nominalTypeDecl.name
if let genericArguments {
if !genericArguments.isEmpty {
resultString += "<\(genericArguments.map(\.description).joined(separator: ", "))>"
}
case .some(.optional):
resultString += "\(genericArguments![0])?"
resultString += "\(genericArguments[0])?"
case .some(.array):
resultString += "[\(genericArguments![0])]"
resultString += "[\(genericArguments[0])]"
case .some(.dictionary):
resultString += "[\(genericArguments![0]): \(genericArguments![1])]"
resultString += "[\(genericArguments[0]): \(genericArguments[1])]"
}

return resultString
Expand Down Expand Up @@ -345,7 +345,7 @@ extension SwiftType {
originalType: type,
parent: nil,
name: identifierType.name,
genericArguments: genericArgs,
genericArguments: genericArgs ?? [],
lookupContext: lookupContext
)

Expand Down Expand Up @@ -383,7 +383,7 @@ extension SwiftType {
originalType: type,
parent: parentType,
name: memberType.name,
genericArguments: genericArgs,
genericArguments: genericArgs ?? [],
lookupContext: lookupContext,
module: moduleName
)
Expand Down Expand Up @@ -433,7 +433,7 @@ extension SwiftType {
originalType: TypeSyntax,
parent: SwiftType?,
name: TokenSyntax,
genericArguments: [SwiftType]?,
genericArguments: [SwiftType],
lookupContext: SwiftTypeLookupContext,
module: String? = nil
) throws {
Expand Down Expand Up @@ -471,7 +471,7 @@ extension SwiftType {
} else if let aliasDecl = typeDecl as? SwiftTypeAliasDeclaration {
let aliasGenericParams =
aliasDecl.syntax.genericParameterClause?.parameters.map { $0.name.text } ?? []
let useSiteArgs = genericArguments ?? []
let useSiteArgs = genericArguments

// The alias's generic parameter count must match the use-site argument
// count. Treat any mismatch (including use-site args on a non-generic
Expand Down Expand Up @@ -514,7 +514,7 @@ extension SwiftType {
SwiftNominalType(
parent: parent?.asNominalType,
nominalTypeDecl: nominalTypeDecl,
genericArguments: nil
genericArguments: []
)
)
}
Expand All @@ -533,7 +533,7 @@ extension SwiftType {
parent: nominal.parent,
sugarName: nominal.sugarName,
nominalTypeDecl: nominal.nominalTypeDecl,
genericArguments: nominal.genericArguments?.map {
genericArguments: nominal.genericArguments.map {
$0.substituting(genericParameters: substitutions)
}
)
Expand Down Expand Up @@ -596,7 +596,7 @@ extension SwiftNominalTypeDeclaration {
return SwiftNominalType(
parent: parent?.asSwiftNominalType,
nominalTypeDecl: self,
genericArguments: genericArguments.isEmpty ? nil : genericArguments
genericArguments: genericArguments
)
}

Expand Down
10 changes: 5 additions & 5 deletions Tests/JExtractSwiftTests/TypealiasResolutionTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ struct TypealiasResolutionTests {
return
}
#expect(nominal.nominalTypeDecl.name == "Optional")
let arg0 = try #require(nominal.genericArguments?.first)
let arg0 = try #require(nominal.genericArguments.first)
#expect(arg0.description == "Int64", "Expected substituted T to be Int64, got \(arg0)")
}

Expand Down Expand Up @@ -154,7 +154,7 @@ struct TypealiasResolutionTests {
return
}
#expect(nominal.nominalTypeDecl.name == "Dictionary")
let args = try #require(nominal.genericArguments)
let args = nominal.genericArguments
#expect(args.count == 2)
#expect(args[0].description == "String")
#expect(args[1].description == "Int64")
Expand Down Expand Up @@ -295,7 +295,7 @@ struct TypealiasResolutionTests {
return
}
#expect(nominal.nominalTypeDecl.name == "Optional")
#expect(nominal.genericArguments?.first?.description == "Int64")
#expect(nominal.genericArguments.first?.description == "Int64")
}

@Test("Typealias to array sugar resolves to an array")
Expand All @@ -320,7 +320,7 @@ struct TypealiasResolutionTests {
return
}
#expect(nominal.nominalTypeDecl.name == "Array")
#expect(nominal.genericArguments?.first?.description == "Int8")
#expect(nominal.genericArguments.first?.description == "Int8")
}

// ==== -----------------------------------------------------------------------
Expand Down Expand Up @@ -410,7 +410,7 @@ struct TypealiasResolutionTests {
return
}
#expect(nominal.nominalTypeDecl.name == "Optional")
#expect(nominal.genericArguments?.first?.description == "Int64")
#expect(nominal.genericArguments.first?.description == "Int64")
}

// ==== -----------------------------------------------------------------------
Expand Down
Loading