Skip to content

Revert "[SourceKit] Make each Variant keep a strong reference to its SourceKitdResponse context" #19712

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 0 additions & 28 deletions test/SourceKit/SwiftLang/basic.swift

This file was deleted.

38 changes: 12 additions & 26 deletions tools/SourceKit/tools/swift-lang/SourceKitdResponse.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,12 @@ import sourcekitd
public class SourceKitdResponse: CustomStringConvertible {

public struct Dictionary: CustomStringConvertible, CustomReflectable {
// The lifetime of this sourcekitd_variant_t is tied to the response it came
// from, so keep a reference to the response too.
private let dict: sourcekitd_variant_t
private let context: SourceKitdResponse


public init(dict: sourcekitd_variant_t, context: SourceKitdResponse) {
public init(dict: sourcekitd_variant_t) {
assert(sourcekitd_variant_get_type(dict).rawValue ==
SOURCEKITD_VARIANT_TYPE_DICTIONARY.rawValue)
self.dict = dict
self.context = context
}

public func getString(_ key: SourceKitdUID) -> String {
Expand All @@ -52,12 +47,12 @@ public class SourceKitdResponse: CustomStringConvertible {

public func getArray(_ key: SourceKitdUID) -> Array {
let value = sourcekitd_variant_dictionary_get_value(dict, key.uid)
return Array(arr: value, context: context)
return Array(arr: value)
}

public func getDictionary(_ key: SourceKitdUID) -> Dictionary {
let value = sourcekitd_variant_dictionary_get_value(dict, key.uid)
return Dictionary(dict: value, context: context)
return Dictionary(dict: value)
}

public func getOptional(_ key: SourceKitdUID) -> Variant? {
Expand All @@ -66,7 +61,7 @@ public class SourceKitdResponse: CustomStringConvertible {
SOURCEKITD_VARIANT_TYPE_NULL.rawValue {
return nil
}
return Variant(val: value, context: context)
return Variant(val: value)
}

public var description: String {
Expand All @@ -79,21 +74,17 @@ public class SourceKitdResponse: CustomStringConvertible {
}

public struct Array: CustomStringConvertible {
// The lifetime of this sourcekitd_variant_t is tied to the response it came
// from, so keep a reference to the response too.
private let arr: sourcekitd_variant_t
private let context: SourceKitdResponse

public var count: Int {
let count = sourcekitd_variant_array_get_count(arr)
return Int(count)
}

public init(arr: sourcekitd_variant_t, context: SourceKitdResponse) {
public init(arr: sourcekitd_variant_t) {
assert(sourcekitd_variant_get_type(arr).rawValue ==
SOURCEKITD_VARIANT_TYPE_ARRAY.rawValue)
self.arr = arr
self.context = context
}

public func getString(_ index: Int) -> String {
Expand All @@ -118,21 +109,20 @@ public class SourceKitdResponse: CustomStringConvertible {

public func getArray(_ index: Int) -> Array {
let value = sourcekitd_variant_array_get_value(arr, index)
return Array(arr: value, context: context)
return Array(arr: value)
}

public func getDictionary(_ index: Int) -> Dictionary {
let value = sourcekitd_variant_array_get_value(arr, index)
return Dictionary(dict: value, context: context)
return Dictionary(dict: value)
}

public func enumerate(_ applier: (_ index: Int, _ value: Variant) -> Bool) {
// The block passed to sourcekit_variant_array_apply() does not actually
// escape, it's synchronous and not called after returning.
let context = self.context
withoutActuallyEscaping(applier) { escapingApplier in
_ = sourcekitd_variant_array_apply(arr) { (index, elem) -> Bool in
return escapingApplier(Int(index), Variant(val: elem, context: context))
return escapingApplier(Int(index), Variant(val: elem))
}
}
}
Expand All @@ -144,14 +134,10 @@ public class SourceKitdResponse: CustomStringConvertible {
}

public struct Variant: CustomStringConvertible {
// The lifetime of this sourcekitd_variant_t is tied to the response it came
// from, so keep a reference to the response too.
private let val: sourcekitd_variant_t
fileprivate let context: SourceKitdResponse

fileprivate init(val: sourcekitd_variant_t, context: SourceKitdResponse) {
fileprivate init(val: sourcekitd_variant_t) {
self.val = val
self.context = context
}

public func getString() -> String {
Expand Down Expand Up @@ -181,11 +167,11 @@ public class SourceKitdResponse: CustomStringConvertible {
}

public func getArray() -> Array {
return Array(arr: val, context: context)
return Array(arr: val)
}

public func getDictionary() -> Dictionary {
return Dictionary(dict: val, context: context)
return Dictionary(dict: val)
}

public var description: String {
Expand All @@ -196,7 +182,7 @@ public class SourceKitdResponse: CustomStringConvertible {
private let resp: sourcekitd_response_t

public var value: Dictionary {
return Dictionary(dict: sourcekitd_response_get_value(resp), context: self)
return Dictionary(dict: sourcekitd_response_get_value(resp))
}

/// Copies the raw bytes of the JSON description of this documentation item.
Expand Down