Skip to content

Commit aba153a

Browse files
authored
Merge pull request #57 from DougGregor/javakit-macro-tests
Add a test for macro expansion of @JavaClass/@JavaMethod/@JavaField
2 parents 5ba87f6 + ddc9642 commit aba153a

File tree

5 files changed

+106
-8
lines changed

5 files changed

+106
-8
lines changed

Package.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,17 @@ let package = Package(
318318
]
319319
),
320320

321+
.testTarget(
322+
name: "JavaKitMacroTests",
323+
dependencies: [
324+
"JavaKitMacros",
325+
.product(name: "SwiftSyntaxMacrosTestSupport", package: "swift-syntax"),
326+
],
327+
swiftSettings: [
328+
.swiftLanguageMode(.v5)
329+
]
330+
),
331+
321332
.testTarget(
322333
name: "JExtractSwiftTests",
323334
dependencies: [

Sources/JavaKitMacros/JavaClassMacro.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ import SwiftSyntaxBuilder
1717
import SwiftSyntaxMacros
1818
import Foundation // for e.g. replacingOccurrences
1919

20-
enum JavaClassMacro {}
20+
package enum JavaClassMacro {}
2121

2222
extension JavaClassMacro: MemberMacro {
23-
static func expansion(
23+
package static func expansion(
2424
of node: AttributeSyntax,
2525
providingMembersOf declaration: some DeclGroupSyntax,
2626
conformingTo protocols: [TypeSyntax],
@@ -99,7 +99,7 @@ extension JavaClassMacro: MemberMacro {
9999
}
100100

101101
extension JavaClassMacro: ExtensionMacro {
102-
static func expansion(
102+
package static func expansion(
103103
of node: AttributeSyntax,
104104
attachedTo declaration: some DeclGroupSyntax,
105105
providingExtensionsOf type: some TypeSyntaxProtocol,
@@ -120,7 +120,7 @@ extension JavaClassMacro: ExtensionMacro {
120120
}
121121

122122
extension JavaClassMacro: PeerMacro {
123-
static func expansion(
123+
package static func expansion(
124124
of node: AttributeSyntax,
125125
providingPeersOf declaration: some DeclSyntaxProtocol,
126126
in context: some MacroExpansionContext

Sources/JavaKitMacros/JavaFieldMacro.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import SwiftSyntax
1616
import SwiftSyntaxBuilder
1717
import SwiftSyntaxMacros
1818

19-
enum JavaFieldMacro {}
19+
package enum JavaFieldMacro {}
2020

2121
extension JavaFieldMacro: AccessorMacro {
22-
static func expansion(
22+
package static func expansion(
2323
of node: AttributeSyntax,
2424
providingAccessorsOf declaration: some DeclSyntaxProtocol,
2525
in context: some MacroExpansionContext

Sources/JavaKitMacros/JavaMethodMacro.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ import SwiftSyntaxBuilder
1717
@_spi(Testing) import SwiftSyntaxMacroExpansion
1818
import SwiftSyntaxMacros
1919

20-
enum JavaMethodMacro {}
20+
package enum JavaMethodMacro {}
2121

2222
extension JavaMethodMacro: BodyMacro {
23-
static func expansion(
23+
package static func expansion(
2424
of node: AttributeSyntax,
2525
providingBodyFor declaration: some DeclSyntaxProtocol & WithOptionalCodeBlockSyntax,
2626
in context: some MacroExpansionContext
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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+
import JavaKitMacros
16+
import SwiftSyntax
17+
import SwiftSyntaxBuilder
18+
import SwiftSyntaxMacros
19+
import SwiftSyntaxMacrosTestSupport
20+
import XCTest
21+
22+
class JavaKitMacroTests: XCTestCase {
23+
static let javaKitMacros: [String: any Macro.Type] = [
24+
"JavaClass": JavaClassMacro.self,
25+
"JavaMethod": JavaMethodMacro.self,
26+
"JavaField": JavaFieldMacro.self
27+
]
28+
29+
func testJavaClass() throws {
30+
assertMacroExpansion("""
31+
@JavaClass("org.swift.example.HelloWorld")
32+
public struct HelloWorld {
33+
@JavaMethod
34+
public init(_ value: Int32, environment: JNIEnvironment)
35+
36+
@JavaMethod
37+
public func isBigEnough(_: Int32) -> Bool
38+
39+
@JavaField
40+
public var myField: Int64
41+
}
42+
""",
43+
expandedSource: """
44+
45+
public struct HelloWorld {
46+
public init(_ value: Int32, environment: JNIEnvironment) {
47+
self = try! Self.dynamicJavaNewObject(in: environment, arguments: value.self)
48+
}
49+
public func isBigEnough(_: Int32) -> Bool {
50+
return try! dynamicJavaMethodCall(methodName: "isBigEnough", resultType: Bool.self)
51+
}
52+
public var myField: Int64 {
53+
get {
54+
self[javaFieldName: "myField", fieldType: Int64.self]
55+
}
56+
nonmutating set {
57+
self[javaFieldName: "myField", fieldType: Int64.self] = newValue
58+
}
59+
}
60+
61+
/// The full Java class name for this Swift type.
62+
public static var fullJavaClassName: String {
63+
"org.swift.example.HelloWorld"
64+
}
65+
66+
public typealias JavaSuperclass = JavaObject
67+
68+
public var javaHolder: JavaObjectHolder
69+
70+
public var javaThis: jobject {
71+
javaHolder.object!
72+
}
73+
74+
public var javaEnvironment: JNIEnvironment {
75+
javaHolder.environment
76+
}
77+
78+
public init(javaHolder: JavaObjectHolder) {
79+
self.javaHolder = javaHolder
80+
}
81+
}
82+
""",
83+
macros: Self.javaKitMacros
84+
)
85+
}
86+
}
87+

0 commit comments

Comments
 (0)