Skip to content

Commit 43523df

Browse files
author
Nathan Hawes
committed
[IDE] Remove call to getFormalAccess() in inferAccessSyntactically()
It should have been recursing into inferAccessSyntactically() to avoid any chance of triggering name lookup.
1 parent 11d20b8 commit 43523df

File tree

5 files changed

+282
-33
lines changed

5 files changed

+282
-33
lines changed

test/SourceKit/DocumentStructure/Inputs/main.swift

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,19 @@ deinit {
149149
}
150150

151151
#if false
152-
extension Result {
153-
func foo() {}
154-
}
155-
#endif
152+
extension Result {
153+
func foo() {}
154+
}
155+
156+
extension Outer {
157+
class Inner {
158+
deinit {}
159+
}
160+
}
161+
162+
public extension Outer2 {
163+
class Inner2 {
164+
deinit {}
165+
}
166+
}
167+
#endif

test/SourceKit/DocumentStructure/structure.swift.empty.response

Lines changed: 87 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
key.offset: 0,
3-
key.length: 2472,
3+
key.length: 2587,
44
key.diagnostic_stage: source.diagnostic.stage.swift.parse,
55
key.substructure: [
66
{
@@ -1519,24 +1519,102 @@
15191519
{
15201520
key.kind: source.lang.swift.decl.extension,
15211521
key.name: "Result",
1522-
key.offset: 2425,
1523-
key.length: 38,
1524-
key.nameoffset: 2435,
1522+
key.offset: 2424,
1523+
key.length: 36,
1524+
key.nameoffset: 2434,
15251525
key.namelength: 6,
1526-
key.bodyoffset: 2443,
1527-
key.bodylength: 19,
1526+
key.bodyoffset: 2442,
1527+
key.bodylength: 17,
15281528
key.substructure: [
15291529
{
15301530
key.kind: source.lang.swift.decl.function.method.instance,
15311531
key.name: "foo()",
1532-
key.offset: 2447,
1532+
key.offset: 2445,
15331533
key.length: 13,
1534-
key.nameoffset: 2452,
1534+
key.nameoffset: 2450,
15351535
key.namelength: 5,
1536-
key.bodyoffset: 2459,
1536+
key.bodyoffset: 2457,
15371537
key.bodylength: 0
15381538
}
15391539
]
1540+
},
1541+
{
1542+
key.kind: source.lang.swift.decl.extension,
1543+
key.name: "Outer",
1544+
key.offset: 2462,
1545+
key.length: 53,
1546+
key.nameoffset: 2472,
1547+
key.namelength: 5,
1548+
key.bodyoffset: 2479,
1549+
key.bodylength: 35,
1550+
key.substructure: [
1551+
{
1552+
key.kind: source.lang.swift.decl.class,
1553+
key.name: "Inner",
1554+
key.offset: 2482,
1555+
key.length: 31,
1556+
key.nameoffset: 2488,
1557+
key.namelength: 5,
1558+
key.bodyoffset: 2495,
1559+
key.bodylength: 17,
1560+
key.substructure: [
1561+
{
1562+
key.kind: source.lang.swift.decl.function.method.instance,
1563+
key.name: "deinit",
1564+
key.offset: 2500,
1565+
key.length: 9,
1566+
key.nameoffset: 2500,
1567+
key.namelength: 6,
1568+
key.bodyoffset: 2508,
1569+
key.bodylength: 0
1570+
}
1571+
]
1572+
}
1573+
]
1574+
},
1575+
{
1576+
key.kind: source.lang.swift.decl.extension,
1577+
key.accessibility: source.lang.swift.accessibility.public,
1578+
key.name: "Outer2",
1579+
key.offset: 2524,
1580+
key.length: 55,
1581+
key.nameoffset: 2534,
1582+
key.namelength: 6,
1583+
key.bodyoffset: 2542,
1584+
key.bodylength: 36,
1585+
key.attributes: [
1586+
{
1587+
key.offset: 2517,
1588+
key.length: 6,
1589+
key.attribute: source.decl.attribute.public
1590+
}
1591+
],
1592+
key.substructure: [
1593+
{
1594+
key.kind: source.lang.swift.decl.class,
1595+
key.accessibility: source.lang.swift.accessibility.public,
1596+
key.name: "Inner2",
1597+
key.offset: 2545,
1598+
key.length: 32,
1599+
key.nameoffset: 2551,
1600+
key.namelength: 6,
1601+
key.bodyoffset: 2559,
1602+
key.bodylength: 17,
1603+
key.substructure: [
1604+
{
1605+
key.kind: source.lang.swift.decl.function.method.instance,
1606+
key.accessibility: source.lang.swift.accessibility.public,
1607+
key.name: "deinit",
1608+
key.offset: 2564,
1609+
key.length: 9,
1610+
key.nameoffset: 2564,
1611+
key.namelength: 6,
1612+
key.bodyoffset: 2572,
1613+
key.bodylength: 0
1614+
}
1615+
]
1616+
}
1617+
]
15401618
}
15411619
],
15421620
key.diagnostics: [

test/SourceKit/DocumentStructure/structure.swift.foobar.response

Lines changed: 87 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
key.offset: 0,
3-
key.length: 2472,
3+
key.length: 2587,
44
key.diagnostic_stage: source.diagnostic.stage.swift.parse,
55
key.substructure: [
66
{
@@ -1519,24 +1519,102 @@
15191519
{
15201520
key.kind: source.lang.swift.decl.extension,
15211521
key.name: "Result",
1522-
key.offset: 2425,
1523-
key.length: 38,
1524-
key.nameoffset: 2435,
1522+
key.offset: 2424,
1523+
key.length: 36,
1524+
key.nameoffset: 2434,
15251525
key.namelength: 6,
1526-
key.bodyoffset: 2443,
1527-
key.bodylength: 19,
1526+
key.bodyoffset: 2442,
1527+
key.bodylength: 17,
15281528
key.substructure: [
15291529
{
15301530
key.kind: source.lang.swift.decl.function.method.instance,
15311531
key.name: "foo()",
1532-
key.offset: 2447,
1532+
key.offset: 2445,
15331533
key.length: 13,
1534-
key.nameoffset: 2452,
1534+
key.nameoffset: 2450,
15351535
key.namelength: 5,
1536-
key.bodyoffset: 2459,
1536+
key.bodyoffset: 2457,
15371537
key.bodylength: 0
15381538
}
15391539
]
1540+
},
1541+
{
1542+
key.kind: source.lang.swift.decl.extension,
1543+
key.name: "Outer",
1544+
key.offset: 2462,
1545+
key.length: 53,
1546+
key.nameoffset: 2472,
1547+
key.namelength: 5,
1548+
key.bodyoffset: 2479,
1549+
key.bodylength: 35,
1550+
key.substructure: [
1551+
{
1552+
key.kind: source.lang.swift.decl.class,
1553+
key.name: "Inner",
1554+
key.offset: 2482,
1555+
key.length: 31,
1556+
key.nameoffset: 2488,
1557+
key.namelength: 5,
1558+
key.bodyoffset: 2495,
1559+
key.bodylength: 17,
1560+
key.substructure: [
1561+
{
1562+
key.kind: source.lang.swift.decl.function.method.instance,
1563+
key.name: "deinit",
1564+
key.offset: 2500,
1565+
key.length: 9,
1566+
key.nameoffset: 2500,
1567+
key.namelength: 6,
1568+
key.bodyoffset: 2508,
1569+
key.bodylength: 0
1570+
}
1571+
]
1572+
}
1573+
]
1574+
},
1575+
{
1576+
key.kind: source.lang.swift.decl.extension,
1577+
key.accessibility: source.lang.swift.accessibility.public,
1578+
key.name: "Outer2",
1579+
key.offset: 2524,
1580+
key.length: 55,
1581+
key.nameoffset: 2534,
1582+
key.namelength: 6,
1583+
key.bodyoffset: 2542,
1584+
key.bodylength: 36,
1585+
key.attributes: [
1586+
{
1587+
key.offset: 2517,
1588+
key.length: 6,
1589+
key.attribute: source.decl.attribute.public
1590+
}
1591+
],
1592+
key.substructure: [
1593+
{
1594+
key.kind: source.lang.swift.decl.class,
1595+
key.accessibility: source.lang.swift.accessibility.public,
1596+
key.name: "Inner2",
1597+
key.offset: 2545,
1598+
key.length: 32,
1599+
key.nameoffset: 2551,
1600+
key.namelength: 6,
1601+
key.bodyoffset: 2559,
1602+
key.bodylength: 17,
1603+
key.substructure: [
1604+
{
1605+
key.kind: source.lang.swift.decl.function.method.instance,
1606+
key.accessibility: source.lang.swift.accessibility.public,
1607+
key.name: "deinit",
1608+
key.offset: 2564,
1609+
key.length: 9,
1610+
key.nameoffset: 2564,
1611+
key.namelength: 6,
1612+
key.bodyoffset: 2572,
1613+
key.bodylength: 0
1614+
}
1615+
]
1616+
}
1617+
]
15401618
}
15411619
],
15421620
key.diagnostics: [

test/SourceKit/DocumentStructure/structure.swift.response

Lines changed: 87 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
key.offset: 0,
3-
key.length: 2472,
3+
key.length: 2587,
44
key.diagnostic_stage: source.diagnostic.stage.swift.parse,
55
key.substructure: [
66
{
@@ -1519,24 +1519,102 @@
15191519
{
15201520
key.kind: source.lang.swift.decl.extension,
15211521
key.name: "Result",
1522-
key.offset: 2425,
1523-
key.length: 38,
1524-
key.nameoffset: 2435,
1522+
key.offset: 2424,
1523+
key.length: 36,
1524+
key.nameoffset: 2434,
15251525
key.namelength: 6,
1526-
key.bodyoffset: 2443,
1527-
key.bodylength: 19,
1526+
key.bodyoffset: 2442,
1527+
key.bodylength: 17,
15281528
key.substructure: [
15291529
{
15301530
key.kind: source.lang.swift.decl.function.method.instance,
15311531
key.name: "foo()",
1532-
key.offset: 2447,
1532+
key.offset: 2445,
15331533
key.length: 13,
1534-
key.nameoffset: 2452,
1534+
key.nameoffset: 2450,
15351535
key.namelength: 5,
1536-
key.bodyoffset: 2459,
1536+
key.bodyoffset: 2457,
15371537
key.bodylength: 0
15381538
}
15391539
]
1540+
},
1541+
{
1542+
key.kind: source.lang.swift.decl.extension,
1543+
key.name: "Outer",
1544+
key.offset: 2462,
1545+
key.length: 53,
1546+
key.nameoffset: 2472,
1547+
key.namelength: 5,
1548+
key.bodyoffset: 2479,
1549+
key.bodylength: 35,
1550+
key.substructure: [
1551+
{
1552+
key.kind: source.lang.swift.decl.class,
1553+
key.name: "Inner",
1554+
key.offset: 2482,
1555+
key.length: 31,
1556+
key.nameoffset: 2488,
1557+
key.namelength: 5,
1558+
key.bodyoffset: 2495,
1559+
key.bodylength: 17,
1560+
key.substructure: [
1561+
{
1562+
key.kind: source.lang.swift.decl.function.method.instance,
1563+
key.name: "deinit",
1564+
key.offset: 2500,
1565+
key.length: 9,
1566+
key.nameoffset: 2500,
1567+
key.namelength: 6,
1568+
key.bodyoffset: 2508,
1569+
key.bodylength: 0
1570+
}
1571+
]
1572+
}
1573+
]
1574+
},
1575+
{
1576+
key.kind: source.lang.swift.decl.extension,
1577+
key.accessibility: source.lang.swift.accessibility.public,
1578+
key.name: "Outer2",
1579+
key.offset: 2524,
1580+
key.length: 55,
1581+
key.nameoffset: 2534,
1582+
key.namelength: 6,
1583+
key.bodyoffset: 2542,
1584+
key.bodylength: 36,
1585+
key.attributes: [
1586+
{
1587+
key.offset: 2517,
1588+
key.length: 6,
1589+
key.attribute: source.decl.attribute.public
1590+
}
1591+
],
1592+
key.substructure: [
1593+
{
1594+
key.kind: source.lang.swift.decl.class,
1595+
key.accessibility: source.lang.swift.accessibility.public,
1596+
key.name: "Inner2",
1597+
key.offset: 2545,
1598+
key.length: 32,
1599+
key.nameoffset: 2551,
1600+
key.namelength: 6,
1601+
key.bodyoffset: 2559,
1602+
key.bodylength: 17,
1603+
key.substructure: [
1604+
{
1605+
key.kind: source.lang.swift.decl.function.method.instance,
1606+
key.accessibility: source.lang.swift.accessibility.public,
1607+
key.name: "deinit",
1608+
key.offset: 2564,
1609+
key.length: 9,
1610+
key.nameoffset: 2564,
1611+
key.namelength: 6,
1612+
key.bodyoffset: 2572,
1613+
key.bodylength: 0
1614+
}
1615+
]
1616+
}
1617+
]
15401618
}
15411619
],
15421620
key.diagnostics: [

tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,8 +1143,11 @@ static Optional<AccessLevel> inferAccessSyntactically(const ValueDecl *D) {
11431143

11441144
if (D->getKind() == DeclKind::Destructor ||
11451145
D->getKind() == DeclKind::EnumElement) {
1146-
if (auto container = dyn_cast<NominalTypeDecl>(D->getDeclContext()))
1147-
return std::max(container->getFormalAccess(), AccessLevel::Internal);
1146+
if (auto container = dyn_cast<NominalTypeDecl>(D->getDeclContext())) {
1147+
if (auto containerAccess = inferAccessSyntactically(container))
1148+
return std::max(containerAccess.getValue(), AccessLevel::Internal);
1149+
return None;
1150+
}
11481151
return AccessLevel::Private;
11491152
}
11501153

0 commit comments

Comments
 (0)