diff --git a/Sources/SwiftJavaToolLib/JavaClassTranslator.swift b/Sources/SwiftJavaToolLib/JavaClassTranslator.swift index ea0a793a..b355fc0c 100644 --- a/Sources/SwiftJavaToolLib/JavaClassTranslator.swift +++ b/Sources/SwiftJavaToolLib/JavaClassTranslator.swift @@ -695,6 +695,20 @@ extension JavaClassTranslator { let swiftMethodName = javaMethod.getName().escapedSwiftName let swiftOptionalMethodName = "\(javaMethod.getName())Optional".escapedSwiftName + // --- Handle docs for the generated method. + // Include the original Java signature + let docsString = + """ + /** + * Java method `\(javaMethod.getName())`. + * + * ### Java method signature + * ```java + * \(javaMethod.toGenericString()) + * ``` + */ + """ + // Compute the parameters for '@...JavaMethod(...)' let methodAttribute: AttributeSyntax if implementedInSwift { @@ -755,9 +769,9 @@ extension JavaClassTranslator { baseBody } - return """ + \(raw: docsString) \(methodAttribute)\(raw: accessModifier)\(raw: overrideOpt)func \(raw: swiftMethodName)\(raw: genericParameterClauseStr)(\(raw: parametersStr))\(raw: throwsStr)\(raw: resultTypeStr)\(raw: whereClause) \(raw: accessModifier)\(raw: overrideOpt)func \(raw: swiftOptionalMethodName)\(raw: genericParameterClauseStr)(\(raw: parameters.map(\.clause.description).joined(separator: ", ")))\(raw: throwsStr) -> \(raw: resultOptional)\(raw: whereClause) { @@ -767,6 +781,7 @@ extension JavaClassTranslator { } else { return """ + \(raw: docsString) \(methodAttribute)\(raw: accessModifier)\(raw: overrideOpt)func \(raw: swiftMethodName)\(raw: genericParameterClauseStr)(\(raw: parametersStr))\(raw: throwsStr)\(raw: resultTypeStr)\(raw: whereClause) """ } diff --git a/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift b/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift index e6f00ee8..9e167cf4 100644 --- a/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift +++ b/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift @@ -49,6 +49,42 @@ final class BasicWrapJavaTests: XCTestCase { ) } + func testWrapJava_docs_signature() async throws { + let classpathURL = try await compileJava( + """ + package com.example; + + class ExampleSimpleClass { + public void example(String name, int age) { } + } + """) + + try assertWrapJavaOutput( + javaClassNames: [ + "com.example.ExampleSimpleClass" + ], + classpath: [classpathURL], + expectedChunks: [ + """ + import CSwiftJavaJNI + import SwiftJava + """, + """ + /** + * Java method `example`. + * + * ### Java method signature + * ```java + * public void com.example.ExampleSimpleClass.example(java.lang.String,int) + * ``` + */ + @JavaMethod + open func example(_ arg0: String, _ arg1: Int32) + """ + ] + ) + } + func test_wrapJava_doNotDupeImportNestedClassesFromSuperclassAutomatically() async throws { let classpathURL = try await compileJava( """ diff --git a/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift b/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift index 60d5a331..b93d42e0 100644 --- a/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift +++ b/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift @@ -257,10 +257,6 @@ final class GenericsWrapJavaTests: XCTestCase { @JavaClass("com.example.ByteArray") open class ByteArray: JavaObject { """, - // """ - // @JavaInterface("com.example.Store") - // public struct Store { - // """, """ @JavaClass("com.example.CompressingStore") open class CompressingStore: AbstractStore { @@ -292,6 +288,8 @@ final class GenericsWrapJavaTests: XCTestCase { """ @JavaClass("com.example.Kappa") open class Kappa: JavaObject { + """, + """ @JavaMethod(typeErasedResult: "T!") open func get() -> T! }