FIR: support separate ANONYMOUS_FUNCTION_WITH_NAME
This commit is contained in:
+1
@@ -471,6 +471,7 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val FUNCTION_DECLARATION_WITH_NO_NAME by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE)
|
val FUNCTION_DECLARATION_WITH_NO_NAME by error<KtFunction>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||||
|
val ANONYMOUS_FUNCTION_WITH_NAME by error<FirSourceElement, KtFunction>()
|
||||||
|
|
||||||
// TODO: val ANONYMOUS_FUNCTION_WITH_NAME by error1<PsiElement, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
// TODO: val ANONYMOUS_FUNCTION_WITH_NAME by error1<PsiElement, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error<KtParameter>(PositioningStrategy.PARAMETER_DEFAULT_VALUE)
|
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error<KtParameter>(PositioningStrategy.PARAMETER_DEFAULT_VALUE)
|
||||||
|
|||||||
@@ -292,6 +292,7 @@ object FirErrors {
|
|||||||
val PRIVATE_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val PRIVATE_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val NON_MEMBER_FUNCTION_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
val NON_MEMBER_FUNCTION_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||||
val FUNCTION_DECLARATION_WITH_NO_NAME by error0<KtFunction>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
val FUNCTION_DECLARATION_WITH_NO_NAME by error0<KtFunction>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||||
|
val ANONYMOUS_FUNCTION_WITH_NAME by error0<FirSourceElement, KtFunction>()
|
||||||
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error0<KtParameter>(SourceElementPositioningStrategies.PARAMETER_DEFAULT_VALUE)
|
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error0<KtParameter>(SourceElementPositioningStrategies.PARAMETER_DEFAULT_VALUE)
|
||||||
val USELESS_VARARG_ON_PARAMETER by warning0<KtParameter>()
|
val USELESS_VARARG_ON_PARAMETER by warning0<KtParameter>()
|
||||||
val MULTIPLE_VARARG_PARAMETERS by error0<KtParameter>(SourceElementPositioningStrategies.PARAMETER_VARARG_MODIFIER)
|
val MULTIPLE_VARARG_PARAMETERS by error0<KtParameter>(SourceElementPositioningStrategies.PARAMETER_VARARG_MODIFIER)
|
||||||
|
|||||||
+4
-4
@@ -174,10 +174,10 @@ private fun ConeSimpleDiagnostic.getFactory(source: FirSourceElement): FirDiagno
|
|||||||
DiagnosticKind.RecursionInImplicitTypes -> FirErrors.RECURSION_IN_IMPLICIT_TYPES
|
DiagnosticKind.RecursionInImplicitTypes -> FirErrors.RECURSION_IN_IMPLICIT_TYPES
|
||||||
DiagnosticKind.Java -> FirErrors.ERROR_FROM_JAVA_RESOLUTION
|
DiagnosticKind.Java -> FirErrors.ERROR_FROM_JAVA_RESOLUTION
|
||||||
DiagnosticKind.SuperNotAllowed -> FirErrors.SUPER_IS_NOT_AN_EXPRESSION
|
DiagnosticKind.SuperNotAllowed -> FirErrors.SUPER_IS_NOT_AN_EXPRESSION
|
||||||
DiagnosticKind.ExpressionExpected -> if (source.elementType == KtNodeTypes.BINARY_EXPRESSION) {
|
DiagnosticKind.ExpressionExpected -> when (source.elementType) {
|
||||||
FirErrors.ASSIGNMENT_IN_EXPRESSION_CONTEXT
|
KtNodeTypes.BINARY_EXPRESSION -> FirErrors.ASSIGNMENT_IN_EXPRESSION_CONTEXT
|
||||||
} else {
|
KtNodeTypes.FUN -> FirErrors.ANONYMOUS_FUNCTION_WITH_NAME
|
||||||
FirErrors.EXPRESSION_EXPECTED
|
else -> FirErrors.EXPRESSION_EXPECTED
|
||||||
}
|
}
|
||||||
DiagnosticKind.JumpOutsideLoop -> FirErrors.BREAK_OR_CONTINUE_OUTSIDE_A_LOOP
|
DiagnosticKind.JumpOutsideLoop -> FirErrors.BREAK_OR_CONTINUE_OUTSIDE_A_LOOP
|
||||||
DiagnosticKind.NotLoopLabel -> FirErrors.NOT_A_LOOP_LABEL
|
DiagnosticKind.NotLoopLabel -> FirErrors.NOT_A_LOOP_LABEL
|
||||||
|
|||||||
Vendored
+4
-4
@@ -4,7 +4,7 @@
|
|||||||
fun foo(block: () -> (() -> Int)) {}
|
fun foo(block: () -> (() -> Int)) {}
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val x = <!EXPRESSION_EXPECTED!>fun named1(x: Int): Int { return 1 }<!>
|
val x = <!ANONYMOUS_FUNCTION_WITH_NAME!>fun named1(x: Int): Int { return 1 }<!>
|
||||||
x <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Int, Int>>() }
|
x <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><Function1<Int, Int>>() }
|
||||||
|
|
||||||
foo { fun named2(): Int {return 1} }
|
foo { fun named2(): Int {return 1} }
|
||||||
@@ -45,12 +45,12 @@ fun test() {
|
|||||||
x4 checkType { _<Function1<Int, Unit>>() }
|
x4 checkType { _<Function1<Int, Unit>>() }
|
||||||
|
|
||||||
{ y: Int -> fun named14(): Int {return 1} }
|
{ y: Int -> fun named14(): Int {return 1} }
|
||||||
val b = (<!EXPRESSION_EXPECTED, UNRESOLVED_REFERENCE!>fun named15(): Boolean { return true }<!>)()
|
val b = (<!ANONYMOUS_FUNCTION_WITH_NAME, UNRESOLVED_REFERENCE!>fun named15(): Boolean { return true }<!>)()
|
||||||
|
|
||||||
baz(<!EXPRESSION_EXPECTED!>fun named16(){}<!>)
|
baz(<!ANONYMOUS_FUNCTION_WITH_NAME!>fun named16(){}<!>)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bar() = <!EXPRESSION_EXPECTED!>fun named() {}<!>
|
fun bar() = <!ANONYMOUS_FUNCTION_WITH_NAME!>fun named() {}<!>
|
||||||
|
|
||||||
fun <T> run(block: () -> T): T = null!!
|
fun <T> run(block: () -> T): T = null!!
|
||||||
fun run2(block: () -> Unit): Unit = null!!
|
fun run2(block: () -> Unit): Unit = null!!
|
||||||
|
|||||||
+1
-1
@@ -5,5 +5,5 @@ fun foo() {
|
|||||||
fun A.foo() {}
|
fun A.foo() {}
|
||||||
(fun A.foo() {})
|
(fun A.foo() {})
|
||||||
|
|
||||||
run(<!EXPRESSION_EXPECTED!>fun foo() {}<!>)
|
run(<!ANONYMOUS_FUNCTION_WITH_NAME!>fun foo() {}<!>)
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -1320,6 +1320,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
|||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
add(FirErrors.ANONYMOUS_FUNCTION_WITH_NAME) { firDiagnostic ->
|
||||||
|
AnonymousFunctionWithNameImpl(
|
||||||
|
firDiagnostic as FirPsiDiagnostic<*>,
|
||||||
|
token,
|
||||||
|
)
|
||||||
|
}
|
||||||
add(FirErrors.ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE) { firDiagnostic ->
|
add(FirErrors.ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE) { firDiagnostic ->
|
||||||
AnonymousFunctionParameterWithDefaultValueImpl(
|
AnonymousFunctionParameterWithDefaultValueImpl(
|
||||||
firDiagnostic as FirPsiDiagnostic<*>,
|
firDiagnostic as FirPsiDiagnostic<*>,
|
||||||
|
|||||||
+4
@@ -937,6 +937,10 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
|
|||||||
override val diagnosticClass get() = FunctionDeclarationWithNoName::class
|
override val diagnosticClass get() = FunctionDeclarationWithNoName::class
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class AnonymousFunctionWithName : KtFirDiagnostic<KtFunction>() {
|
||||||
|
override val diagnosticClass get() = AnonymousFunctionWithName::class
|
||||||
|
}
|
||||||
|
|
||||||
abstract class AnonymousFunctionParameterWithDefaultValue : KtFirDiagnostic<KtParameter>() {
|
abstract class AnonymousFunctionParameterWithDefaultValue : KtFirDiagnostic<KtParameter>() {
|
||||||
override val diagnosticClass get() = AnonymousFunctionParameterWithDefaultValue::class
|
override val diagnosticClass get() = AnonymousFunctionParameterWithDefaultValue::class
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -1508,6 +1508,13 @@ internal class FunctionDeclarationWithNoNameImpl(
|
|||||||
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
|
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class AnonymousFunctionWithNameImpl(
|
||||||
|
firDiagnostic: FirPsiDiagnostic<*>,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
) : KtFirDiagnostic.AnonymousFunctionWithName(), KtAbstractFirDiagnostic<KtFunction> {
|
||||||
|
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
|
||||||
|
}
|
||||||
|
|
||||||
internal class AnonymousFunctionParameterWithDefaultValueImpl(
|
internal class AnonymousFunctionParameterWithDefaultValueImpl(
|
||||||
firDiagnostic: FirPsiDiagnostic<*>,
|
firDiagnostic: FirPsiDiagnostic<*>,
|
||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
|
|||||||
Reference in New Issue
Block a user