diff --git a/Sources/SwiftJava/JavaExtensions/JavaIterator+Iterator.swift b/Sources/SwiftJava/JavaExtensions/JavaIterator+Iterator.swift index fe82074d..49d429fc 100644 --- a/Sources/SwiftJava/JavaExtensions/JavaIterator+Iterator.swift +++ b/Sources/SwiftJava/JavaExtensions/JavaIterator+Iterator.swift @@ -15,10 +15,10 @@ extension JavaIterator: IteratorProtocol { public typealias Element = E - public func next() -> E? { + @_implements(IteratorProtocol,next()) + public mutating func swiftNext() -> E? { if hasNext() { - let nextResult: JavaObject? = next() - return nextResult.map { $0.as(E.self)! } + return next() as E } return nil diff --git a/Sources/SwiftJava/generated/JavaIterator.swift b/Sources/SwiftJava/generated/JavaIterator.swift index 58f3ae57..b0458837 100644 --- a/Sources/SwiftJava/generated/JavaIterator.swift +++ b/Sources/SwiftJava/generated/JavaIterator.swift @@ -3,12 +3,30 @@ import SwiftJavaJNICore @JavaInterface("java.util.Iterator") public struct JavaIterator { + /// Java method `remove`. + /// + /// ### Java method signature + /// ```java + /// public default void java.util.Iterator.remove() + /// ``` @JavaMethod public func remove() + /// Java method `hasNext`. + /// + /// ### Java method signature + /// ```java + /// public abstract boolean java.util.Iterator.hasNext() + /// ``` @JavaMethod public func hasNext() -> Bool - @JavaMethod - public func next() -> JavaObject! + /// Java method `next`. + /// + /// ### Java method signature + /// ```java + /// public abstract E java.util.Iterator.next() + /// ``` + @JavaMethod(typeErasedResult: "E!") + public func next() -> E! } diff --git a/Tests/SwiftJavaTests/BasicRuntimeTests.swift b/Tests/SwiftJavaTests/BasicRuntimeTests.swift index 69989149..0a139ba2 100644 --- a/Tests/SwiftJavaTests/BasicRuntimeTests.swift +++ b/Tests/SwiftJavaTests/BasicRuntimeTests.swift @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// import JavaNet +import JavaUtil import SwiftJava import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 @@ -96,6 +97,17 @@ class BasicRuntimeTests: XCTestCase { XCTAssertEqual(string, "https://swift.org") } + + func testListIterator() throws { + let environment = try jvm.environment() + + let javaList = try XCTUnwrap(ArrayList(environment: environment).as(List.self)) + _ = javaList.add(JavaInteger(0, environment: environment)) + _ = javaList.add(JavaInteger(1, environment: environment)) + _ = javaList.add(JavaInteger(2, environment: environment)) + + XCTAssertEqual(javaList.map { $0.intValue() }, [0, 1, 2]) + } } @JavaClass("org.swift.javakit.Nonexistent")