|
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