Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
be4d3783
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
be4d3783
编写于
5月 20, 2020
作者:
D
Denis Zharkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FIR: Fix type resolution for anonymous objects
^KT-39050 Fixed
上级
4d484dd9
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
85 addition
and
6 deletion
+85
-6
compiler/fir/analysis-tests/testData/resolve/localClasses/typesFromSuperClasses.kt
...ts/testData/resolve/localClasses/typesFromSuperClasses.kt
+19
-0
compiler/fir/analysis-tests/testData/resolve/localClasses/typesFromSuperClasses.txt
...s/testData/resolve/localClasses/typesFromSuperClasses.txt
+35
-0
compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java
...org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java
+5
-0
compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java
.../kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java
+5
-0
compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt
...otlin/fir/resolve/transformers/FirSupertypesResolution.kt
+21
-6
未找到文件。
compiler/fir/analysis-tests/testData/resolve/localClasses/typesFromSuperClasses.kt
0 → 100644
浏览文件 @
be4d3783
abstract
class
Outer
{
interface
Nested
{
fun
bar
()
}
}
fun
main
()
{
object
:
Outer
()
{
fun
foo
(
n
:
Nested
)
{
n
.
bar
()
}
}
}
class
Impl
:
Outer
()
{
fun
foo
(
n
:
Nested
)
{
n
.
bar
()
}
}
compiler/fir/analysis-tests/testData/resolve/localClasses/typesFromSuperClasses.txt
0 → 100644
浏览文件 @
be4d3783
FILE: typesFromSuperClasses.kt
public abstract class Outer : R|kotlin/Any| {
public constructor(): R|Outer| {
super<R|kotlin/Any|>()
}
public abstract interface Nested : R|kotlin/Any| {
public abstract fun bar(): R|kotlin/Unit|
}
}
public final fun main(): R|kotlin/Unit| {
object : R|Outer| {
private constructor(): R|anonymous| {
super<R|Outer|>()
}
public[local] final fun foo(n: R|Outer.Nested|): R|kotlin/Unit| {
R|<local>/n|.R|/Outer.Nested.bar|()
}
}
}
public final class Impl : R|Outer| {
public constructor(): R|Impl| {
super<R|Outer|>()
}
public final fun foo(n: R|Outer.Nested|): R|kotlin/Unit| {
R|<local>/n|.R|/Outer.Nested.bar|()
}
}
compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java
浏览文件 @
be4d3783
...
...
@@ -1481,6 +1481,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest {
public
void
testImplicitInLocalClasses
()
throws
Exception
{
runTest
(
"compiler/fir/analysis-tests/testData/resolve/localClasses/implicitInLocalClasses.kt"
);
}
@TestMetadata
(
"typesFromSuperClasses.kt"
)
public
void
testTypesFromSuperClasses
()
throws
Exception
{
runTest
(
"compiler/fir/analysis-tests/testData/resolve/localClasses/typesFromSuperClasses.kt"
);
}
}
@TestMetadata
(
"compiler/fir/analysis-tests/testData/resolve/multifile"
)
...
...
compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java
浏览文件 @
be4d3783
...
...
@@ -1481,6 +1481,11 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
public
void
testImplicitInLocalClasses
()
throws
Exception
{
runTest
(
"compiler/fir/analysis-tests/testData/resolve/localClasses/implicitInLocalClasses.kt"
);
}
@TestMetadata
(
"typesFromSuperClasses.kt"
)
public
void
testTypesFromSuperClasses
()
throws
Exception
{
runTest
(
"compiler/fir/analysis-tests/testData/resolve/localClasses/typesFromSuperClasses.kt"
);
}
}
@TestMetadata
(
"compiler/fir/analysis-tests/testData/resolve/multifile"
)
...
...
compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt
浏览文件 @
be4d3783
...
...
@@ -57,7 +57,6 @@ fun <F : FirClass<F>> F.runSupertypeResolvePhaseForLocalClass(
localClassesNavigationInfo
:
LocalClassesNavigationInfo
,
):
F
{
val
supertypeComputationSession
=
SupertypeComputationSession
()
val
applySupertypesTransformer
=
FirApplySupertypesTransformer
(
supertypeComputationSession
)
val
supertypeResolverVisitor
=
FirSupertypeResolverVisitor
(
session
,
supertypeComputationSession
,
scopeSession
,
FirImmutableCompositeScope
(
ImmutableList
.
ofAll
(
currentScopeList
)),
...
...
@@ -67,6 +66,7 @@ fun <F : FirClass<F>> F.runSupertypeResolvePhaseForLocalClass(
this
.
accept
(
supertypeResolverVisitor
)
supertypeComputationSession
.
breakLoops
(
session
)
val
applySupertypesTransformer
=
FirApplySupertypesTransformer
(
supertypeComputationSession
)
return
this
.
transform
<
F
,
Nothing
?>(
applySupertypesTransformer
,
null
).
single
}
...
...
@@ -84,15 +84,25 @@ private class FirApplySupertypesTransformer(
}
override
fun
transformRegularClass
(
regularClass
:
FirRegularClass
,
data
:
Nothing
?):
CompositeTransformResult
<
FirStatement
>
{
if
(
regularClass
.
superTypeRefs
.
any
{
it
!
is
FirResolvedTypeRef
})
{
val
supertypeRefs
=
getResolvedSupertypeRefs
(
regularClass
)
applyResolvedSupertypesToClass
(
regularClass
)
return
(
regularClass
.
transformChildren
(
this
,
null
)
as
FirRegularClass
).
compose
()
}
private
fun
applyResolvedSupertypesToClass
(
firClass
:
FirClass
<
*
>)
{
if
(
firClass
.
superTypeRefs
.
any
{
it
!
is
FirResolvedTypeRef
})
{
val
supertypeRefs
=
getResolvedSupertypeRefs
(
firClass
)
// TODO: Replace with an immutable version or transformer
regula
rClass
.
replaceSuperTypeRefs
(
supertypeRefs
)
regula
rClass
.
replaceResolvePhase
(
FirResolvePhase
.
SUPER_TYPES
)
fi
rClass
.
replaceSuperTypeRefs
(
supertypeRefs
)
fi
rClass
.
replaceResolvePhase
(
FirResolvePhase
.
SUPER_TYPES
)
}
}
return
(
regularClass
.
transformChildren
(
this
,
null
)
as
FirRegularClass
).
compose
()
override
fun
transformAnonymousObject
(
anonymousObject
:
FirAnonymousObject
,
data
:
Nothing
?):
CompositeTransformResult
<
FirStatement
>
{
applyResolvedSupertypesToClass
(
anonymousObject
)
return
super
.
transformAnonymousObject
(
anonymousObject
,
data
)
}
private
fun
getResolvedSupertypeRefs
(
classLikeDeclaration
:
FirClassLikeDeclaration
<
*
>):
List
<
FirTypeRef
>
{
...
...
@@ -253,6 +263,11 @@ private class FirSupertypeResolverVisitor(
regularClass
.
acceptChildren
(
this
)
}
override
fun
visitAnonymousObject
(
anonymousObject
:
FirAnonymousObject
)
{
resolveSpecificClassLikeSupertypes
(
anonymousObject
,
anonymousObject
.
superTypeRefs
)
anonymousObject
.
acceptChildren
(
this
)
}
fun
resolveSpecificClassLikeSupertypes
(
classLikeDeclaration
:
FirClassLikeDeclaration
<
*
>,
supertypeRefs
:
List
<
FirTypeRef
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录