Skip to content

Commit 5ba87f6

Browse files
authored
Merge pull request #55 from jrosen081/jrosen/add-field-accessors
2 parents 6edcde5 + 202a5cd commit 5ba87f6

File tree

6 files changed

+207
-1
lines changed

6 files changed

+207
-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: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,26 @@ extension JavaTranslator {
243243

244244
// Members
245245
var members: [DeclSyntax] = []
246+
247+
// Fields
248+
var staticFields: [Field] = []
249+
members.append(
250+
contentsOf: javaClass.getFields().compactMap {
251+
$0.flatMap { field in
252+
if field.isStatic {
253+
staticFields.append(field)
254+
return nil
255+
}
256+
257+
do {
258+
return try translateField(field)
259+
} catch {
260+
logUntranslated("Unable to translate '\(fullName)' field '\(field.getName())': \(error)")
261+
return nil
262+
}
263+
}
264+
}
265+
)
246266

247267
// Constructors
248268
members.append(
@@ -327,6 +347,8 @@ extension JavaTranslator {
327347

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

331353
if staticMethods.isEmpty {
332354
return [classDecl]
@@ -422,6 +444,15 @@ extension JavaTranslator {
422444
public func \(raw: javaMethod.getName())\(raw: genericParameterClause)(\(raw: parametersStr))\(raw: throwsStr)\(raw: resultTypeStr)\(raw: whereClause)
423445
"""
424446
}
447+
448+
func translateField(_ javaField: Field) throws -> DeclSyntax {
449+
let typeName = try getSwiftTypeNameAsString(javaField.getGenericType()!, outerOptional: true)
450+
let fieldAttribute: AttributeSyntax = "@JavaField";
451+
return """
452+
\(fieldAttribute)
453+
public var \(raw: javaField.getName()): \(raw: typeName)
454+
"""
455+
}
425456

426457
// Translate a Java parameter list into Swift parameters.
427458
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>?]
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
// Auto-generated by Java-to-Swift wrapper generator.
2+
import JavaKit
3+
import JavaRuntime
4+
5+
@JavaClass("java.lang.reflect.Field", extends: AccessibleObject.self)
6+
public struct Field {
7+
@JavaMethod
8+
public func getName() -> String
9+
10+
@JavaMethod
11+
public func get(_ arg0: JavaObject?) throws -> JavaObject?
12+
13+
@JavaMethod
14+
public func equals(_ arg0: JavaObject?) -> Bool
15+
16+
@JavaMethod
17+
public func toString() -> String
18+
19+
@JavaMethod
20+
public func hashCode() -> Int32
21+
22+
@JavaMethod
23+
public func getModifiers() -> Int32
24+
25+
@JavaMethod
26+
public func getBoolean(_ arg0: JavaObject?) throws -> Bool
27+
28+
@JavaMethod
29+
public func getByte(_ arg0: JavaObject?) throws -> Int8
30+
31+
@JavaMethod
32+
public func getShort(_ arg0: JavaObject?) throws -> Int16
33+
34+
@JavaMethod
35+
public func getChar(_ arg0: JavaObject?) throws -> UInt16
36+
37+
@JavaMethod
38+
public func getInt(_ arg0: JavaObject?) throws -> Int32
39+
40+
@JavaMethod
41+
public func getLong(_ arg0: JavaObject?) throws -> Int64
42+
43+
@JavaMethod
44+
public func getFloat(_ arg0: JavaObject?) throws -> Float
45+
46+
@JavaMethod
47+
public func getDouble(_ arg0: JavaObject?) throws -> Double
48+
49+
@JavaMethod
50+
public func toGenericString() -> String
51+
52+
@JavaMethod
53+
public func isSynthetic() -> Bool
54+
55+
@JavaMethod
56+
public func getDeclaringClass() -> JavaClass<JavaObject>?
57+
58+
@JavaMethod
59+
public func getAnnotation(_ arg0: JavaClass<Annotation>?) -> Annotation?
60+
61+
@JavaMethod
62+
public func getAnnotationsByType(_ arg0: JavaClass<Annotation>?) -> [Annotation?]
63+
64+
@JavaMethod
65+
public func getDeclaredAnnotations() -> [Annotation?]
66+
67+
@JavaMethod
68+
public func set(_ arg0: JavaObject?, _ arg1: JavaObject?) throws
69+
70+
@JavaMethod
71+
public func setAccessible(_ arg0: Bool)
72+
73+
@JavaMethod
74+
public func getGenericType() -> Type?
75+
76+
@JavaMethod
77+
public func getType() -> JavaClass<JavaObject>?
78+
79+
@JavaMethod
80+
public func setBoolean(_ arg0: JavaObject?, _ arg1: Bool) throws
81+
82+
@JavaMethod
83+
public func setByte(_ arg0: JavaObject?, _ arg1: Int8) throws
84+
85+
@JavaMethod
86+
public func setChar(_ arg0: JavaObject?, _ arg1: UInt16) throws
87+
88+
@JavaMethod
89+
public func setShort(_ arg0: JavaObject?, _ arg1: Int16) throws
90+
91+
@JavaMethod
92+
public func setInt(_ arg0: JavaObject?, _ arg1: Int32) throws
93+
94+
@JavaMethod
95+
public func setLong(_ arg0: JavaObject?, _ arg1: Int64) throws
96+
97+
@JavaMethod
98+
public func setFloat(_ arg0: JavaObject?, _ arg1: Float) throws
99+
100+
@JavaMethod
101+
public func setDouble(_ arg0: JavaObject?, _ arg1: Double) throws
102+
103+
@JavaMethod
104+
public func isEnumConstant() -> Bool
105+
106+
@JavaMethod
107+
public func getAnnotatedType() -> AnnotatedType?
108+
109+
@JavaMethod
110+
public func isAnnotationPresent(_ arg0: JavaClass<Annotation>?) -> Bool
111+
112+
@JavaMethod
113+
public func getAnnotations() -> [Annotation?]
114+
115+
@JavaMethod
116+
public func getDeclaredAnnotation(_ arg0: JavaClass<Annotation>?) -> Annotation?
117+
118+
@JavaMethod
119+
public func getDeclaredAnnotationsByType(_ arg0: JavaClass<Annotation>?) -> [Annotation?]
120+
121+
@JavaMethod
122+
public func trySetAccessible() -> Bool
123+
124+
@JavaMethod
125+
public func canAccess(_ arg0: JavaObject?) -> Bool
126+
127+
@JavaMethod
128+
public func isAccessible() -> Bool
129+
130+
@JavaMethod
131+
public func getClass() -> JavaClass<JavaObject>?
132+
133+
@JavaMethod
134+
public func notify()
135+
136+
@JavaMethod
137+
public func notifyAll()
138+
139+
@JavaMethod
140+
public func wait(_ arg0: Int64) throws
141+
142+
@JavaMethod
143+
public func wait(_ arg0: Int64, _ arg1: Int32) throws
144+
145+
@JavaMethod
146+
public func wait() throws
147+
}
148+
extension JavaClass<Field> {
149+
@JavaStaticMethod
150+
public func setAccessible(_ arg0: [AccessibleObject?], _ arg1: Bool)
151+
}

Sources/JavaKitReflection/generated/JavaKitReflection.swift2java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"java.lang.reflect.AnnotatedType" : "AnnotatedType",
77
"java.lang.reflect.Constructor" : "Constructor",
88
"java.lang.reflect.Executable" : "Executable",
9+
"java.lang.reflect.Field" : "Field",
910
"java.lang.reflect.GenericArrayType" : "GenericArrayType",
1011
"java.lang.reflect.GenericDeclaration" : "GenericDeclaration",
1112
"java.lang.reflect.Method" : "Method",

0 commit comments

Comments
 (0)