From f65487a1cef1f5c43cde99fc1ae3497935dcecb5 Mon Sep 17 00:00:00 2001 From: nakiwo Date: Wed, 7 Mar 2018 16:05:06 +0900 Subject: [PATCH] Sort code generation related lists. --- Sources/DIGenKit/CodeGenerator.swift | 6 +++--- Sources/DIGenKit/Generating/Resolver.swift | 5 +++-- Tests/DIGenKitTests/Example/ABCDTests.swift | 20 ++++++++++---------- Tests/DIGenKitTests/Example/AppTests.swift | 10 +++++----- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Sources/DIGenKit/CodeGenerator.swift b/Sources/DIGenKit/CodeGenerator.swift index c14d493..7ac8247 100644 --- a/Sources/DIGenKit/CodeGenerator.swift +++ b/Sources/DIGenKit/CodeGenerator.swift @@ -48,8 +48,8 @@ public final class CodeGenerator { } context = [ - "moduleNames": imports.map { $0.moduleName }, - "resolvers": resolvers, + "moduleNames": imports.map({ $0.moduleName }).sorted(by: <), + "resolvers": resolvers.sorted { (lhs, rhs) in return lhs.name < rhs.name }, ] } @@ -64,7 +64,7 @@ public final class CodeGenerator { {% endif %}{% endfor %} {% for resolver in resolvers %} extension {{ resolver.name }} { - {% for method in resolver.generatedMethods %} + {% for method in resolver.sortedGeneratedMethods %} func {{ method.name }}({{ method.parametersDeclaration }}) -> {{ method.returnTypeName }} { {% for line in method.bodyLines %}{{ line }}{% if not forloop.last %} {% endif %}{% endfor %} diff --git a/Sources/DIGenKit/Generating/Resolver.swift b/Sources/DIGenKit/Generating/Resolver.swift index dc7862f..a04efd4 100644 --- a/Sources/DIGenKit/Generating/Resolver.swift +++ b/Sources/DIGenKit/Generating/Resolver.swift @@ -41,7 +41,7 @@ struct Resolver { let resolveMethods: [ResolveMethod] let injectMethods: [InjectMethod] - let generatedMethods: [GeneratedMethod] + let sortedGeneratedMethods: [GeneratedMethod] init(type: Type, allTypes: [Type]) throws { guard @@ -149,6 +149,7 @@ struct Resolver { } injectMethods = nodesForInjectMethods.flatMap(InjectMethod.init(node:)) - generatedMethods = resolveMethods as [GeneratedMethod] + injectMethods as [GeneratedMethod] + let generatedMethods = resolveMethods as [GeneratedMethod] + injectMethods as [GeneratedMethod] + sortedGeneratedMethods = generatedMethods.sorted { (lhs, rhs) in return lhs.name < rhs.name } } } diff --git a/Tests/DIGenKitTests/Example/ABCDTests.swift b/Tests/DIGenKitTests/Example/ABCDTests.swift index ff4cf9b..101fe7e 100644 --- a/Tests/DIGenKitTests/Example/ABCDTests.swift +++ b/Tests/DIGenKitTests/Example/ABCDTests.swift @@ -59,12 +59,19 @@ final class ABCDTests: XCTestCase { // Generated by dikitgen. // - import XCTest import DIGenKit import DIKit + import XCTest extension ABCDResolver { + func injectToE(_ e: E) -> Void { + let a = resolveA() + let c = resolveC() + let b = resolveB() + e.dependency = E.Dependency(ea: a, ec: c, eb: b) + } + func resolveA() -> A { return A(dependency: .init()) } @@ -74,21 +81,14 @@ final class ABCDTests: XCTestCase { return B(dependency: .init(ba: a)) } - func resolveD() -> D { - return provideD() - } - func resolveC() -> C { let a = resolveA() let d = resolveD() return C.makeInstance(dependency: .init(ca: a, cd: d)) } - func injectToE(_ e: E) -> Void { - let a = resolveA() - let c = resolveC() - let b = resolveB() - e.dependency = E.Dependency(ea: a, ec: c, eb: b) + func resolveD() -> D { + return provideD() } } diff --git a/Tests/DIGenKitTests/Example/AppTests.swift b/Tests/DIGenKitTests/Example/AppTests.swift index 2184279..ea99461 100644 --- a/Tests/DIGenKitTests/Example/AppTests.swift +++ b/Tests/DIGenKitTests/Example/AppTests.swift @@ -45,20 +45,20 @@ final class AppTests: XCTestCase { // Generated by dikitgen. // - import XCTest import DIGenKit import DIKit + import XCTest extension AppResolver { - func resolveAppResolver() -> AppResolver { - return provideAppResolver() - } - func resolveAPIClient() -> APIClient { return provideAPIClient() } + func resolveAppResolver() -> AppResolver { + return provideAppResolver() + } + func resolveDetailViewController(index: Int) -> DetailViewController { let apiClient = resolveAPIClient() return DetailViewController(dependency: .init(index: index, apiClient: apiClient))