mirror of
https://github.com/apple/swift.git
synced 2026-06-20 15:42:51 +02:00
d866c99d66
Fixes incorrect StaticFunctionCall extraction for cases where the
function was being called on an instance (common in builders)
```
public static var baz: [Foo] {
Foo(name: "MyFooProvider.bars.1").me()
}
```
fixes: rdar://163359435
---------
Co-authored-by: Deniz Dizman <ddizman@apple.com>
135 lines
4.2 KiB
Swift
135 lines
4.2 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: echo "[MyProto]" > %t/protocols.json
|
|
|
|
// RUN: %target-swift-frontend -typecheck -emit-const-values-path %t/ExtractMemberFunctions.swiftconstvalues -const-gather-protocols-file %t/protocols.json -primary-file %s
|
|
// RUN: cat %t/ExtractMemberFunctions.swiftconstvalues 2>&1 | %FileCheck %s
|
|
|
|
protocol MyProto {}
|
|
|
|
struct MyStruct {
|
|
func myMethod(arg: String) -> String {
|
|
""
|
|
}
|
|
static func myStaticFunc() -> MyStruct {
|
|
MyStruct()
|
|
}
|
|
func me() -> MyStruct {
|
|
self
|
|
}
|
|
}
|
|
|
|
class MyClass {
|
|
func myMethod(arg: String) -> Int {
|
|
5
|
|
}
|
|
}
|
|
|
|
struct Statics: MyProto {
|
|
var prop1 = MyStruct().myMethod(arg: "struct arg")
|
|
var prop2 = MyClass().myMethod(arg: "class arg")
|
|
var prop3 = MyStruct().myMethod(arg: "second struct").lowercased()
|
|
var prop4 = MyStruct.myStaticFunc().me()
|
|
}
|
|
|
|
// CHECK: "label": "prop1",
|
|
// CHECK-NEXT: "type": "Swift.String",
|
|
// CHECK: "valueKind": "MemberFunctionCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "baseValue": {
|
|
// CHECK-NEXT: "valueKind": "InitCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractMemberFunctions.MyStruct",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "calls": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "memberLabel": "myMethod",
|
|
// CHECK-NEXT: "arguments": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "arg",
|
|
// CHECK-NEXT: "type": "Swift.String",
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "struct arg"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: "label": "prop2",
|
|
// CHECK-NEXT: "type": "Swift.Int",
|
|
// CHECK: "valueKind": "MemberFunctionCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "baseValue": {
|
|
// CHECK-NEXT: "valueKind": "InitCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractMemberFunctions.MyClass",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "calls": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "memberLabel": "myMethod",
|
|
// CHECK-NEXT: "arguments": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "arg",
|
|
// CHECK-NEXT: "type": "Swift.String",
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "class arg"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: "label": "prop3",
|
|
// CHECK-NEXT: "type": "Swift.String",
|
|
// CHECK: "valueKind": "MemberFunctionCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "baseValue": {
|
|
// CHECK-NEXT: "valueKind": "InitCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractMemberFunctions.MyStruct",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "calls": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "memberLabel": "myMethod",
|
|
// CHECK-NEXT: "arguments": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "label": "arg",
|
|
// CHECK-NEXT: "type": "Swift.String",
|
|
// CHECK-NEXT: "valueKind": "RawLiteral",
|
|
// CHECK-NEXT: "value": "second struct"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "memberLabel": "lowercased",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: "label": "prop4",
|
|
// CHECK-NEXT: "type": "ExtractMemberFunctions.MyStruct",
|
|
// CHECK: "valueKind": "MemberFunctionCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "baseValue": {
|
|
// CHECK-NEXT: "valueKind": "StaticFunctionCall",
|
|
// CHECK-NEXT: "value": {
|
|
// CHECK-NEXT: "type": "ExtractMemberFunctions.MyStruct",
|
|
// CHECK-NEXT: "memberLabel": "myStaticFunc",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: },
|
|
// CHECK-NEXT: "calls": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "memberLabel": "me",
|
|
// CHECK-NEXT: "arguments": []
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|