mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[CodeComplete] Update enclosed archetypes to the protocols they conform to.
Swift SVN r31723
This commit is contained in:
@@ -969,12 +969,12 @@ public:
|
|||||||
|
|
||||||
std::function<Type(Type)> getTransformerFunc() {
|
std::function<Type(Type)> getTransformerFunc() {
|
||||||
return [&](Type Ty) {
|
return [&](Type Ty) {
|
||||||
if (Ty->getDesugaredType()->getKind() != TypeKind::Archetype)
|
if (Ty->getKind() != TypeKind::Archetype)
|
||||||
return Ty;
|
return Ty;
|
||||||
if (Cache.count(Ty.getPointer()) > 0) {
|
if (Cache.count(Ty.getPointer()) > 0) {
|
||||||
return Cache[Ty.getPointer()];
|
return Cache[Ty.getPointer()];
|
||||||
}
|
}
|
||||||
Type Result = Ty->getDesugaredType();
|
Type Result = Ty;
|
||||||
auto *RootArc = cast<ArchetypeType>(Result.getPointer());
|
auto *RootArc = cast<ArchetypeType>(Result.getPointer());
|
||||||
llvm::SmallVector<Identifier, 1> Names;
|
llvm::SmallVector<Identifier, 1> Names;
|
||||||
bool SelfDerived = false;
|
bool SelfDerived = false;
|
||||||
@@ -995,8 +995,10 @@ public:
|
|||||||
} else if (TypeParams.count(RootArc->getName()) != 0 &&
|
} else if (TypeParams.count(RootArc->getName()) != 0 &&
|
||||||
!RootArc->getParent()) {
|
!RootArc->getParent()) {
|
||||||
Result = TypeParams[RootArc->getName()];
|
Result = TypeParams[RootArc->getName()];
|
||||||
} else {
|
}
|
||||||
auto ATT = Result->castTo<ArchetypeType>();
|
|
||||||
|
auto ATT = dyn_cast<ArchetypeType>(Result.getPointer());
|
||||||
|
if (ATT && !ATT->getParent()) {
|
||||||
auto Conformances = ATT->getConformsTo();
|
auto Conformances = ATT->getConformsTo();
|
||||||
if (Conformances.size() == 1) {
|
if (Conformances.size() == 1) {
|
||||||
Result = Conformances[0]->getDeclaredType();
|
Result = Conformances[0]->getDeclaredType();
|
||||||
@@ -1009,6 +1011,8 @@ public:
|
|||||||
ConformedTypes);
|
ConformedTypes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Result->getKind() != TypeKind::Archetype)
|
||||||
|
Result = Result.transform(getTransformerFunc());
|
||||||
Cache[Ty.getPointer()] = Result;
|
Cache[Ty.getPointer()] = Result;
|
||||||
return Result;
|
return Result;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ func protocolExtCollection1b(a: CollectionType) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PRIVATE_NOMINAL_MEMBERS_2: Begin completions
|
// PRIVATE_NOMINAL_MEMBERS_2: Begin completions
|
||||||
// PRIVATE_NOMINAL_MEMBERS_2-DAG: map({#(transform): Self.Generator.Element throws -> T##Self.Generator.Element throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_2-DAG: map({#(transform): (Self.Generator.Element) throws -> T##(Self.Generator.Element) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_2-DAG-NOT: Decl{{.*}}: last
|
// PRIVATE_NOMINAL_MEMBERS_2-DAG-NOT: Decl{{.*}}: last
|
||||||
// PRIVATE_NOMINAL_MEMBERS_2: End completions
|
// PRIVATE_NOMINAL_MEMBERS_2: End completions
|
||||||
|
|
||||||
@@ -90,20 +90,20 @@ func protocolExtCollection2<C : CollectionType where C.Index : BidirectionalInde
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PRIVATE_NOMINAL_MEMBERS_3: Begin completions
|
// PRIVATE_NOMINAL_MEMBERS_3: Begin completions
|
||||||
// PRIVATE_NOMINAL_MEMBERS_3-DAG: map({#(transform): C.Generator.Element throws -> T##C.Generator.Element throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_3-DAG: Decl[InstanceMethod]/Super: map({#(transform): (C.Generator.Element) throws -> T##(C.Generator.Element) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_3-DAG: Decl[InstanceVar]/Super: last[#C.Generator.Element?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_3-DAG: Decl[InstanceVar]/Super: last[#C.Generator.Element?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_3-DAG-NOT: Decl{{.*}}: indexOf({#({{.*}}): Self.Generator.Element
|
// PRIVATE_NOMINAL_MEMBERS_3-DAG-NOT: Decl{{.*}}: indexOf({#({{.*}}): Self.Generator.Element
|
||||||
// PRIVATE_NOMINAL_MEMBERS_3-DAG: indexOf({#(predicate): C.Generator.Element throws -> Bool##C.Generator.Element throws -> Bool#})[' rethrows'][#C.Index?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_3-DAG: indexOf({#(predicate): (C.Generator.Element) throws -> Bool##(C.Generator.Element) throws -> Bool#})[' rethrows'][#C.Index?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_3: End completions
|
// PRIVATE_NOMINAL_MEMBERS_3: End completions
|
||||||
|
|
||||||
func protocolExtArray<T : Equatable>(a: [T]) {
|
func protocolExtArray<T : Equatable>(a: [T]) {
|
||||||
a.#^PRIVATE_NOMINAL_MEMBERS_4^#
|
a.#^PRIVATE_NOMINAL_MEMBERS_4^#
|
||||||
}
|
}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_4: Begin completions
|
// PRIVATE_NOMINAL_MEMBERS_4: Begin completions
|
||||||
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: map({#(transform): T throws -> T##T throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: map({#(transform): (Equatable) throws -> T##(Equatable) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceVar]/Super: last[#T?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceVar]/Super: last[#Equatable?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: indexOf({#(element): T#})[#Int?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: indexOf({#(element): Equatable#})[#Int?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: indexOf({#(predicate): T throws -> Bool##T throws -> Bool#})[' rethrows'][#Int?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: indexOf({#(predicate): (Equatable) throws -> Bool##(Equatable) throws -> Bool#})[' rethrows'][#Int?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_4: End completions
|
// PRIVATE_NOMINAL_MEMBERS_4: End completions
|
||||||
|
|
||||||
func testArchetypeReplacement1<FOO : Equatable>(a: [FOO]) {
|
func testArchetypeReplacement1<FOO : Equatable>(a: [FOO]) {
|
||||||
@@ -114,13 +114,13 @@ func testArchetypeReplacement1<FOO : Equatable>(a: [FOO]) {
|
|||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#atIndex: Int#})[#Void#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#atIndex: Int#})[#Void#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Equatable?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Equatable?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: generate()[#IndexingGenerator<[FOO]>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: generate()[#IndexingGenerator<[Equatable]>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: isEmpty[#Bool#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: isEmpty[#Bool#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: first[#FOO?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: first[#Equatable?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#ArraySlice<FOO>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropLast({#(n): Int#})[#ArraySlice<FOO>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropLast({#(n): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#ArraySlice<FOO>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: suffix({#(maxLength): Int#})[#ArraySlice<FOO>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: suffix({#(maxLength): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
|
||||||
|
|
||||||
|
|
||||||
func testArchetypeReplacement2<BAR : Equatable>(a: [BAR]) {
|
func testArchetypeReplacement2<BAR : Equatable>(a: [BAR]) {
|
||||||
@@ -131,15 +131,15 @@ func testArchetypeReplacement2<BAR : Equatable>(a: [BAR]) {
|
|||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#atIndex: Int#})[#Void#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#atIndex: Int#})[#Void#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Equatable?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Equatable?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropFirst()[#ArraySlice<BAR>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropFirst()[#ArraySlice<Equatable>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropLast()[#ArraySlice<BAR>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropLast()[#ArraySlice<Equatable>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: enumerate()[#EnumerateSequence<[BAR]>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: enumerate()[#EnumerateSequence<[Equatable]>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: minElement({#(isOrderedBefore): (BAR, BAR) throws -> Bool##(BAR, BAR) throws -> Bool#})[' rethrows'][#BAR?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: minElement({#(isOrderedBefore): (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: maxElement({#(isOrderedBefore): (BAR, BAR) throws -> Bool##(BAR, BAR) throws -> Bool#})[' rethrows'][#BAR?#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: maxElement({#(isOrderedBefore): (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reduce({#(initial): T#}, {#combine: (T, BAR) throws -> T##(T, BAR) throws -> T#})[' rethrows'][#T#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reduce({#(initial): T#}, {#combine: (T, Equatable) throws -> T##(T, Equatable) throws -> T#})[' rethrows'][#T#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reverse()[#ReverseCollection<[BAR]>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reverse()[#ReverseCollection<[Equatable]>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reverse()[#ReverseRandomAccessCollection<[BAR]>#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reverse()[#ReverseRandomAccessCollection<[Equatable]>#]{{; name=.+}}
|
||||||
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: flatMap({#(transform): BAR throws -> SequenceType##BAR throws -> SequenceType#})[' rethrows'][#[S.Generator.Element]#]{{; name=.+}}
|
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: flatMap({#(transform): (Equatable) throws -> SequenceType##(Equatable) throws -> SequenceType#})[' rethrows'][#[S.Generator.Element]#]{{; name=.+}}
|
||||||
|
|
||||||
func testArchetypeReplacement3 (a : [Int]) {
|
func testArchetypeReplacement3 (a : [Int]) {
|
||||||
a.#^PRIVATE_NOMINAL_MEMBERS_7^#
|
a.#^PRIVATE_NOMINAL_MEMBERS_7^#
|
||||||
@@ -150,7 +150,7 @@ func testArchetypeReplacement3 (a : [Int]) {
|
|||||||
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: removeLast()[#Int#]
|
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: removeLast()[#Int#]
|
||||||
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Int?#]
|
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Int?#]
|
||||||
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceVar]/Super: first[#Int?#]
|
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceVar]/Super: first[#Int?#]
|
||||||
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: map({#(transform): Int throws -> T##Int throws -> T#})[' rethrows'][#[T]#]
|
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: map({#(transform): (Int) throws -> T##(Int) throws -> T#})[' rethrows'][#[T]#]
|
||||||
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropLast({#(n): Int#})[#ArraySlice<Int>#]
|
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropLast({#(n): Int#})[#ArraySlice<Int>#]
|
||||||
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#AnySequence<Int>#]
|
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#AnySequence<Int>#]
|
||||||
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#AnySequence<Int>#]
|
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#AnySequence<Int>#]
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func optionalMembers2<T : HasOptionalMembers1>(a: T) {
|
|||||||
T.#^OPTIONAL_MEMBERS_2^#
|
T.#^OPTIONAL_MEMBERS_2^#
|
||||||
}
|
}
|
||||||
// OPTIONAL_MEMBERS_2: Begin completions, 3 items
|
// OPTIONAL_MEMBERS_2: Begin completions, 3 items
|
||||||
// OPTIONAL_MEMBERS_2-DAG: Decl[InstanceMethod]/Super: optionalInstanceFunc!({#self: T.Type#})[#() -> Int#]{{; name=.+$}}
|
// OPTIONAL_MEMBERS_2-DAG: Decl[InstanceMethod]/Super: optionalInstanceFunc!({#self: HasOptionalMembers1.Protocol#})[#() -> Int#]{{; name=.+$}}
|
||||||
// OPTIONAL_MEMBERS_2-DAG: Decl[StaticMethod]/Super: optionalClassFunc!()[#Int#]{{; name=.+$}}
|
// OPTIONAL_MEMBERS_2-DAG: Decl[StaticMethod]/Super: optionalClassFunc!()[#Int#]{{; name=.+$}}
|
||||||
// OPTIONAL_MEMBERS_2-DAG: Decl[StaticVar]/Super: optionalClassProperty[#Int?#]{{; name=.+$}}
|
// OPTIONAL_MEMBERS_2-DAG: Decl[StaticVar]/Super: optionalClassProperty[#Int?#]{{; name=.+$}}
|
||||||
// OPTIONAL_MEMBERS_2: End completions
|
// OPTIONAL_MEMBERS_2: End completions
|
||||||
|
|||||||
Reference in New Issue
Block a user