Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
de03124f
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,体验更适合开发者的 AI 搜索 >>
提交
de03124f
编写于
3月 16, 2021
作者:
D
Dmitriy Novozhilov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FIR] Fix reporting EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR warning
上级
21b1d97b
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
59 addition
and
16 deletion
+59
-16
compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
.../fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
+16
-4
compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
...rg/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
+1
-0
compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt
...ers/declaration/FirExposedVisibilityDeclarationChecker.kt
+6
-1
compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt
.../org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt
+2
-4
compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
...fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
+1
-0
compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt
...g/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt
+2
-1
compiler/testData/codegen/box/delegation/delegationWithPrivateConstructor.kt
...odegen/box/delegation/delegationWithPrivateConstructor.kt
+0
-1
compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.fir.kt
...nostics/tests/exposed/propertyInPrivateConstructor.fir.kt
+1
-1
compiler/testData/diagnostics/tests/exposed/propertyInSimpleConstructor.fir.kt
...gnostics/tests/exposed/propertyInSimpleConstructor.fir.kt
+1
-1
compiler/testData/diagnostics/tests/exposed/simple.fir.kt
compiler/testData/diagnostics/tests/exposed/simple.fir.kt
+1
-1
compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt
.../diagnostics/tests/sealed/privateTypeInConstructor.fir.kt
+2
-2
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt
.../frontend/api/fir/diagnostics/KtFirDataClassConverters.kt
+9
-0
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt
...lin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt
+7
-0
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt
...idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt
+10
-0
未找到文件。
compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt
浏览文件 @
de03124f
...
...
@@ -26,6 +26,8 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
import
org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import
org.jetbrains.kotlin.name.Name
import
org.jetbrains.kotlin.psi.*
import
kotlin.properties.PropertyDelegateProvider
import
kotlin.properties.ReadOnlyProperty
@Suppress
(
"UNUSED_VARIABLE"
,
"LocalVariableName"
,
"ClassName"
,
"unused"
)
...
...
@@ -133,9 +135,9 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
val
EXPOSED_VISIBILITY
by
object
:
DiagnosticGroup
(
"Exposed visibility"
)
{
val
EXPOSED_TYPEALIAS_EXPANDED_TYPE
by
exposedVisibilityError
<
KtNamedDeclaration
>(
PositioningStrategy
.
DECLARATION_NAME
)
val
EXPOSED_FUNCTION_RETURN_TYPE
by
exposedVisibilityError
<
KtNamedDeclaration
>(
PositioningStrategy
.
DECLARATION_NAME
)
val
EXPOSED_RECEIVER_TYPE
by
exposedVisibilityError
<
KtTypeReference
>()
val
EXPOSED_PROPERTY_TYPE
by
exposedVisibilityError
<
KtNamedDeclaration
>(
PositioningStrategy
.
DECLARATION_NAME
)
val
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR
by
exposedVisibilityWarning
<
KtNamedDeclaration
>(
PositioningStrategy
.
DECLARATION_NAME
)
val
EXPOSED_PARAMETER_TYPE
by
exposedVisibilityError
<
KtParameter
>(
/* // NB: for parameter FE 1.0 reports not on a name for some reason */
)
val
EXPOSED_SUPER_INTERFACE
by
exposedVisibilityError
<
KtTypeReference
>()
val
EXPOSED_SUPER_CLASS
by
exposedVisibilityError
<
KtTypeReference
>()
...
...
@@ -508,10 +510,20 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
}
}
private
inline
fun
<
reified
P
:
PsiElement
>
DiagnosticGroup
.
exposedVisibilityError
(
positioningStrategy
:
PositioningStrategy
=
PositioningStrategy
.
DEFAULT
)
=
error
<
FirSourceElement
,
P
>(
positioningStrategy
)
{
private
val
exposedVisibilityDiagnosticInit
:
DiagnosticBuilder
.()
->
Unit
=
{
parameter
<
FirEffectiveVisibility
>(
"elementVisibility"
)
parameter
<
FirMemberDeclaration
>(
"restrictingDeclaration"
)
parameter
<
FirEffectiveVisibility
>(
"restrictingVisibility"
)
}
private
inline
fun
<
reified
P
:
PsiElement
>
DiagnosticGroup
.
exposedVisibilityError
(
positioningStrategy
:
PositioningStrategy
=
PositioningStrategy
.
DEFAULT
):
PropertyDelegateProvider
<
Any
?
,
ReadOnlyProperty
<
DiagnosticGroup
,
DiagnosticData
>>
{
return
error
<
FirSourceElement
,
P
>(
positioningStrategy
,
exposedVisibilityDiagnosticInit
)
}
private
inline
fun
<
reified
P
:
PsiElement
>
DiagnosticGroup
.
exposedVisibilityWarning
(
positioningStrategy
:
PositioningStrategy
=
PositioningStrategy
.
DEFAULT
):
PropertyDelegateProvider
<
Any
?
,
ReadOnlyProperty
<
DiagnosticGroup
,
DiagnosticData
>>
{
return
warning
<
FirSourceElement
,
P
>(
positioningStrategy
,
exposedVisibilityDiagnosticInit
)
}
compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt
浏览文件 @
de03124f
...
...
@@ -133,6 +133,7 @@ object FirErrors {
val
EXPOSED_FUNCTION_RETURN_TYPE
by
error3
<
FirSourceElement
,
KtNamedDeclaration
,
FirEffectiveVisibility
,
FirMemberDeclaration
,
FirEffectiveVisibility
>(
SourceElementPositioningStrategies
.
DECLARATION_NAME
)
val
EXPOSED_RECEIVER_TYPE
by
error3
<
FirSourceElement
,
KtTypeReference
,
FirEffectiveVisibility
,
FirMemberDeclaration
,
FirEffectiveVisibility
>()
val
EXPOSED_PROPERTY_TYPE
by
error3
<
FirSourceElement
,
KtNamedDeclaration
,
FirEffectiveVisibility
,
FirMemberDeclaration
,
FirEffectiveVisibility
>(
SourceElementPositioningStrategies
.
DECLARATION_NAME
)
val
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR
by
warning3
<
FirSourceElement
,
KtNamedDeclaration
,
FirEffectiveVisibility
,
FirMemberDeclaration
,
FirEffectiveVisibility
>(
SourceElementPositioningStrategies
.
DECLARATION_NAME
)
val
EXPOSED_PARAMETER_TYPE
by
error3
<
FirSourceElement
,
KtParameter
,
FirEffectiveVisibility
,
FirMemberDeclaration
,
FirEffectiveVisibility
>()
val
EXPOSED_SUPER_INTERFACE
by
error3
<
FirSourceElement
,
KtTypeReference
,
FirEffectiveVisibility
,
FirMemberDeclaration
,
FirEffectiveVisibility
>()
val
EXPOSED_SUPER_CLASS
by
error3
<
FirSourceElement
,
KtTypeReference
,
FirEffectiveVisibility
,
FirMemberDeclaration
,
FirEffectiveVisibility
>()
...
...
compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt
浏览文件 @
de03124f
...
...
@@ -149,9 +149,14 @@ object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() {
declaration
.
returnTypeRef
.
coneTypeSafe
<
ConeKotlinType
>()
?.
findVisibilityExposure
(
context
,
propertyVisibility
)
if
(
restricting
!=
null
)
{
val
diagnostic
=
if
(
declaration
.
fromPrimaryConstructor
==
true
)
{
FirErrors
.
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR
}
else
{
FirErrors
.
EXPOSED_PROPERTY_TYPE
}
reporter
.
reportOn
(
declaration
.
source
,
FirErrors
.
EXPOSED_PROPERTY_TYPE
,
diagnostic
,
propertyVisibility
,
restricting
,
restricting
.
getEffectiveVisibility
(
context
),
...
...
compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt
浏览文件 @
de03124f
...
...
@@ -6,14 +6,11 @@
package
org.jetbrains.kotlin.fir.lightTree.fir
import
org.jetbrains.kotlin.fir.*
import
org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import
org.jetbrains.kotlin.fir.declarations.FirProperty
import
org.jetbrains.kotlin.fir.declarations.FirValueParameter
import
org.jetbrains.kotlin.fir.declarations.*
import
org.jetbrains.kotlin.fir.declarations.builder.buildProperty
import
org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import
org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import
org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
import
org.jetbrains.kotlin.fir.declarations.isFromVararg
import
org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import
org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import
org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression
...
...
@@ -88,6 +85,7 @@ class ValueParameter(
if
(
firValueParameter
.
isVararg
)
{
this
.
isFromVararg
=
true
}
this
.
fromPrimaryConstructor
=
true
}
}
}
compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
浏览文件 @
de03124f
...
...
@@ -466,6 +466,7 @@ open class RawFirBuilder(
if
(
firParameter
.
isVararg
)
{
isFromVararg
=
true
}
fromPrimaryConstructor
=
true
}
}
...
...
compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt
浏览文件 @
de03124f
...
...
@@ -177,11 +177,12 @@ val FirMemberDeclaration.containerSource: SourceElement?
}
private
object
IsFromVarargKey
:
FirDeclarationDataKey
()
private
object
IsReferredViaField
:
FirDeclarationDataKey
()
private
object
IsFromPrimaryConstructor
:
FirDeclarationDataKey
()
var
FirProperty
.
isFromVararg
:
Boolean
?
by
FirDeclarationDataRegistry
.
data
(
IsFromVarargKey
)
var
FirProperty
.
isReferredViaField
:
Boolean
?
by
FirDeclarationDataRegistry
.
data
(
IsReferredViaField
)
var
FirProperty
.
fromPrimaryConstructor
:
Boolean
?
by
FirDeclarationDataRegistry
.
data
(
IsFromPrimaryConstructor
)
// See [BindingContext.BACKING_FIELD_REQUIRED]
val
FirProperty
.
hasBackingField
:
Boolean
...
...
compiler/testData/codegen/box/delegation/delegationWithPrivateConstructor.kt
浏览文件 @
de03124f
// IGNORE_FIR_DIAGNOSTICS
class
MyObject
private
constructor
(
val
delegate
:
Interface
)
:
Interface
by
delegate
{
constructor
()
:
this
(
Delegate
())
}
...
...
compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.fir.kt
浏览文件 @
de03124f
private
enum
class
Foo
{
A
,
B
}
class
Bar
private
constructor
(
val
<!
EXPOSED_PROPERTY_TYPE
!>
foo
<!>:
Foo
)
\ No newline at end of file
class
Bar
private
constructor
(
val
<!
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR
!>
foo
<!>:
Foo
)
compiler/testData/diagnostics/tests/exposed/propertyInSimpleConstructor.fir.kt
浏览文件 @
de03124f
private
enum
class
Foo
{
A
,
B
}
class
Bar
(<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE
!>
foo
<!>:
Foo
<
!
>)
\ No newline at end of file
class
Bar
(<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR
!>
foo
<!>:
Foo
<
!
>)
compiler/testData/diagnostics/tests/exposed/simple.fir.kt
浏览文件 @
de03124f
...
...
@@ -6,7 +6,7 @@ public interface Your: <!EXPOSED_SUPER_INTERFACE!>My<!> {
fun
<
T
:
Base
>
foo
():
T
}
public
class
Derived
<
T
:
<!
EXPOSED_TYPE_PARAMETER_BOUND
!>
My
<
!
>>(<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE
!>
x
<!>:
My
<
!
>):
<!
EXPOSED_SUPER_CLASS
!>
Base
<
!
>()
{
public
class
Derived
<
T
:
<!
EXPOSED_TYPE_PARAMETER_BOUND
!>
My
<
!
>>(<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE
_IN_CONSTRUCTOR
!>
x
<!>:
My
<
!
>):
<!
EXPOSED_SUPER_CLASS
!>
Base
<
!
>()
{
constructor
(<!
EXPOSED_PARAMETER_TYPE
!>
xx
:
My
?<!>,
<!
EXPOSED_PARAMETER_TYPE
!>
x
:
My
<
!
>):
this
(
xx
?:
x
)
...
...
compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt
浏览文件 @
de03124f
...
...
@@ -4,13 +4,13 @@
private
class
Bar
sealed
class
SealedFoo
(
<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE
!>
x
<!>:
Bar
<
!
>,
<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE
_IN_CONSTRUCTOR
!>
x
<!>:
Bar
<
!
>,
<!
EXPOSED_PARAMETER_TYPE
!>
private
val
y
:
Bar
<
!
>,
<!
EXPOSED_PARAMETER_TYPE
!>
z
:
Bar
<
!
>
)
abstract
class
AbstractFoo
(
<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE
!>
x
<!>:
Bar
<
!
>,
<!
EXPOSED_PARAMETER_TYPE
!>
val
<!
EXPOSED_PROPERTY_TYPE
_IN_CONSTRUCTOR
!>
x
<!>:
Bar
<
!
>,
<!
EXPOSED_PARAMETER_TYPE
!>
private
val
y
:
Bar
<
!
>,
<!
EXPOSED_PARAMETER_TYPE
!>
z
:
Bar
<
!
>
)
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt
浏览文件 @
de03124f
...
...
@@ -457,6 +457,15 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token
,
)
}
add
(
FirErrors
.
EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR
)
{
firDiagnostic
->
ExposedPropertyTypeInConstructorImpl
(
firDiagnostic
.
a
.
toVisibility
(),
firSymbolBuilder
.
buildSymbol
(
firDiagnostic
.
b
as
FirDeclaration
),
firDiagnostic
.
c
.
toVisibility
(),
firDiagnostic
as
FirPsiDiagnostic
<
*
>,
token
,
)
}
add
(
FirErrors
.
EXPOSED_PARAMETER_TYPE
)
{
firDiagnostic
->
ExposedParameterTypeImpl
(
firDiagnostic
.
a
.
toVisibility
(),
...
...
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt
浏览文件 @
de03124f
...
...
@@ -330,6 +330,13 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract
val
restrictingVisibility
:
Visibility
}
abstract
class
ExposedPropertyTypeInConstructor
:
KtFirDiagnostic
<
KtNamedDeclaration
>()
{
override
val
diagnosticClass
get
()
=
ExposedPropertyTypeInConstructor
::
class
abstract
val
elementVisibility
:
Visibility
abstract
val
restrictingDeclaration
:
KtSymbol
abstract
val
restrictingVisibility
:
Visibility
}
abstract
class
ExposedParameterType
:
KtFirDiagnostic
<
KtParameter
>()
{
override
val
diagnosticClass
get
()
=
ExposedParameterType
::
class
abstract
val
elementVisibility
:
Visibility
...
...
idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt
浏览文件 @
de03124f
...
...
@@ -529,6 +529,16 @@ internal class ExposedPropertyTypeImpl(
override
val
firDiagnostic
:
FirPsiDiagnostic
<
*
>
by
weakRef
(
firDiagnostic
)
}
internal
class
ExposedPropertyTypeInConstructorImpl
(
override
val
elementVisibility
:
Visibility
,
override
val
restrictingDeclaration
:
KtSymbol
,
override
val
restrictingVisibility
:
Visibility
,
firDiagnostic
:
FirPsiDiagnostic
<
*
>,
override
val
token
:
ValidityToken
,
)
:
KtFirDiagnostic
.
ExposedPropertyTypeInConstructor
(),
KtAbstractFirDiagnostic
<
KtNamedDeclaration
>
{
override
val
firDiagnostic
:
FirPsiDiagnostic
<
*
>
by
weakRef
(
firDiagnostic
)
}
internal
class
ExposedParameterTypeImpl
(
override
val
elementVisibility
:
Visibility
,
override
val
restrictingDeclaration
:
KtSymbol
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录