Skip to content

Commit 70edd09

Browse files
committed
Add Support for Field Accessors
1 parent 6edcde5 commit 70edd09

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ generate-JavaKit: Java2Swift
5555

5656
generate-JavaKitReflection: Java2Swift generate-JavaKit
5757
mkdir -p Sources/JavaKitReflection/generated
58-
$(BUILD_DIR)/debug/Java2Swift --module-name JavaKitReflection --manifests Sources/JavaKit/generated/JavaKit.swift2java -o Sources/JavaKitReflection/generated java.lang.reflect.Method java.lang.reflect.Type java.lang.reflect.Constructor java.lang.reflect.Parameter java.lang.reflect.ParameterizedType java.lang.reflect.Executable java.lang.reflect.AnnotatedType java.lang.reflect.TypeVariable java.lang.reflect.WildcardType java.lang.reflect.GenericArrayType java.lang.reflect.AccessibleObject java.lang.annotation.Annotation java.lang.reflect.GenericDeclaration
58+
$(BUILD_DIR)/debug/Java2Swift --module-name JavaKitReflection --manifests Sources/JavaKit/generated/JavaKit.swift2java -o Sources/JavaKitReflection/generated java.lang.reflect.Method java.lang.reflect.Type java.lang.reflect.Constructor java.lang.reflect.Parameter java.lang.reflect.ParameterizedType java.lang.reflect.Executable java.lang.reflect.AnnotatedType java.lang.reflect.TypeVariable java.lang.reflect.WildcardType java.lang.reflect.GenericArrayType java.lang.reflect.AccessibleObject java.lang.annotation.Annotation java.lang.reflect.GenericDeclaration java.lang.reflect.Field
5959

6060
generate-JavaKitJar: Java2Swift generate-JavaKit
6161
mkdir -p Sources/JavaKitJar/generated

Sources/Java2Swift/JavaTranslator.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,25 @@ extension JavaTranslator {
280280
}
281281
}
282282
)
283+
284+
var staticFields: [Field] = []
285+
members.append(
286+
contentsOf: javaClass.getFields().compactMap {
287+
$0.flatMap { field in
288+
if field.isStatic {
289+
staticFields.append(field)
290+
return nil
291+
}
292+
293+
do {
294+
return try translateField(field)
295+
} catch {
296+
logUntranslated("Unable to translate '\(fullName)' field '\(field.getName())': \(error)")
297+
return nil
298+
}
299+
}
300+
}
301+
)
283302

284303
// Map the generic parameters.
285304
let genericParameterClause: String
@@ -327,6 +346,8 @@ extension JavaTranslator {
327346

328347
// Format the class declaration.
329348
classDecl = classDecl.formatted(using: format).cast(DeclSyntax.self)
349+
350+
// TODO: Handle static fields in https://github.com/swiftlang/swift-java/issues/39
330351

331352
if staticMethods.isEmpty {
332353
return [classDecl]
@@ -422,6 +443,15 @@ extension JavaTranslator {
422443
public func \(raw: javaMethod.getName())\(raw: genericParameterClause)(\(raw: parametersStr))\(raw: throwsStr)\(raw: resultTypeStr)\(raw: whereClause)
423444
"""
424445
}
446+
447+
func translateField(_ javaField: Field) throws -> DeclSyntax {
448+
let typeName = try getSwiftTypeNameAsString(javaField.getGenericType()!, outerOptional: true)
449+
let fieldAttribute: AttributeSyntax = "@JavaField";
450+
return """
451+
\(fieldAttribute)
452+
public func \(raw: javaField.getName()): \(raw: typeName)
453+
"""
454+
}
425455

426456
// Translate a Java parameter list into Swift parameters.
427457
private func translateParameters(_ parameters: [Parameter?]) throws -> [FunctionParameterSyntax] {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2024 Apple Inc. and the Swift.org project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of Swift.org project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
extension Field {
16+
/// Whether this is a 'static' field.
17+
public var isStatic: Bool {
18+
return (getModifiers() & 0x08) != 0
19+
}
20+
}

Sources/JavaKitReflection/JavaClass+Reflection.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ extension JavaClass {
2828

2929
@JavaMethod
3030
public func getMethods() -> [Method?]
31+
32+
@JavaMethod
33+
public func getFields() -> [Field?]
3134

3235
@JavaMethod
3336
public func getConstructors() -> [Constructor<ObjectType>?]

0 commit comments

Comments
 (0)