Skip to content

Commit 38455e2

Browse files
committed
[Compile Time Constant Extraction] Print fully-qualified type names
1 parent 514996e commit 38455e2

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

lib/ConstExtract/ConstExtract.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,17 @@ class NominalTypeConformanceCollector : public swift::ASTWalker {
4848
}
4949
};
5050

51+
std::string toFullyQualifiedTypeNameString(const swift::Type &Type) {
52+
std::string TypeNameOutput;
53+
llvm::raw_string_ostream OutputStream(TypeNameOutput);
54+
swift::PrintOptions Options;
55+
Options.FullyQualifiedTypes = true;
56+
Options.PreferTypeRepr = true;
57+
Type.print(OutputStream, Options);
58+
OutputStream.flush();
59+
return TypeNameOutput;
60+
}
61+
5162
} // namespace
5263

5364
namespace swift {
@@ -171,7 +182,7 @@ gatherConstValuesForPrimary(const std::unordered_set<std::string> &Protocols,
171182
return Result;
172183
}
173184

174-
static std::string toString(const CompileTimeValue *Value) {
185+
std::string toString(const CompileTimeValue *Value) {
175186
switch (Value->getKind()) {
176187
case CompileTimeValue::RawLiteral:
177188
return cast<RawLiteralValue>(Value)->getValue();
@@ -193,7 +204,7 @@ bool writeAsJSONToFile(const std::vector<ConstValueTypeInfo> &ConstValueInfos,
193204
for (const auto &TypeInfo : ConstValueInfos) {
194205
JSON.object([&] {
195206
const auto *TypeDecl = TypeInfo.TypeDecl;
196-
JSON.attribute("typeName", TypeDecl->getName().str().str());
207+
JSON.attribute("typeName", toFullyQualifiedTypeNameString(TypeDecl->getDeclaredInterfaceType()));
197208
JSON.attribute(
198209
"kind",
199210
TypeDecl->getDescriptiveKindName(TypeDecl->getDescriptiveKind())
@@ -203,7 +214,7 @@ bool writeAsJSONToFile(const std::vector<ConstValueTypeInfo> &ConstValueInfos,
203214
JSON.object([&] {
204215
const auto *PropertyDecl = PropertyInfo.VarDecl;
205216
JSON.attribute("label", PropertyDecl->getName().str().str());
206-
JSON.attribute("type", PropertyDecl->getType().getString());
217+
JSON.attribute("type", toFullyQualifiedTypeNameString(PropertyDecl->getType()));
207218
JSON.attribute("isStatic",
208219
PropertyDecl->isStatic() ? "true" : "false");
209220
JSON.attribute("isComputed",

test/ConstExtraction/fields.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,75 +7,75 @@
77
// CHECK: [
88
// CHECK-NEXT:
99
// CHECK-NEXT: {
10-
// CHECK-NEXT: "typeName": "Foo",
10+
// CHECK-NEXT: "typeName": "fields.Foo",
1111
// CHECK-NEXT: "kind": "struct",
1212
// CHECK-NEXT: "properties": [
1313
// CHECK-NEXT: {
1414
// CHECK-NEXT: "label": "p1",
15-
// CHECK-NEXT: "type": "String",
15+
// CHECK-NEXT: "type": "Swift.String",
1616
// CHECK-NEXT: "isStatic": "false",
1717
// CHECK-NEXT: "isComputed": "false",
1818
// CHECK-NEXT: "value": "Hello, World"
1919
// CHECK-NEXT: },
2020
// CHECK-NEXT: {
2121
// CHECK-NEXT: "label": "p5",
22-
// CHECK-NEXT: "type": "[Int]",
22+
// CHECK-NEXT: "type": "[Swift.Int]",
2323
// CHECK-NEXT: "isStatic": "false",
2424
// CHECK-NEXT: "isComputed": "false",
2525
// CHECK-NEXT: "value": "[1, 2, 3, 4, 5, 6, 7, 8, 9]"
2626
// CHECK-NEXT: },
2727
// CHECK-NEXT: {
2828
// CHECK-NEXT: "label": "p6",
29-
// CHECK-NEXT: "type": "Bool",
29+
// CHECK-NEXT: "type": "Swift.Bool",
3030
// CHECK-NEXT: "isStatic": "false",
3131
// CHECK-NEXT: "isComputed": "false",
3232
// CHECK-NEXT: "value": "false"
3333
// CHECK-NEXT: },
3434
// CHECK-NEXT: {
3535
// CHECK-NEXT: "label": "p7",
36-
// CHECK-NEXT: "type": "Bool?",
36+
// CHECK-NEXT: "type": "Swift.Bool?",
3737
// CHECK-NEXT: "isStatic": "false",
3838
// CHECK-NEXT: "isComputed": "false",
3939
// CHECK-NEXT: "value": "nil"
4040
// CHECK-NEXT: },
4141
// CHECK-NEXT: {
4242
// CHECK-NEXT: "label": "p8",
43-
// CHECK-NEXT: "type": "(Int, Float)",
43+
// CHECK-NEXT: "type": "(Swift.Int, Swift.Float)",
4444
// CHECK-NEXT: "isStatic": "false",
4545
// CHECK-NEXT: "isComputed": "false",
4646
// CHECK-NEXT: "value": "(42, 6.6)"
4747
// CHECK-NEXT: },
4848
// CHECK-NEXT: {
4949
// CHECK-NEXT: "label": "p9",
50-
// CHECK-NEXT: "type": "[String : Int]",
50+
// CHECK-NEXT: "type": "[Swift.String : Swift.Int]",
5151
// CHECK-NEXT: "isStatic": "false",
5252
// CHECK-NEXT: "isComputed": "false",
5353
// CHECK-NEXT: "value": "[(\"One\", 1), (\"Two\", 2), (\"Three\", 3)]"
5454
// CHECK-NEXT: },
5555
// CHECK-NEXT: {
5656
// CHECK-NEXT: "label": "p0",
57-
// CHECK-NEXT: "type": "Int",
57+
// CHECK-NEXT: "type": "Swift.Int",
5858
// CHECK-NEXT: "isStatic": "true",
5959
// CHECK-NEXT: "isComputed": "false",
6060
// CHECK-NEXT: "value": "11"
6161
// CHECK-NEXT: },
6262
// CHECK-NEXT: {
6363
// CHECK-NEXT: "label": "p2",
64-
// CHECK-NEXT: "type": "Float",
64+
// CHECK-NEXT: "type": "Swift.Float",
6565
// CHECK-NEXT: "isStatic": "true",
6666
// CHECK-NEXT: "isComputed": "false",
6767
// CHECK-NEXT: "value": "42.2"
6868
// CHECK-NEXT: },
6969
// CHECK-NEXT: {
7070
// CHECK-NEXT: "label": "p3",
71-
// CHECK-NEXT: "type": "Int",
71+
// CHECK-NEXT: "type": "Swift.Int",
7272
// CHECK-NEXT: "isStatic": "false",
7373
// CHECK-NEXT: "isComputed": "true",
7474
// CHECK-NEXT: "value": "Unknown"
7575
// CHECK-NEXT: },
7676
// CHECK-NEXT: {
7777
// CHECK-NEXT: "label": "p4",
78-
// CHECK-NEXT: "type": "Int",
78+
// CHECK-NEXT: "type": "Swift.Int",
7979
// CHECK-NEXT: "isStatic": "true",
8080
// CHECK-NEXT: "isComputed": "true",
8181
// CHECK-NEXT: "value": "Unknown"

0 commit comments

Comments
 (0)