Skip to content

Commit 57960f1

Browse files
committed
Lazy initialize resolved topic reference URL
We don't always use the URL property on a resolvedtopicreference and its expensive to compute, so it makes sense to make this a lazy initialization.
1 parent e76ef47 commit 57960f1

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

Sources/SwiftDocC/Model/Identifier.swift

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -364,12 +364,25 @@ public struct ResolvedTopicReference: Hashable, Codable, Equatable, CustomString
364364
let path: String
365365
let fragment: String?
366366
let sourceLanguages: Set<SourceLanguage>
367-
let url: URL
368-
let pathComponents: [String]
369-
let absoluteString: String
370-
371367
let identifierPathAndFragment: String
372368

369+
lazy var url: URL = {
370+
var components = URLComponents()
371+
components.scheme = ResolvedTopicReference.urlScheme
372+
components.host = bundleIdentifier
373+
components.path = path
374+
components.fragment = fragment
375+
return components.url!
376+
}()
377+
378+
lazy var pathComponents: [String] = {
379+
return url.pathComponents
380+
}()
381+
382+
lazy var absoluteString: String = {
383+
return url.absoluteString
384+
}()
385+
373386
init(
374387
bundleIdentifier: String,
375388
path: String,
@@ -381,15 +394,6 @@ public struct ResolvedTopicReference: Hashable, Codable, Equatable, CustomString
381394
self.fragment = fragment
382395
self.sourceLanguages = sourceLanguages
383396
self.identifierPathAndFragment = "\(bundleIdentifier)\(path)\(fragment ?? "")"
384-
385-
var components = URLComponents()
386-
components.scheme = ResolvedTopicReference.urlScheme
387-
components.host = bundleIdentifier
388-
components.path = path
389-
components.fragment = fragment
390-
url = components.url!
391-
pathComponents = url.pathComponents
392-
absoluteString = url.absoluteString
393397
}
394398
}
395399
}

0 commit comments

Comments
 (0)