Skip to content

Commit 09dbae5

Browse files
committed
[LL FIR] add more restrictions to getNonLocalContainingOrThisDeclaration
^KTIJ-25437 KT-MR-10036
1 parent ff65324 commit 09dbae5

26 files changed

+1518
-1
lines changed

analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ internal fun PsiElement.getNonLocalContainingOrThisDeclaration(predicate: (KtDec
125125
parent is KtCallableDeclaration &&
126126
!notNullCandidate.isPartOf(parent) ||
127127
parent is KtClassInitializer ||
128-
parent is KtObjectLiteralExpression
128+
parent is KtObjectLiteralExpression ||
129+
parent is KtCallElement
129130
) {
130131
// Candidate turned out to be local. Let's find another one.
131132
candidate = null
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package one
2+
3+
annotation class Anno(val s: String)
4+
5+
@Anno(f<caret>un(): String {
6+
7+
}())
8+
class TopLevelClass
Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
1+
RAW_FIR:
2+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
3+
[ResolvedTo(RAW_FIR)] annotations container
4+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
5+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
6+
LAZY_super<R|kotlin/Any|>
7+
}
8+
9+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
10+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
11+
12+
}
13+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
14+
}
15+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
16+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
17+
super<R|kotlin/Any|>()
18+
}
19+
20+
}
21+
22+
IMPORTS:
23+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
24+
[ResolvedTo(RAW_FIR)] annotations container
25+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
26+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
27+
LAZY_super<R|kotlin/Any|>
28+
}
29+
30+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
31+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
32+
33+
}
34+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
35+
}
36+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
37+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
38+
super<R|kotlin/Any|>()
39+
}
40+
41+
}
42+
43+
COMPILER_REQUIRED_ANNOTATIONS:
44+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
45+
[ResolvedTo(RAW_FIR)] annotations container
46+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
47+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
48+
LAZY_super<R|kotlin/Any|>
49+
}
50+
51+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
52+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
53+
54+
}
55+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
56+
}
57+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
58+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
59+
super<R|kotlin/Any|>()
60+
}
61+
62+
}
63+
64+
COMPANION_GENERATION:
65+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
66+
[ResolvedTo(RAW_FIR)] annotations container
67+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
68+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
69+
LAZY_super<R|kotlin/Any|>
70+
}
71+
72+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
73+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
74+
75+
}
76+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
77+
}
78+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
79+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
80+
super<R|kotlin/Any|>()
81+
}
82+
83+
}
84+
85+
SUPER_TYPES:
86+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
87+
[ResolvedTo(RAW_FIR)] annotations container
88+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
89+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
90+
LAZY_super<R|kotlin/Any|>
91+
}
92+
93+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
94+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
95+
96+
}
97+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
98+
}
99+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
100+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
101+
super<R|kotlin/Any|>()
102+
}
103+
104+
}
105+
106+
TYPES:
107+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
108+
[ResolvedTo(RAW_FIR)] annotations container
109+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
110+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
111+
LAZY_super<R|kotlin/Any|>
112+
}
113+
114+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
115+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
116+
117+
}
118+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
119+
}
120+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
121+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
122+
super<R|kotlin/Any|>()
123+
}
124+
125+
}
126+
127+
STATUS:
128+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
129+
[ResolvedTo(RAW_FIR)] annotations container
130+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
131+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
132+
LAZY_super<R|kotlin/Any|>
133+
}
134+
135+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
136+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
137+
138+
}
139+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
140+
}
141+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
142+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
143+
super<R|kotlin/Any|>()
144+
}
145+
146+
}
147+
148+
EXPECT_ACTUAL_MATCHING:
149+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
150+
[ResolvedTo(RAW_FIR)] annotations container
151+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
152+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
153+
LAZY_super<R|kotlin/Any|>
154+
}
155+
156+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
157+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
158+
159+
}
160+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
161+
}
162+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
163+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
164+
super<R|kotlin/Any|>()
165+
}
166+
167+
}
168+
169+
ARGUMENTS_OF_ANNOTATIONS:
170+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
171+
[ResolvedTo(RAW_FIR)] annotations container
172+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
173+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
174+
LAZY_super<R|kotlin/Any|>
175+
}
176+
177+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
178+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
179+
180+
}
181+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
182+
}
183+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
184+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
185+
super<R|kotlin/Any|>()
186+
}
187+
188+
}
189+
190+
CONTRACTS:
191+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
192+
[ResolvedTo(RAW_FIR)] annotations container
193+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
194+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
195+
LAZY_super<R|kotlin/Any|>
196+
}
197+
198+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
199+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
200+
201+
}
202+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
203+
}
204+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
205+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
206+
super<R|kotlin/Any|>()
207+
}
208+
209+
}
210+
211+
IMPLICIT_TYPES_BODY_RESOLVE:
212+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
213+
[ResolvedTo(RAW_FIR)] annotations container
214+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
215+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
216+
LAZY_super<R|kotlin/Any|>
217+
}
218+
219+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
220+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
221+
222+
}
223+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
224+
}
225+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
226+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
227+
super<R|kotlin/Any|>()
228+
}
229+
230+
}
231+
232+
ANNOTATIONS_ARGUMENTS_MAPPING:
233+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
234+
[ResolvedTo(RAW_FIR)] annotations container
235+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
236+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
237+
LAZY_super<R|kotlin/Any|>
238+
}
239+
240+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
241+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
242+
243+
}
244+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
245+
}
246+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
247+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
248+
super<R|kotlin/Any|>()
249+
}
250+
251+
}
252+
253+
BODY_RESOLVE:
254+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
255+
[ResolvedTo(RAW_FIR)] annotations container
256+
public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| {
257+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
258+
LAZY_super<R|kotlin/Any|>
259+
}
260+
261+
public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
262+
public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String|
263+
264+
}
265+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
266+
}
267+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
268+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
269+
super<R|kotlin/Any|>()
270+
}
271+
272+
}
273+
274+
FILE RAW TO BODY:
275+
FILE: [ResolvedTo(IMPORTS)] localFunctionInsideAnnotationCall.kt
276+
[ResolvedTo(BODY_RESOLVE)] annotations container
277+
public final [ResolvedTo(BODY_RESOLVE)] annotation class Anno : R|kotlin/Annotation| {
278+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Anno] constructor([ResolvedTo(BODY_RESOLVE)] [CorrespondingProperty=one/Anno.s] s: R|kotlin/String|): R|one/Anno| {
279+
super<R|kotlin/Any|>()
280+
}
281+
282+
public final [ResolvedTo(BODY_RESOLVE)] [IsFromPrimaryConstructor=true] val s: R|kotlin/String| = R|<local>/s|
283+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Anno] get(): R|kotlin/String|
284+
285+
}
286+
@R|one/Anno|[Types](s = [ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/String| <inline=Unknown> {
287+
}
288+
.R|SubstitutionOverride<kotlin/Function0.invoke: R|kotlin/String|>|()) public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|kotlin/Any| {
289+
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
290+
super<R|kotlin/Any|>()
291+
}
292+
293+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package one
2+
3+
open class ClassWithParameter(i: () -> Unit)
4+
5+
class TopLevelClass : ClassWithParameter({
6+
fun fo<caret>o(param: String) {
7+
}
8+
})

0 commit comments

Comments
 (0)