Do not report experimental usage errors in import statements
#KT-25545 Fixed
This commit is contained in:
+6
-3
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentQualifiedExpressionForSelector
|
||||
import org.jetbrains.kotlin.resolve.*
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker
|
||||
@@ -263,9 +264,6 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
|
||||
}
|
||||
}
|
||||
|
||||
val experimentalities = targetDescriptor.loadExperimentalities(moduleAnnotationsResolver, context.languageVersionSettings)
|
||||
reportNotAcceptedExperimentalities(experimentalities, element, context)
|
||||
|
||||
val targetClass = when (targetDescriptor) {
|
||||
is ClassDescriptor -> targetDescriptor
|
||||
is TypeAliasDescriptor -> targetDescriptor.classDescriptor
|
||||
@@ -280,6 +278,11 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (element.getParentOfType<KtImportDirective>(false) == null) {
|
||||
val experimentalities = targetDescriptor.loadExperimentalities(moduleAnnotationsResolver, context.languageVersionSettings)
|
||||
reportNotAcceptedExperimentalities(experimentalities, element, context)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkUsageOfKotlinExperimentalOrUseExperimental(element: PsiElement, context: CheckerContext) {
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.Experimental
|
||||
// FILE: api.kt
|
||||
|
||||
package feature.experimental.self
|
||||
|
||||
@Experimental
|
||||
annotation class ImportedMarker
|
||||
|
||||
@ImportedMarker
|
||||
object ImportedClass {
|
||||
@ImportedMarker
|
||||
fun importedObjectMember() {}
|
||||
}
|
||||
|
||||
@ImportedMarker
|
||||
fun importedFunction() {}
|
||||
|
||||
@ImportedMarker
|
||||
val importedProperty = Unit
|
||||
|
||||
// FILE: usage.kt
|
||||
|
||||
import feature.experimental.self.ImportedMarker
|
||||
import feature.experimental.self.ImportedClass
|
||||
import feature.experimental.self.importedFunction
|
||||
import feature.experimental.self.importedProperty
|
||||
import feature.experimental.self.ImportedClass.importedObjectMember
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package
|
||||
|
||||
package feature {
|
||||
|
||||
package feature.experimental {
|
||||
|
||||
package feature.experimental.self {
|
||||
@feature.experimental.self.ImportedMarker public val importedProperty: kotlin.Unit
|
||||
@feature.experimental.self.ImportedMarker public fun importedFunction(): kotlin.Unit
|
||||
|
||||
@feature.experimental.self.ImportedMarker public object ImportedClass {
|
||||
private constructor ImportedClass()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
@feature.experimental.self.ImportedMarker public final fun importedObjectMember(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
@kotlin.Experimental public final annotation class ImportedMarker : kotlin.Annotation {
|
||||
public constructor ImportedMarker()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
@@ -2407,6 +2407,11 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/experimentalUnsignedLiterals.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("importStatement.kt")
|
||||
public void testImportStatement() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/importStatement.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("incorrectTargetsForExperimentalAnnotation.kt")
|
||||
public void testIncorrectTargetsForExperimentalAnnotation() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt");
|
||||
|
||||
compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java
Generated
+5
@@ -2407,6 +2407,11 @@ public class DiagnosticsTestWithStdLibUsingJavacGenerated extends AbstractDiagno
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/experimentalUnsignedLiterals.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("importStatement.kt")
|
||||
public void testImportStatement() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/importStatement.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("incorrectTargetsForExperimentalAnnotation.kt")
|
||||
public void testIncorrectTargetsForExperimentalAnnotation() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt");
|
||||
|
||||
Reference in New Issue
Block a user