mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Merge pull request #37440 from slavapestov/clean-up-generic-requirement-checking
Clean up duplicate logic for checking if generic requirements are satisfied
This commit is contained in:
@@ -393,7 +393,7 @@ extension C : P8 {}
|
||||
public class F<T : D> {}
|
||||
extension F : P8 {}
|
||||
|
||||
// CHECK16: <synthesized>extension <ref:Class>F</ref> where <ref:GenericTypeParam>T</ref> : <ref:Class>D</ref> {
|
||||
// CHECK16: <decl:Class>public class <loc>F<<decl:GenericTypeParam>T</decl>></loc> where <ref:GenericTypeParam>T</ref> : <ref:module>print_synthesized_extensions</ref>.<ref:Class>D</ref> {</decl>
|
||||
// CHECK16-NEXT: <decl:Func>public func <loc>bar()</loc></decl>
|
||||
// CHECK16-NEXT: }</synthesized>
|
||||
|
||||
|
||||
132
test/IDE/print_synthesized_extensions_superclass.swift
Normal file
132
test/IDE/print_synthesized_extensions_superclass.swift
Normal file
@@ -0,0 +1,132 @@
|
||||
// RUN: %empty-directory(%t)
|
||||
// RUN: %target-swift-frontend -emit-module-path %t/print_synthesized_extensions_superclass.swiftmodule -emit-module-doc -emit-module-doc-path %t/print_synthesized_extensions_superclass.swiftdoc %s
|
||||
// RUN: %target-swift-ide-test -print-module -synthesize-extension -print-interface -no-empty-line-between-members -module-to-print=print_synthesized_extensions_superclass -I %t -source-filename=%s | %FileCheck %s
|
||||
|
||||
public class Base {}
|
||||
public class Middle<T> : Base {}
|
||||
public class Most : Middle<Int> {}
|
||||
|
||||
public protocol P {
|
||||
associatedtype T
|
||||
associatedtype U
|
||||
}
|
||||
|
||||
public extension P where T : Base {
|
||||
func withBase() {}
|
||||
}
|
||||
|
||||
public extension P where T : Middle<U> {
|
||||
func withMiddleAbstract() {}
|
||||
}
|
||||
|
||||
public extension P where T : Middle<Int> {
|
||||
func withMiddleConcrete() {}
|
||||
}
|
||||
|
||||
public extension P where T : Most {
|
||||
func withMost() {}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: public struct S1 : print_synthesized_extensions_superclass.P {
|
||||
// CHECK-NEXT: public typealias T = print_synthesized_extensions_superclass.Base
|
||||
// CHECK-NEXT: public typealias U = Int
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECk-NEXT: }
|
||||
|
||||
public struct S1 : P {
|
||||
public typealias T = Base
|
||||
public typealias U = Int
|
||||
}
|
||||
|
||||
// CHECK-LABEL: public struct S2 : print_synthesized_extensions_superclass.P {
|
||||
// CHECK-NEXT: public typealias T = print_synthesized_extensions_superclass.Middle<Int>
|
||||
// CHECK-NEXT: public typealias U = Int
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECk-NEXT: public func withMiddleAbstract()
|
||||
// CHECk-NEXT: public func withMiddleConcrete()
|
||||
// CHECk-NEXT: }
|
||||
|
||||
public struct S2 : P {
|
||||
public typealias T = Middle<Int>
|
||||
public typealias U = Int
|
||||
}
|
||||
|
||||
// CHECK-LABEL: public struct S3 : print_synthesized_extensions_superclass.P {
|
||||
// CHECK-NEXT: public typealias T = print_synthesized_extensions_superclass.Middle<String>
|
||||
// CHECK-NEXT: public typealias U = String
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECK-NEXT: public func withMiddleAbstract()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
public struct S3 : P {
|
||||
public typealias T = Middle<String>
|
||||
public typealias U = String
|
||||
}
|
||||
|
||||
// CHECK-LABEL: public struct S4 : print_synthesized_extensions_superclass.P {
|
||||
// CHECK-NEXT: public typealias T = print_synthesized_extensions_superclass.Most
|
||||
// CHECK-NEXT: public typealias U = Int
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECK-NEXT: public func withMiddleAbstract()
|
||||
// CHECK-NEXT: public func withMiddleConcrete()
|
||||
// CHECK-NEXT: public func withMost()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
public struct S4 : P {
|
||||
public typealias T = Most
|
||||
public typealias U = Int
|
||||
}
|
||||
|
||||
// CHECK-LABEL: public struct S5 : print_synthesized_extensions_superclass.P {
|
||||
// CHECK-NEXT: public typealias T = print_synthesized_extensions_superclass.Most
|
||||
// CHECK-NEXT: public typealias U = String
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECK-NEXT: public func withMiddleConcrete()
|
||||
// CHECK-NEXT: public func withMost()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
public struct S5 : P {
|
||||
public typealias T = Most
|
||||
public typealias U = String
|
||||
}
|
||||
|
||||
// CHECK-LABEL: public struct S6<T, U> : print_synthesized_extensions_superclass.P where T : print_synthesized_extensions_superclass.Base {
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-LABEL: extension S6 where T : Middle<U> {
|
||||
// CHECK-NEXT: public func withMiddleAbstract()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-LABEL: extension S6 where T : Middle<Int> {
|
||||
// CHECK-NEXT: public func withMiddleConcrete()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-LABEL: extension S6 where T : Most {
|
||||
// CHECK-NEXT: public func withMost()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
public struct S6<T, U> : P where T : Base {}
|
||||
|
||||
// CHECK-LABEL: public struct S7<T, U> : print_synthesized_extensions_superclass.P where T : print_synthesized_extensions_superclass.Middle<U> {
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECK-NEXT: public func withMiddleAbstract()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-LABEL: extension S7 where T : Middle<Int> {
|
||||
// CHECK-NEXT: public func withMiddleConcrete()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
// CHECK-LABEL: extension S7 where T : Most {
|
||||
// CHECK-NEXT: public func withMost()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
public struct S7<T, U> : P where T : Middle<U> {}
|
||||
|
||||
// CHECK-LABEL: public struct S8<T, U> : print_synthesized_extensions_superclass.P where T : print_synthesized_extensions_superclass.Most {
|
||||
// CHECK-NEXT: public func withBase()
|
||||
// CHECK-NEXT: public func withMiddleConcrete()
|
||||
// CHECK-NEXT: public func withMost()
|
||||
// CHECK-NEXT: }
|
||||
|
||||
public struct S8<T, U> : P where T : Most {}
|
||||
@@ -26,16 +26,13 @@ class E {
|
||||
}
|
||||
|
||||
class F<T> where T : module_with_class_extension.D {
|
||||
|
||||
func bar()
|
||||
}
|
||||
|
||||
extension F : module_with_class_extension.P8 {
|
||||
}
|
||||
|
||||
extension F where T : D {
|
||||
|
||||
func bar()
|
||||
}
|
||||
|
||||
protocol P8 {
|
||||
|
||||
associatedtype T
|
||||
@@ -270,193 +267,162 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 328,
|
||||
key.offset: 330,
|
||||
key.length: 4
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.identifier,
|
||||
key.offset: 335,
|
||||
key.length: 3
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 344,
|
||||
key.length: 9
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.class,
|
||||
key.name: "F",
|
||||
key.usr: "s:27module_with_class_extension1FC",
|
||||
key.offset: 338,
|
||||
key.offset: 354,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.typeidentifier,
|
||||
key.offset: 342,
|
||||
key.offset: 358,
|
||||
key.length: 27
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.protocol,
|
||||
key.name: "P8",
|
||||
key.usr: "s:27module_with_class_extension2P8P",
|
||||
key.offset: 370,
|
||||
key.offset: 386,
|
||||
key.length: 2
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 378,
|
||||
key.length: 9
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.class,
|
||||
key.name: "F",
|
||||
key.usr: "s:27module_with_class_extension1FC",
|
||||
key.offset: 388,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 390,
|
||||
key.length: 5
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.generic_type_param,
|
||||
key.name: "T",
|
||||
key.usr: "s:27module_with_class_extension1FC1Txmfp",
|
||||
key.offset: 396,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.class,
|
||||
key.name: "D",
|
||||
key.usr: "s:27module_with_class_extension1DC",
|
||||
key.offset: 400,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 409,
|
||||
key.length: 4
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.identifier,
|
||||
key.offset: 414,
|
||||
key.length: 3
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 423,
|
||||
key.offset: 394,
|
||||
key.length: 8
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.identifier,
|
||||
key.offset: 432,
|
||||
key.offset: 403,
|
||||
key.length: 2
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 442,
|
||||
key.offset: 413,
|
||||
key.length: 14
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.identifier,
|
||||
key.offset: 457,
|
||||
key.offset: 428,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 462,
|
||||
key.offset: 433,
|
||||
key.length: 9
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.protocol,
|
||||
key.name: "P8",
|
||||
key.usr: "s:27module_with_class_extension2P8P",
|
||||
key.offset: 472,
|
||||
key.offset: 443,
|
||||
key.length: 2
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 475,
|
||||
key.offset: 446,
|
||||
key.length: 5
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.generic_type_param,
|
||||
key.name: "Self",
|
||||
key.usr: "s:27module_with_class_extension2P8PA2A1DC1TRczrlE4Selfxmfp",
|
||||
key.offset: 481,
|
||||
key.offset: 452,
|
||||
key.length: 4
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.associatedtype,
|
||||
key.name: "T",
|
||||
key.usr: "s:27module_with_class_extension2P8P1TQa",
|
||||
key.offset: 486,
|
||||
key.offset: 457,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.typeidentifier,
|
||||
key.offset: 490,
|
||||
key.offset: 461,
|
||||
key.length: 27
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.class,
|
||||
key.name: "D",
|
||||
key.usr: "s:27module_with_class_extension1DC",
|
||||
key.offset: 518,
|
||||
key.offset: 489,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 527,
|
||||
key.offset: 498,
|
||||
key.length: 4
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.identifier,
|
||||
key.offset: 532,
|
||||
key.offset: 503,
|
||||
key.length: 3
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 541,
|
||||
key.offset: 512,
|
||||
key.length: 9
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.protocol,
|
||||
key.name: "P8",
|
||||
key.usr: "s:27module_with_class_extension2P8P",
|
||||
key.offset: 551,
|
||||
key.offset: 522,
|
||||
key.length: 2
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 554,
|
||||
key.offset: 525,
|
||||
key.length: 5
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.generic_type_param,
|
||||
key.name: "Self",
|
||||
key.usr: "s:27module_with_class_extension2P8PA2A1EC1TRczrlE4Selfxmfp",
|
||||
key.offset: 560,
|
||||
key.offset: 531,
|
||||
key.length: 4
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.associatedtype,
|
||||
key.name: "T",
|
||||
key.usr: "s:27module_with_class_extension2P8P1TQa",
|
||||
key.offset: 565,
|
||||
key.offset: 536,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.typeidentifier,
|
||||
key.offset: 569,
|
||||
key.offset: 540,
|
||||
key.length: 27
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.ref.class,
|
||||
key.name: "E",
|
||||
key.usr: "s:27module_with_class_extension1EC",
|
||||
key.offset: 597,
|
||||
key.offset: 568,
|
||||
key.length: 1
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.keyword,
|
||||
key.offset: 606,
|
||||
key.offset: 577,
|
||||
key.length: 4
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.syntaxtype.identifier,
|
||||
key.offset: 611,
|
||||
key.offset: 582,
|
||||
key.length: 3
|
||||
}
|
||||
]
|
||||
@@ -590,8 +556,19 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
}
|
||||
],
|
||||
key.offset: 272,
|
||||
key.length: 54,
|
||||
key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>F</decl.name><<decl.generic_type_param usr=\"s:27module_with_class_extension1FC1Txmfp\"><decl.generic_type_param.name>T</decl.generic_type_param.name></decl.generic_type_param>> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:27module_with_class_extension1FC1Txmfp\">T</ref.generic_type_param> : <ref.class usr=\"s:27module_with_class_extension1DC\">D</ref.class></decl.generic_type_requirement></decl.class>"
|
||||
key.length: 70,
|
||||
key.fully_annotated_decl: "<decl.class><syntaxtype.keyword>class</syntaxtype.keyword> <decl.name>F</decl.name><<decl.generic_type_param usr=\"s:27module_with_class_extension1FC1Txmfp\"><decl.generic_type_param.name>T</decl.generic_type_param.name></decl.generic_type_param>> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:27module_with_class_extension1FC1Txmfp\">T</ref.generic_type_param> : <ref.class usr=\"s:27module_with_class_extension1DC\">D</ref.class></decl.generic_type_requirement></decl.class>",
|
||||
key.entities: [
|
||||
{
|
||||
key.kind: source.lang.swift.decl.function.method.instance,
|
||||
key.name: "bar()",
|
||||
key.usr: "s:27module_with_class_extension2P8PA2A1DC1TRczrlE3baryyF::SYNTHESIZED::s:27module_with_class_extension1FC",
|
||||
key.original_usr: "s:27module_with_class_extension2P8PA2A1DC1TRczrlE3baryyF",
|
||||
key.offset: 330,
|
||||
key.length: 10,
|
||||
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>bar</decl.name>()</decl.function.method.instance>"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.decl.extension.class,
|
||||
@@ -605,7 +582,7 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
key.description: "T : D"
|
||||
}
|
||||
],
|
||||
key.offset: 328,
|
||||
key.offset: 344,
|
||||
key.length: 48,
|
||||
key.fully_annotated_decl: "<decl.extension.class>extension <decl.name><ref.class usr=\"s:27module_with_class_extension1FC\">F</ref.class></decl.name> : <ref.protocol usr=\"s:27module_with_class_extension2P8P\">P8</ref.protocol></decl.extension.class>",
|
||||
key.conforms: [
|
||||
@@ -621,38 +598,11 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
key.usr: "s:27module_with_class_extension1FC"
|
||||
}
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.decl.extension.class,
|
||||
key.generic_requirements: [
|
||||
{
|
||||
key.description: "T : D"
|
||||
}
|
||||
],
|
||||
key.offset: 378,
|
||||
key.length: 43,
|
||||
key.fully_annotated_decl: "<syntaxtype.keyword>extension</syntaxtype.keyword> <ref.class usr=\"s:27module_with_class_extension1FC\">F</ref.class> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:27module_with_class_extension1FC1Txmfp\">T</ref.generic_type_param> : <ref.class usr=\"s:27module_with_class_extension1DC\">D</ref.class></decl.generic_type_requirement>",
|
||||
key.extends: {
|
||||
key.kind: source.lang.swift.ref.class,
|
||||
key.name: "F",
|
||||
key.usr: "s:27module_with_class_extension1FC"
|
||||
},
|
||||
key.entities: [
|
||||
{
|
||||
key.kind: source.lang.swift.decl.function.method.instance,
|
||||
key.name: "bar()",
|
||||
key.usr: "s:27module_with_class_extension2P8PA2A1DC1TRczrlE3baryyF::SYNTHESIZED::s:27module_with_class_extension1FC",
|
||||
key.original_usr: "s:27module_with_class_extension2P8PA2A1DC1TRczrlE3baryyF",
|
||||
key.offset: 409,
|
||||
key.length: 10,
|
||||
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>bar</decl.name>()</decl.function.method.instance>"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
key.kind: source.lang.swift.decl.protocol,
|
||||
key.name: "P8",
|
||||
key.usr: "s:27module_with_class_extension2P8P",
|
||||
key.offset: 423,
|
||||
key.offset: 394,
|
||||
key.length: 37,
|
||||
key.fully_annotated_decl: "<decl.protocol><syntaxtype.keyword>protocol</syntaxtype.keyword> <decl.name>P8</decl.name></decl.protocol>",
|
||||
key.entities: [
|
||||
@@ -660,7 +610,7 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
key.kind: source.lang.swift.decl.associatedtype,
|
||||
key.name: "T",
|
||||
key.usr: "s:27module_with_class_extension2P8P1TQa",
|
||||
key.offset: 442,
|
||||
key.offset: 413,
|
||||
key.length: 16,
|
||||
key.fully_annotated_decl: "<decl.associatedtype><syntaxtype.keyword>associatedtype</syntaxtype.keyword> <decl.name>T</decl.name></decl.associatedtype>"
|
||||
}
|
||||
@@ -673,7 +623,7 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
key.description: "Self.T : D"
|
||||
}
|
||||
],
|
||||
key.offset: 462,
|
||||
key.offset: 433,
|
||||
key.length: 77,
|
||||
key.fully_annotated_decl: "<decl.extension.protocol>extension <decl.name><ref.protocol usr=\"s:27module_with_class_extension2P8P\">P8</ref.protocol></decl.name> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:27module_with_class_extension2P8PA2A1DC1TRczrlE4Selfxmfp\">Self</ref.generic_type_param>.<ref.associatedtype usr=\"s:27module_with_class_extension2P8P1TQa\">T</ref.associatedtype> : <ref.class usr=\"s:27module_with_class_extension1DC\">D</ref.class></decl.generic_type_requirement></decl.extension.protocol>",
|
||||
key.extends: {
|
||||
@@ -686,7 +636,7 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
key.kind: source.lang.swift.decl.function.method.instance,
|
||||
key.name: "bar()",
|
||||
key.usr: "s:27module_with_class_extension2P8PA2A1DC1TRczrlE3baryyF",
|
||||
key.offset: 527,
|
||||
key.offset: 498,
|
||||
key.length: 10,
|
||||
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>bar</decl.name>()</decl.function.method.instance>"
|
||||
}
|
||||
@@ -699,7 +649,7 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
key.description: "Self.T : E"
|
||||
}
|
||||
],
|
||||
key.offset: 541,
|
||||
key.offset: 512,
|
||||
key.length: 77,
|
||||
key.fully_annotated_decl: "<decl.extension.protocol>extension <decl.name><ref.protocol usr=\"s:27module_with_class_extension2P8P\">P8</ref.protocol></decl.name> <syntaxtype.keyword>where</syntaxtype.keyword> <decl.generic_type_requirement><ref.generic_type_param usr=\"s:27module_with_class_extension2P8PA2A1EC1TRczrlE4Selfxmfp\">Self</ref.generic_type_param>.<ref.associatedtype usr=\"s:27module_with_class_extension2P8P1TQa\">T</ref.associatedtype> : <ref.class usr=\"s:27module_with_class_extension1EC\">E</ref.class></decl.generic_type_requirement></decl.extension.protocol>",
|
||||
key.extends: {
|
||||
@@ -712,7 +662,7 @@ extension P8 where Self.T : module_with_class_extension.E {
|
||||
key.kind: source.lang.swift.decl.function.method.instance,
|
||||
key.name: "baz()",
|
||||
key.usr: "s:27module_with_class_extension2P8PA2A1EC1TRczrlE3bazyyF",
|
||||
key.offset: 606,
|
||||
key.offset: 577,
|
||||
key.length: 10,
|
||||
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>baz</decl.name>()</decl.function.method.instance>"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user