|
15 | 15 | import Foundation |
16 | 16 | import SwiftParser |
17 | 17 | import SwiftSyntax |
| 18 | +import JavaKitConfigurationShared |
18 | 19 |
|
19 | 20 | final class Swift2JavaVisitor { |
20 | 21 | let translator: Swift2JavaTranslator |
| 22 | + var config: Configuration { |
| 23 | + self.translator.config |
| 24 | + } |
21 | 25 |
|
22 | 26 | init(translator: Swift2JavaTranslator) { |
23 | 27 | self.translator = translator |
@@ -48,7 +52,7 @@ final class Swift2JavaVisitor { |
48 | 52 | case .extensionDecl(let node): |
49 | 53 | self.visit(extensionDecl: node, in: parent) |
50 | 54 | case .typeAliasDecl: |
51 | | - break // TODO: Implement |
| 55 | + break // TODO: Implement; https://github.com/swiftlang/swift-java/issues/338 |
52 | 56 | case .associatedTypeDecl: |
53 | 57 | break // TODO: Implement |
54 | 58 |
|
@@ -93,7 +97,7 @@ final class Swift2JavaVisitor { |
93 | 97 | } |
94 | 98 |
|
95 | 99 | func visit(functionDecl node: FunctionDeclSyntax, in typeContext: ImportedNominalType?) { |
96 | | - guard node.shouldImport(log: log) else { |
| 100 | + guard node.shouldExtract(config: config, log: log) else { |
97 | 101 | return |
98 | 102 | } |
99 | 103 |
|
@@ -128,7 +132,7 @@ final class Swift2JavaVisitor { |
128 | 132 | } |
129 | 133 |
|
130 | 134 | func visit(variableDecl node: VariableDeclSyntax, in typeContext: ImportedNominalType?) { |
131 | | - guard node.shouldImport(log: log) else { |
| 135 | + guard node.shouldExtract(config: config, log: log) else { |
132 | 136 | return |
133 | 137 | } |
134 | 138 |
|
@@ -182,7 +186,7 @@ final class Swift2JavaVisitor { |
182 | 186 | self.log.info("Initializer must be within a current type; \(node)") |
183 | 187 | return |
184 | 188 | } |
185 | | - guard node.shouldImport(log: log) else { |
| 189 | + guard node.shouldExtract(config: config, log: log) else { |
186 | 190 | return |
187 | 191 | } |
188 | 192 |
|
@@ -212,13 +216,20 @@ final class Swift2JavaVisitor { |
212 | 216 | } |
213 | 217 |
|
214 | 218 | extension DeclSyntaxProtocol where Self: WithModifiersSyntax & WithAttributesSyntax { |
215 | | - func shouldImport(log: Logger) -> Bool { |
216 | | - guard accessControlModifiers.contains(where: { $0.isPublic }) else { |
217 | | - log.trace("Skip import '\(self.qualifiedNameForDebug)': not public") |
| 219 | + func shouldExtract(config: Configuration, log: Logger) -> Bool { |
| 220 | + let meetsRequiredAccessLevel: Bool = |
| 221 | + switch config.effectiveMinimumInputAccessLevelMode { |
| 222 | + case .public: self.isPublic |
| 223 | + case .package: self.isAtLeastPackage |
| 224 | + case .internal: self.isAtLeastInternal |
| 225 | + } |
| 226 | + |
| 227 | + guard meetsRequiredAccessLevel else { |
| 228 | + log.debug("Skip import '\(self.qualifiedNameForDebug)': not at least \(config.effectiveMinimumInputAccessLevelMode)") |
218 | 229 | return false |
219 | 230 | } |
220 | 231 | guard !attributes.contains(where: { $0.isJava }) else { |
221 | | - log.trace("Skip import '\(self.qualifiedNameForDebug)': is Java") |
| 232 | + log.debug("Skip import '\(self.qualifiedNameForDebug)': is Java") |
222 | 233 | return false |
223 | 234 | } |
224 | 235 |
|
|
0 commit comments