[FIR] K2: Fix disappeared diagnostic UNDERSCORE_USAGE_WITHOUT_BACKTICKS on types
^KT-59985 Fixed Merge-request: KT-MR-12282 Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
80f86a3527
commit
56eedfebee
+28
-2
@@ -12,8 +12,9 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
|
||||
fun checkUnderscoreDiagnostics(
|
||||
internal fun checkUnderscoreDiagnostics(
|
||||
source: KtSourceElement?,
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter,
|
||||
@@ -35,4 +36,29 @@ fun checkUnderscoreDiagnostics(
|
||||
}
|
||||
|
||||
val CharSequence.isUnderscore: Boolean
|
||||
get() = all { it == '_' }
|
||||
get() = all { it == '_' }
|
||||
|
||||
internal fun checkTypeRefForUnderscore(
|
||||
typeRef: FirTypeRef?,
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter,
|
||||
) {
|
||||
if (typeRef is FirErrorTypeRef) return
|
||||
|
||||
typeRef?.forEachQualifierPart { qualifierPart ->
|
||||
checkUnderscoreDiagnostics(qualifierPart.source, context, reporter, isExpression = true)
|
||||
|
||||
for (typeArgument in qualifierPart.typeArgumentList.typeArguments) {
|
||||
if (typeArgument is FirTypeProjectionWithVariance) {
|
||||
checkTypeRefForUnderscore(typeArgument.typeRef, context, reporter)
|
||||
} else {
|
||||
checkUnderscoreDiagnostics(typeArgument.source, context, reporter, isExpression = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirTypeRef.forEachQualifierPart(block: (FirQualifierPart) -> Unit) {
|
||||
val delegatedTypeRef = (this as? FirResolvedTypeRef)?.delegatedTypeRef
|
||||
(delegatedTypeRef as? FirUserTypeRef)?.qualifier?.forEach(block)
|
||||
}
|
||||
|
||||
+12
-19
@@ -9,25 +9,28 @@ import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.SourceNavigator
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.checkTypeRefForUnderscore
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.checkUnderscoreDiagnostics
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isUnderscore
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.isCatchParameter
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirUserTypeRef
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
|
||||
object FirReservedUnderscoreDeclarationChecker : FirBasicDeclarationChecker() {
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (
|
||||
declaration is FirRegularClass ||
|
||||
declaration is FirTypeParameter ||
|
||||
declaration is FirProperty && declaration.isCatchParameter != true ||
|
||||
declaration is FirTypeAlias
|
||||
) {
|
||||
reportIfUnderscore(declaration, context, reporter)
|
||||
} else if (declaration is FirTypeParameter) {
|
||||
reportIfUnderscore(declaration, context, reporter)
|
||||
declaration.bounds.forEach {
|
||||
checkTypeRefForUnderscore(it, context, reporter)
|
||||
}
|
||||
} else if (declaration is FirFunction) {
|
||||
if (declaration is FirSimpleFunction) {
|
||||
reportIfUnderscore(declaration, context, reporter)
|
||||
@@ -72,23 +75,13 @@ object FirReservedUnderscoreDeclarationChecker : FirBasicDeclarationChecker() {
|
||||
}
|
||||
}
|
||||
|
||||
val returnOrReceiverTypeRef = when (declaration) {
|
||||
is FirValueParameter -> declaration.returnTypeRef
|
||||
is FirFunction -> declaration.receiverParameter?.typeRef
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (returnOrReceiverTypeRef is FirResolvedTypeRef) {
|
||||
val delegatedTypeRef = returnOrReceiverTypeRef.delegatedTypeRef
|
||||
if (delegatedTypeRef is FirUserTypeRef) {
|
||||
for (qualifierPart in delegatedTypeRef.qualifier) {
|
||||
checkUnderscoreDiagnostics(qualifierPart.source, context, reporter, isExpression = true)
|
||||
|
||||
for (typeArgument in qualifierPart.typeArgumentList.typeArguments) {
|
||||
checkUnderscoreDiagnostics(typeArgument.source, context, reporter, isExpression = true)
|
||||
}
|
||||
}
|
||||
when (declaration) {
|
||||
is FirValueParameter -> checkTypeRefForUnderscore(declaration.returnTypeRef, context, reporter)
|
||||
is FirFunction -> {
|
||||
checkTypeRefForUnderscore(declaration.returnTypeRef, context, reporter)
|
||||
checkTypeRefForUnderscore(declaration.receiverParameter?.typeRef, context, reporter)
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.checkTypeRefForUnderscore
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isTopLevel
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
@@ -52,5 +53,6 @@ object FirTopLevelTypeAliasChecker : FirTypeAliasChecker() {
|
||||
context
|
||||
)
|
||||
}
|
||||
checkTypeRefForUnderscore(expandedTypeRef, context, reporter)
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isUnderscore
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeUnderscoreUsageWithoutBackticks
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.toResolvedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
|
||||
@@ -35,6 +36,8 @@ object FirUnderscoreChecker : FirBasicExpressionChecker() {
|
||||
}
|
||||
|
||||
private fun diagnosticsCheckNeeded(expression: FirResolvable): Boolean {
|
||||
if (expression.calleeReference is FirErrorNamedReference)
|
||||
return false
|
||||
return when (expression) {
|
||||
is FirImplicitInvokeCall -> expression.calleeReference.name.asString().isUnderscore
|
||||
is FirCall -> expression.calleeReference.toResolvedSymbol<FirFunctionSymbol<*>>()?.callableId?.callableName?.asString()?.isUnderscore == true
|
||||
|
||||
Vendored
+7
-7
@@ -10,31 +10,31 @@ class C {
|
||||
|
||||
fun test() {
|
||||
for ((x, _) in C()) {
|
||||
foo(x, <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>)
|
||||
foo(x, <!UNRESOLVED_REFERENCE!>_<!>)
|
||||
}
|
||||
|
||||
for ((_, y) in C()) {
|
||||
foo(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>, y)
|
||||
foo(<!UNRESOLVED_REFERENCE!>_<!>, y)
|
||||
}
|
||||
|
||||
for ((_, _) in C()) {
|
||||
foo(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>, <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>)
|
||||
foo(<!UNRESOLVED_REFERENCE!>_<!>, <!UNRESOLVED_REFERENCE!>_<!>)
|
||||
}
|
||||
|
||||
for ((_ : Int, _ : String) in C()) {
|
||||
foo(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>, <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>)
|
||||
foo(<!UNRESOLVED_REFERENCE!>_<!>, <!UNRESOLVED_REFERENCE!>_<!>)
|
||||
}
|
||||
|
||||
for ((_ : String, _ : Int) in C()) {
|
||||
foo(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>, <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>)
|
||||
foo(<!UNRESOLVED_REFERENCE!>_<!>, <!UNRESOLVED_REFERENCE!>_<!>)
|
||||
}
|
||||
|
||||
val (x, _) = A()
|
||||
val (_, y) = A()
|
||||
|
||||
foo(x, y)
|
||||
foo(x, <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>)
|
||||
foo(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>, y)
|
||||
foo(x, <!UNRESOLVED_REFERENCE!>_<!>)
|
||||
foo(<!UNRESOLVED_REFERENCE!>_<!>, y)
|
||||
|
||||
val (<!REDECLARATION!>`_`<!>, z) = A()
|
||||
|
||||
|
||||
+21
-10
@@ -12,23 +12,34 @@ class Bar2<K : <!UNRESOLVED_REFERENCE!>_<!>>
|
||||
class Bar3<K> where K : <!UNRESOLVED_REFERENCE!>_<!>
|
||||
class Bar4<<!UNDERSCORE_IS_RESERVED!>_<!>>
|
||||
|
||||
typealias A1<<!UNDERSCORE_IS_RESERVED!>_<!>> = <!TYPEALIAS_SHOULD_EXPAND_TO_CLASS!>_<!>
|
||||
typealias A1<<!UNDERSCORE_IS_RESERVED!>_<!>> = <!TYPEALIAS_SHOULD_EXPAND_TO_CLASS, UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>
|
||||
typealias A11<<!UNDERSCORE_IS_RESERVED!>_<!>> = Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>
|
||||
typealias A12<<!UNDERSCORE_IS_RESERVED!>_<!>> = Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>>
|
||||
typealias A2<T> = Foo<<!UNRESOLVED_REFERENCE!>_<!>>
|
||||
typealias A3<T> = (<!UNRESOLVED_REFERENCE!>_<!>) -> T
|
||||
typealias A4<T> = (T) -> () -> <!UNRESOLVED_REFERENCE!>_<!>
|
||||
typealias A5<T> = (T) -> (((<!UNRESOLVED_REFERENCE!>_<!>))) -> T
|
||||
|
||||
fun foo1(x: <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>) {}
|
||||
fun foo2(x: Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>>) {}
|
||||
fun foo1(x: <!UNRESOLVED_REFERENCE!>_<!>) {}
|
||||
fun foo2(x: Foo<<!UNRESOLVED_REFERENCE!>_<!>>) {}
|
||||
fun foo21(x: Foo<Foo<<!UNRESOLVED_REFERENCE!>_<!>>>) {}
|
||||
fun foo3(): <!UNRESOLVED_REFERENCE!>_<!> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun foo5(): Foo<<!UNRESOLVED_REFERENCE!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K, <!UNDERSCORE_IS_RESERVED!>_<!>> foo6(): Foo<_> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : _, <!UNDERSCORE_IS_RESERVED!>_<!>> foo7(): Foo<_> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun foo4(): Foo<<!UNRESOLVED_REFERENCE!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun foo5(): Foo<Foo<<!UNRESOLVED_REFERENCE!>_<!>>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K, <!UNDERSCORE_IS_RESERVED!>_<!>> foo6(): Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>, <!UNDERSCORE_IS_RESERVED!>_<!>> foo7(): <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>, <!UNDERSCORE_IS_RESERVED!>_<!>> foo8(): Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>>, <!UNDERSCORE_IS_RESERVED!>_<!>> foo9(): Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
|
||||
fun <!UNRESOLVED_REFERENCE!>_<!>.foo10() {}
|
||||
fun Foo<<!UNRESOLVED_REFERENCE!>_<!>>.foo11() {}
|
||||
fun Foo<Foo<<!UNRESOLVED_REFERENCE!>_<!>>>.foo12() {}
|
||||
|
||||
class AA1 : <!UNRESOLVED_REFERENCE!>_<!>
|
||||
class AA2 : <!FINAL_SUPERTYPE, SUPERTYPE_NOT_INITIALIZED!>Foo<<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>_<!>><!>
|
||||
|
||||
fun <`_`> bar(): Foo<_> = TODO()
|
||||
fun <`_`> bar(): Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>> = TODO()
|
||||
fun <`_`> bar1(): Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>> = TODO()
|
||||
|
||||
fun test() {
|
||||
val x1 = foo<Int, (<!UNRESOLVED_REFERENCE!>_<!>) -> Unit> { { it } }
|
||||
@@ -42,8 +53,8 @@ fun test() {
|
||||
val z32: Pair<<!UNRESOLVED_REFERENCE!>_<!>, Float> = 1 to 1f
|
||||
val z34: Pair<((<!UNRESOLVED_REFERENCE!>_<!>)), Float> = 1 to 1f
|
||||
|
||||
val x8: (Float) -> Int = { x: <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!> -> 10 }
|
||||
val x9: (Foo<Float>) -> Int = { x: Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>> -> 10 }
|
||||
val x8: (Float) -> Int = { x: <!UNRESOLVED_REFERENCE!>_<!> -> 10 }
|
||||
val x9: (Foo<Float>) -> Int = { x: Foo<<!UNRESOLVED_REFERENCE!>_<!>> -> 10 }
|
||||
|
||||
val x10 = object : <!UNRESOLVED_REFERENCE!>_<!> {}
|
||||
val x11 = object : <!FINAL_SUPERTYPE!>Foo<<!UNRESOLVED_REFERENCE!>_<!>><!>() {}
|
||||
@@ -56,7 +67,7 @@ fun test() {
|
||||
|
||||
val x12: Foo<@<!UNRESOLVED_REFERENCE!>_<!> Int>? = null
|
||||
val x13: Foo<@<!UNRESOLVED_REFERENCE!>_<!>() Int>? = null
|
||||
val x14: Foo<@Anno(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>) Int>? = null
|
||||
val x14: Foo<@Anno(<!UNRESOLVED_REFERENCE!>_<!>) Int>? = null
|
||||
|
||||
val x15: <!UNRESOLVED_REFERENCE!>_<!><<!UNRESOLVED_REFERENCE!>_<!>>? = null
|
||||
}
|
||||
|
||||
+13
-2
@@ -13,6 +13,8 @@ class Bar3<K> where K : <!UNRESOLVED_REFERENCE!>_<!>
|
||||
class Bar4<<!UNDERSCORE_IS_RESERVED!>_<!>>
|
||||
|
||||
typealias A1<<!UNDERSCORE_IS_RESERVED!>_<!>> = <!TYPEALIAS_SHOULD_EXPAND_TO_CLASS, UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>
|
||||
typealias A11<<!UNDERSCORE_IS_RESERVED!>_<!>> = Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>
|
||||
typealias A12<<!UNDERSCORE_IS_RESERVED!>_<!>> = Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>>
|
||||
typealias A2<T> = Foo<<!UNRESOLVED_REFERENCE!>_<!>>
|
||||
typealias A3<T> = (<!UNRESOLVED_REFERENCE!>_<!>) -> T
|
||||
typealias A4<T> = (T) -> () -> <!UNRESOLVED_REFERENCE!>_<!>
|
||||
@@ -20,15 +22,24 @@ typealias A5<T> = (T) -> (((<!UNRESOLVED_REFERENCE!>_<!>))) -> T
|
||||
|
||||
fun foo1(x: <!UNRESOLVED_REFERENCE!>_<!>) {}
|
||||
fun foo2(x: Foo<<!UNRESOLVED_REFERENCE!>_<!>>) {}
|
||||
fun foo21(x: Foo<Foo<<!UNRESOLVED_REFERENCE!>_<!>>>) {}
|
||||
fun foo3(): <!UNRESOLVED_REFERENCE!>_<!> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun foo5(): Foo<<!UNRESOLVED_REFERENCE!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun foo4(): Foo<<!UNRESOLVED_REFERENCE!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun foo5(): Foo<Foo<<!UNRESOLVED_REFERENCE!>_<!>>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K, <!UNDERSCORE_IS_RESERVED!>_<!>> foo6(): Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>, <!UNDERSCORE_IS_RESERVED!>_<!>> foo7(): Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>, <!UNDERSCORE_IS_RESERVED!>_<!>> foo7(): <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>, <!UNDERSCORE_IS_RESERVED!>_<!>> foo8(): Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
fun <K : Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>>, <!UNDERSCORE_IS_RESERVED!>_<!>> foo9(): Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>> {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
|
||||
fun <!UNRESOLVED_REFERENCE!>_<!>.foo10() {}
|
||||
fun Foo<<!UNRESOLVED_REFERENCE!>_<!>>.foo11() {}
|
||||
fun Foo<Foo<<!UNRESOLVED_REFERENCE!>_<!>>>.foo12() {}
|
||||
|
||||
class AA1 : <!UNRESOLVED_REFERENCE!>_<!>
|
||||
class AA2 : <!FINAL_SUPERTYPE, SUPERTYPE_NOT_INITIALIZED!>Foo<<!UNRESOLVED_REFERENCE!>_<!>><!>
|
||||
|
||||
fun <`_`> bar(): Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>> = TODO()
|
||||
fun <`_`> bar1(): Foo<Foo<<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>>> = TODO()
|
||||
|
||||
fun test() {
|
||||
val x1 = foo<Int, (<!UNRESOLVED_REFERENCE!>_<!>) -> Unit> { { <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>it<!> } }
|
||||
|
||||
+12
-2
@@ -1,14 +1,22 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ _> bar(): Foo<_>
|
||||
public fun </*0*/ _> bar1(): Foo<Foo<_>>
|
||||
public fun </*0*/ K, /*1*/ T> foo(/*0*/ x: (K) -> T): kotlin.Pair<K, T>
|
||||
public fun foo1(/*0*/ x: [Error type: Unresolved type for _]): kotlin.Unit
|
||||
public fun foo2(/*0*/ x: Foo<[Error type: Unresolved type for _]>): kotlin.Unit
|
||||
public fun foo21(/*0*/ x: Foo<Foo<[Error type: Unresolved type for _]>>): kotlin.Unit
|
||||
public fun foo3(): [Error type: Unresolved type for _]
|
||||
public fun foo5(): Foo<[Error type: Unresolved type for _]>
|
||||
public fun foo4(): Foo<[Error type: Unresolved type for _]>
|
||||
public fun foo5(): Foo<Foo<[Error type: Unresolved type for _]>>
|
||||
public fun </*0*/ K, /*1*/ _> foo6(): Foo<_>
|
||||
public fun </*0*/ K : _, /*1*/ _> foo7(): Foo<_>
|
||||
public fun </*0*/ K : _, /*1*/ _> foo7(): _
|
||||
public fun </*0*/ K : Foo<_>, /*1*/ _> foo8(): Foo<_>
|
||||
public fun </*0*/ K : Foo<Foo<_>>, /*1*/ _> foo9(): Foo<Foo<_>>
|
||||
public fun test(): kotlin.Unit
|
||||
public fun [Error type: Unresolved type for _].foo10(): kotlin.Unit
|
||||
public fun Foo<[Error type: Unresolved type for _]>.foo11(): kotlin.Unit
|
||||
public fun Foo<Foo<[Error type: Unresolved type for _]>>.foo12(): kotlin.Unit
|
||||
|
||||
public final class AA1 {
|
||||
public constructor AA1()
|
||||
@@ -74,6 +82,8 @@ public final class Foo</*0*/ K> {
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
public typealias A1</*0*/ _> = _
|
||||
public typealias A11</*0*/ _> = Foo<_>
|
||||
public typealias A12</*0*/ _> = Foo<Foo<_>>
|
||||
public typealias A2</*0*/ T> = Foo<[Error type: Unresolved type for _]>
|
||||
public typealias A3</*0*/ T> = ([Error type: Unresolved type for _]) -> T
|
||||
public typealias A4</*0*/ T> = (T) -> () -> [Error type: Unresolved type for _]
|
||||
|
||||
@@ -29,7 +29,7 @@ fun foo() {
|
||||
}
|
||||
} catch (_: Exception) {
|
||||
<!UNRESOLVED_REFERENCE!>`_`<!>.stackTrace
|
||||
val y1 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>
|
||||
val y1 = <!UNRESOLVED_REFERENCE!>_<!>
|
||||
val y2 = (<!UNRESOLVED_REFERENCE!>`_`<!>)
|
||||
}
|
||||
try {
|
||||
|
||||
Vendored
+1
-1
@@ -29,7 +29,7 @@ fun foo() {
|
||||
}
|
||||
} catch (_: Exception) {
|
||||
<!UNRESOLVED_REFERENCE!>`_`<!>.stackTrace
|
||||
val y1 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>
|
||||
val y1 = <!UNRESOLVED_REFERENCE!>_<!>
|
||||
val y2 = (<!UNRESOLVED_REFERENCE!>`_`<!>)
|
||||
}
|
||||
try {
|
||||
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-100
|
||||
* MAIN LINK: expressions, constant-literals, integer-literals, decimal-integer-literals -> paragraph 1 -> sentence 2
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Integer literals with an underscore in the first position (it's considered as identifiers).
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
val value_1 = <!UNRESOLVED_REFERENCE!>_5678_90<!>
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
val value_2 = <!UNRESOLVED_REFERENCE!>_2_3_4_5_6_7_8_9_<!>
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
val value_3 = <!UNRESOLVED_REFERENCE!>_____________0000<!>
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
val value_4 = <!UNRESOLVED_REFERENCE!>_______________________________________________________________________________________________________________________________________________________0<!>
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
val value_5 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>____________________________________________________<!>
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
val value_6 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
val value_7 = <!UNRESOLVED_REFERENCE!>_0_<!>
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
val value_8 = <!UNRESOLVED_REFERENCE!>_9_<!>
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-100
|
||||
* MAIN LINK: expressions, constant-literals, integer-literals, decimal-integer-literals -> paragraph 1 -> sentence 2
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: Integer literals with an underscore in the first position (it's considered as identifiers).
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
val value_1 = <!UNRESOLVED_REFERENCE!>_5678_90<!>
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
val value_2 = <!UNRESOLVED_REFERENCE!>_2_3_4_5_6_7_8_9_<!>
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
val value_3 = <!UNRESOLVED_REFERENCE!>_____________0000<!>
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
val value_4 = <!UNRESOLVED_REFERENCE!>_______________________________________________________________________________________________________________________________________________________0<!>
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
val value_5 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>____________________________________________________<!>
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
val value_6 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
val value_7 = <!UNRESOLVED_REFERENCE!>_0_<!>
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
val value_8 = <!UNRESOLVED_REFERENCE!>_9_<!>
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-100
|
||||
* MAIN LINK: expressions, constant-literals, integer-literals, decimal-integer-literals -> paragraph 1 -> sentence 2
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: Integer literals with an underscore in the first position (it's considered as identifiers).
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
val value_1 = <!UNRESOLVED_REFERENCE!>_5678_90<!>
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
val value_2 = <!UNRESOLVED_REFERENCE!>_2_3_4_5_6_7_8_9_<!>
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
val value_3 = <!UNRESOLVED_REFERENCE!>_____________0000<!>
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
val value_4 = <!UNRESOLVED_REFERENCE!>_______________________________________________________________________________________________________________________________________________________0<!>
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
val value_5 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>____________________________________________________<!>
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
val value_6 = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
val value_7 = <!UNRESOLVED_REFERENCE!>_0_<!>
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
val value_8 = <!UNRESOLVED_REFERENCE!>_9_<!>
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user