[FIR] Report package usages as a LHS
#KT-59972
This commit is contained in:
committed by
Space Team
parent
e999e289ee
commit
70d1a2ea8c
+1
@@ -162,6 +162,7 @@ object CommonExpressionCheckers : ExpressionCheckers() {
|
||||
override val resolvedQualifierCheckers: Set<FirResolvedQualifierChecker>
|
||||
get() = setOf(
|
||||
FirStandaloneQualifierChecker,
|
||||
FirPackageOnLhsQualifierChecker,
|
||||
FirOptInUsageQualifierChecker,
|
||||
FirDeprecatedQualifierChecker,
|
||||
FirVisibilityQualifierChecker,
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||
|
||||
object FirPackageOnLhsQualifierChecker : FirResolvedQualifierChecker() {
|
||||
override fun check(expression: FirResolvedQualifier, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
// Check that the expression is a package qualifier
|
||||
if (expression.symbol != null) return
|
||||
|
||||
// Left-Hand Side check
|
||||
val lastCallableReferenceAccess = context.callsOrAssignments.lastOrNull() as? FirCallableReferenceAccess
|
||||
val lastGetClass = context.getClassCalls.lastOrNull()
|
||||
if (lastCallableReferenceAccess?.explicitReceiver !== expression && lastGetClass?.argument !== expression) return
|
||||
|
||||
reporter.reportOn(expression.source, FirErrors.EXPRESSION_EXPECTED_PACKAGE_FOUND, context)
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,8 @@
|
||||
package foo
|
||||
|
||||
fun test() {
|
||||
foo::test
|
||||
<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>foo<!>::test
|
||||
<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>foo<!>::class
|
||||
}
|
||||
|
||||
// FILE: qualifiedName.kt
|
||||
@@ -12,5 +13,6 @@ fun test() {
|
||||
package foo.bar
|
||||
|
||||
fun test() {
|
||||
foo.bar::test
|
||||
foo.<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>bar<!>::test
|
||||
foo.<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>bar<!>::class
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ package foo
|
||||
|
||||
fun test() {
|
||||
<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>foo<!>::<!DEBUG_INFO_MISSING_UNRESOLVED!>test<!>
|
||||
<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>foo<!>::class
|
||||
}
|
||||
|
||||
// FILE: qualifiedName.kt
|
||||
@@ -13,4 +14,5 @@ package foo.bar
|
||||
|
||||
fun test() {
|
||||
foo.<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>bar<!>::<!DEBUG_INFO_MISSING_UNRESOLVED!>test<!>
|
||||
foo.<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>bar<!>::class
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user