Skip to content

get rid of some of the warnings in Java2Swift generated sources: generics #200

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
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
19 changes: 17 additions & 2 deletions Sources/Java2SwiftLib/JavaClassTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,25 @@ struct JavaClassTranslator {
}

let genericParameters = javaTypeParameters.map { param in
"\(param.getName()): AnyJavaObject"
let name = generateGenericParameterName(param.getName())
translator.usedGenericParameterNames.insert(param.getName())
return "\(name): AnyJavaObject"
}

return "<\(genericParameters.joined(separator: ", "))>"
}

/// If the name already exists, append a 1 to it.
/// For example, if name = "T" and it already exists, the result will be "T1".
private func generateGenericParameterName(_ baseName: String) -> String {
var name = baseName
let index = 1
if translator.usedGenericParameterNames.contains(name) {
name = "\(baseName)\(index)"
}
return name
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would probably have to be more contextual "in this context (of a function or type) there already was a T used so make it a T1". Especially with types nested in other types where there's a T outside and then another T etc...

}

/// Prepare translation for the given Java class (or interface).
init(javaClass: JavaClass<JavaObject>, translator: JavaTranslator) throws {
let fullName = javaClass.getName()
Expand Down Expand Up @@ -392,7 +405,9 @@ extension JavaClassTranslator {
let staticMemberWhereClause: String
if !javaTypeParameters.isEmpty {
let genericParameterNames = javaTypeParameters.compactMap { typeVar in
typeVar.getName()
let name = generateGenericParameterName(typeVar.getName())
translator.usedGenericParameterNames.insert(typeVar.getName())
return name
}

let genericArgumentClause = "<\(genericParameterNames.joined(separator: ", "))>"
Expand Down
4 changes: 4 additions & 0 deletions Sources/Java2SwiftLib/JavaTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ package class JavaTranslator {
/// TODO: Make JavaClass Hashable so we can index by the object?
package var nestedClasses: [String: [JavaClass<JavaObject>]] = [:]

/// The set of generic parameter names that have been used.
package var usedGenericParameterNames: Set<String> = []

package init(
swiftModuleName: String,
environment: JNIEnvironment,
Expand All @@ -78,6 +81,7 @@ package class JavaTranslator {
/// Clear out any per-file state when we want to start a new file.
package func startNewFile() {
importedSwiftModules = Self.defaultImportedSwiftModules
usedGenericParameterNames = []
}

/// Simplistic logging for all entities that couldn't be translated.
Expand Down
18 changes: 9 additions & 9 deletions Sources/JavaKit/generated/JavaClass.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,16 @@ open class JavaClass<T: AnyJavaObject>: JavaObject {
open func isRecord() -> Bool

@JavaMethod
open func getClassLoader() -> JavaClassLoader!
open func isSealed() -> Bool

@JavaMethod
open func newInstance() throws -> JavaObject!
open func getInterfaces() -> [JavaClass<JavaObject>?]

@JavaMethod
open func getInterfaces() -> [JavaClass<JavaObject>?]
open func getClassLoader() -> JavaClassLoader!

@JavaMethod
open func newInstance() throws -> JavaObject!

@JavaMethod
open func isMemberClass() -> Bool
Expand Down Expand Up @@ -128,17 +131,14 @@ open class JavaClass<T: AnyJavaObject>: JavaObject {

@JavaMethod
open func getNestMembers() -> [JavaClass<JavaObject>?]

@JavaMethod
open func isSealed() -> Bool
}
extension JavaClass {
@JavaStaticMethod
public func forName<T: AnyJavaObject>(_ arg0: String, _ arg1: Bool, _ arg2: JavaClassLoader?) throws -> JavaClass<JavaObject>! where ObjectType == JavaClass<T>
public func forName<T1: AnyJavaObject>(_ arg0: String, _ arg1: Bool, _ arg2: JavaClassLoader?) throws -> JavaClass<JavaObject>! where ObjectType == JavaClass<T1>

@JavaStaticMethod
public func forName<T: AnyJavaObject>(_ arg0: String) throws -> JavaClass<JavaObject>! where ObjectType == JavaClass<T>
public func forName<T1: AnyJavaObject>(_ arg0: String) throws -> JavaClass<JavaObject>! where ObjectType == JavaClass<T1>

@JavaStaticMethod
public func forPrimitiveName<T: AnyJavaObject>(_ arg0: String) -> JavaClass<JavaObject>! where ObjectType == JavaClass<T>
public func forPrimitiveName<T1: AnyJavaObject>(_ arg0: String) -> JavaClass<JavaObject>! where ObjectType == JavaClass<T1>
}
12 changes: 6 additions & 6 deletions Sources/JavaKit/generated/JavaOptional.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,23 +29,23 @@ open class JavaOptional<T: AnyJavaObject>: JavaObject {
}
extension JavaClass {
@JavaStaticMethod
public func of<T: AnyJavaObject>(_ arg0: JavaObject?) -> JavaOptional<JavaObject>! where ObjectType == JavaOptional<T>
public func of<T1: AnyJavaObject>(_ arg0: JavaObject?) -> JavaOptional<JavaObject>! where ObjectType == JavaOptional<T1>

public func ofOptional<T: AnyJavaObject>(_ arg0: JavaObject?) -> JavaObject? where ObjectType == JavaOptional<T> {
public func ofOptional<T1: AnyJavaObject>(_ arg0: JavaObject?) -> JavaObject? where ObjectType == JavaOptional<T1> {
Optional(javaOptional: of(arg0))
}

@JavaStaticMethod
public func empty<T: AnyJavaObject>() -> JavaOptional<JavaObject>! where ObjectType == JavaOptional<T>
public func empty<T1: AnyJavaObject>() -> JavaOptional<JavaObject>! where ObjectType == JavaOptional<T1>

public func emptyOptional<T: AnyJavaObject>() -> JavaObject? where ObjectType == JavaOptional<T> {
public func emptyOptional<T1: AnyJavaObject>() -> JavaObject? where ObjectType == JavaOptional<T1> {
Optional(javaOptional: empty())
}

@JavaStaticMethod
public func ofNullable<T: AnyJavaObject>(_ arg0: JavaObject?) -> JavaOptional<JavaObject>! where ObjectType == JavaOptional<T>
public func ofNullable<T1: AnyJavaObject>(_ arg0: JavaObject?) -> JavaOptional<JavaObject>! where ObjectType == JavaOptional<T1>

public func ofNullableOptional<T: AnyJavaObject>(_ arg0: JavaObject?) -> JavaObject? where ObjectType == JavaOptional<T> {
public func ofNullableOptional<T1: AnyJavaObject>(_ arg0: JavaObject?) -> JavaObject? where ObjectType == JavaOptional<T1> {
Optional(javaOptional: ofNullable(arg0))
}
}
48 changes: 24 additions & 24 deletions Sources/JavaKit/generated/JavaString.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,16 @@ open class JavaString: JavaObject {
open func getChars(_ arg0: Int32, _ arg1: Int32, _ arg2: [UInt16], _ arg3: Int32)

@JavaMethod
open func compareTo(_ arg0: JavaObject?) -> Int32
open func compareTo(_ arg0: String) -> Int32

@JavaMethod
open func compareTo(_ arg0: String) -> Int32
open func compareTo(_ arg0: JavaObject?) -> Int32

@JavaMethod
open func indexOf(_ arg0: String, _ arg1: Int32, _ arg2: Int32) -> Int32
open func indexOf(_ arg0: String, _ arg1: Int32) -> Int32

@JavaMethod
open func indexOf(_ arg0: String) -> Int32
open func indexOf(_ arg0: String, _ arg1: Int32, _ arg2: Int32) -> Int32

@JavaMethod
open func indexOf(_ arg0: Int32) -> Int32
Expand All @@ -73,7 +73,7 @@ open class JavaString: JavaObject {
open func indexOf(_ arg0: Int32, _ arg1: Int32, _ arg2: Int32) -> Int32

@JavaMethod
open func indexOf(_ arg0: String, _ arg1: Int32) -> Int32
open func indexOf(_ arg0: String) -> Int32

@JavaMethod
open func charAt(_ arg0: Int32) -> UInt16
Expand All @@ -90,44 +90,44 @@ open class JavaString: JavaObject {
@JavaMethod
open func offsetByCodePoints(_ arg0: Int32, _ arg1: Int32) -> Int32

@JavaMethod
open func getBytes() -> [Int8]

@JavaMethod
open func getBytes(_ arg0: String) throws -> [Int8]

@JavaMethod
open func getBytes(_ arg0: Int32, _ arg1: Int32, _ arg2: [Int8], _ arg3: Int32)

@JavaMethod
open func regionMatches(_ arg0: Bool, _ arg1: Int32, _ arg2: String, _ arg3: Int32, _ arg4: Int32) -> Bool
open func getBytes() -> [Int8]

@JavaMethod
open func regionMatches(_ arg0: Int32, _ arg1: String, _ arg2: Int32, _ arg3: Int32) -> Bool

@JavaMethod
open func regionMatches(_ arg0: Bool, _ arg1: Int32, _ arg2: String, _ arg3: Int32, _ arg4: Int32) -> Bool

@JavaMethod
open func startsWith(_ arg0: String) -> Bool

@JavaMethod
open func startsWith(_ arg0: String, _ arg1: Int32) -> Bool

@JavaMethod
open func lastIndexOf(_ arg0: String) -> Int32
open func lastIndexOf(_ arg0: Int32) -> Int32

@JavaMethod
open func lastIndexOf(_ arg0: Int32, _ arg1: Int32) -> Int32
open func lastIndexOf(_ arg0: String) -> Int32

@JavaMethod
open func lastIndexOf(_ arg0: String, _ arg1: Int32) -> Int32

@JavaMethod
open func lastIndexOf(_ arg0: Int32) -> Int32
open func lastIndexOf(_ arg0: Int32, _ arg1: Int32) -> Int32

@JavaMethod
open func substring(_ arg0: Int32) -> String
open func substring(_ arg0: Int32, _ arg1: Int32) -> String

@JavaMethod
open func substring(_ arg0: Int32, _ arg1: Int32) -> String
open func substring(_ arg0: Int32) -> String

@JavaMethod
open func isEmpty() -> Bool
Expand Down Expand Up @@ -215,39 +215,39 @@ open class JavaString: JavaObject {
}
}
extension JavaClass<JavaString> {
@JavaStaticMethod
public func valueOf(_ arg0: JavaObject?) -> String

@JavaStaticMethod
public func valueOf(_ arg0: Int64) -> String

@JavaStaticMethod
public func valueOf(_ arg0: [UInt16]) -> String
public func valueOf(_ arg0: Int32) -> String

@JavaStaticMethod
public func valueOf(_ arg0: JavaObject?) -> String
public func valueOf(_ arg0: UInt16) -> String

@JavaStaticMethod
public func valueOf(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) -> String

@JavaStaticMethod
public func valueOf(_ arg0: Float) -> String
public func valueOf(_ arg0: Bool) -> String

@JavaStaticMethod
public func valueOf(_ arg0: Double) -> String

@JavaStaticMethod
public func valueOf(_ arg0: UInt16) -> String

@JavaStaticMethod
public func valueOf(_ arg0: Bool) -> String
public func valueOf(_ arg0: [UInt16]) -> String

@JavaStaticMethod
public func valueOf(_ arg0: Int32) -> String
public func valueOf(_ arg0: Float) -> String

@JavaStaticMethod
public func format(_ arg0: String, _ arg1: [JavaObject?]) -> String

@JavaStaticMethod
public func copyValueOf(_ arg0: [UInt16]) -> String
public func copyValueOf(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) -> String

@JavaStaticMethod
public func copyValueOf(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) -> String
public func copyValueOf(_ arg0: [UInt16]) -> String
}
56 changes: 28 additions & 28 deletions Sources/JavaKitCollection/generated/BitSet.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,20 @@ import JavaRuntime

@JavaClass("java.util.BitSet")
open class BitSet: JavaObject {
@JavaMethod
@_nonoverride public convenience init(environment: JNIEnvironment? = nil)

@JavaMethod
@_nonoverride public convenience init(_ arg0: Int32, environment: JNIEnvironment? = nil)

@JavaMethod
open func cardinality() -> Int32

@JavaMethod
open func nextSetBit(_ arg0: Int32) -> Int32

@JavaMethod
open func toLongArray() -> [Int64]

@JavaMethod
open func previousSetBit(_ arg0: Int32) -> Int32

@JavaMethod
open func previousClearBit(_ arg0: Int32) -> Int32

@JavaMethod
open func intersects(_ arg0: BitSet?) -> Bool
@_nonoverride public convenience init(environment: JNIEnvironment? = nil)

@JavaMethod
open func size() -> Int32

@JavaMethod
open func get(_ arg0: Int32, _ arg1: Int32) -> BitSet!
open func get(_ arg0: Int32) -> Bool

@JavaMethod
open func get(_ arg0: Int32) -> Bool
open func get(_ arg0: Int32, _ arg1: Int32) -> BitSet!

@JavaMethod
open override func equals(_ arg0: JavaObject?) -> Bool
Expand All @@ -52,29 +34,29 @@ open class BitSet: JavaObject {
@JavaMethod
open override func clone() -> JavaObject!

@JavaMethod
open func clear(_ arg0: Int32)

@JavaMethod
open func clear(_ arg0: Int32, _ arg1: Int32)

@JavaMethod
open func clear()

@JavaMethod
open func isEmpty() -> Bool
open func clear(_ arg0: Int32)

@JavaMethod
open func set(_ arg0: Int32, _ arg1: Int32, _ arg2: Bool)
open func isEmpty() -> Bool

@JavaMethod
open func set(_ arg0: Int32, _ arg1: Int32)
open func set(_ arg0: Int32, _ arg1: Bool)

@JavaMethod
open func set(_ arg0: Int32)

@JavaMethod
open func set(_ arg0: Int32, _ arg1: Bool)
open func set(_ arg0: Int32, _ arg1: Int32)

@JavaMethod
open func set(_ arg0: Int32, _ arg1: Int32, _ arg2: Bool)

@JavaMethod
open func flip(_ arg0: Int32, _ arg1: Int32)
Expand All @@ -99,6 +81,24 @@ open class BitSet: JavaObject {

@JavaMethod
open func andNot(_ arg0: BitSet?)

@JavaMethod
open func cardinality() -> Int32

@JavaMethod
open func nextSetBit(_ arg0: Int32) -> Int32

@JavaMethod
open func toLongArray() -> [Int64]

@JavaMethod
open func previousSetBit(_ arg0: Int32) -> Int32

@JavaMethod
open func previousClearBit(_ arg0: Int32) -> Int32

@JavaMethod
open func intersects(_ arg0: BitSet?) -> Bool
}
extension JavaClass<BitSet> {
@JavaStaticMethod
Expand Down
Loading
Loading