mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This used to cause duplicated results in call signature completions. i.e.: AlertViewController(#^HERE^# // 2 x (coder: NSCoder) rdar://problem/65081358
92 lines
3.2 KiB
Swift
92 lines
3.2 KiB
Swift
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=INITIALIZER | %FileCheck %s --check-prefix=INITIALIZER
|
|
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=METHOD | %FileCheck %s --check-prefix=METHOD
|
|
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=AVAILABILITY | %FileCheck %s --check-prefix=AVAILABILITY
|
|
// RUN: %swift-ide-test -code-completion -source-filename %s -code-completion-token=STATIC | %FileCheck %s --check-prefix=STATIC
|
|
|
|
protocol MyProtocol {
|
|
init(init1: Int)
|
|
init(init2: Int)
|
|
|
|
func method(method1: Int)
|
|
func method(method2: Int)
|
|
}
|
|
|
|
extension MyProtocol {
|
|
init(init2: Int) { self.init(init1: init2) }
|
|
init(init3: Int) { self.init(init1: init3) }
|
|
|
|
func method(method2: Int) {}
|
|
func method(method3: Int) {}
|
|
}
|
|
|
|
class Base {
|
|
init(init4: Int) { }
|
|
func method(method4: Int) {}
|
|
}
|
|
|
|
class MyClass: Base, MyProtocol {
|
|
|
|
required init(init1: Int) { super.init(init4: init1) }
|
|
required init(init2: Int) { super.init(init4: init1) }
|
|
init(init3: Int) { super.init(init4: init1) }
|
|
override init(init4: Int) { super.init(init4: init1) }
|
|
|
|
func method(method1: Int)
|
|
func method(method2: Int) {}
|
|
func method(method3: Int) {}
|
|
override func method(method4: Int) {}
|
|
}
|
|
|
|
func testConstructer() {
|
|
MyClass(#^INITIALIZER^#)
|
|
// INITIALIZER: Begin completions, 4 items
|
|
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init1: Int#}[')'][#MyClass#];
|
|
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init2: Int#}[')'][#MyClass#];
|
|
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init3: Int#}[')'][#MyClass#];
|
|
// INITIALIZER-DAG: Decl[Constructor]/CurrNominal: ['(']{#init4: Int#}[')'][#MyClass#];
|
|
// INITIALIZER: End completions
|
|
}
|
|
|
|
func testMethod(obj: MyClass) {
|
|
obj.method(#^METHOD^#)
|
|
// METHOD: Begin completions, 4 items
|
|
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method1: Int#}[')'][#Void#];
|
|
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method2: Int#}[')'][#Void#];
|
|
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method3: Int#}[')'][#Void#];
|
|
// METHOD-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method4: Int#}[')'][#Void#];
|
|
// METHOD: End completions
|
|
}
|
|
|
|
protocol HasUnavailable {}
|
|
extension HasUnavailable {
|
|
func method(method1: Int) {}
|
|
|
|
@available(*, unavailable)
|
|
func method(method2: Int) {}
|
|
}
|
|
struct MyStruct: HasUnavailable {
|
|
@available(*, unavailable)
|
|
func method(method1: Int) {}
|
|
|
|
func method(method2: Int) {}
|
|
}
|
|
func testUnavailable(val: MyStruct) {
|
|
val.method(#^AVAILABILITY^#)
|
|
// AVAILABILITY: Begin completions, 2 items
|
|
// AVAILABILITY-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#method2: Int#}[')'][#Void#];
|
|
// AVAILABILITY-DAG: Decl[InstanceMethod]/Super: ['(']{#method1: Int#}[')'][#Void#];
|
|
// AVAILABILITY: End completions
|
|
}
|
|
|
|
struct TestStatic {
|
|
static func method(_ self: TestStatic) -> () -> Void {}
|
|
func method() -> Void {}
|
|
}
|
|
func testStaticFunc() {
|
|
TestStatic.method(#^STATIC^#)
|
|
// STATIC: Begin completions
|
|
// STATIC-DAG: Decl[StaticMethod]/CurrNominal: ['(']{#(self): TestStatic#}[')'][#() -> Void#];
|
|
// STATIC-DAG: Decl[InstanceMethod]/CurrNominal: ['(']{#(self): TestStatic#}[')'][#() -> Void#];
|
|
// STATIC: End completions
|
|
}
|