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.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentQualifiedExpressionForSelector
|
import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentQualifiedExpressionForSelector
|
||||||
import org.jetbrains.kotlin.resolve.*
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker
|
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) {
|
val targetClass = when (targetDescriptor) {
|
||||||
is ClassDescriptor -> targetDescriptor
|
is ClassDescriptor -> targetDescriptor
|
||||||
is TypeAliasDescriptor -> targetDescriptor.classDescriptor
|
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) {
|
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");
|
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")
|
@TestMetadata("incorrectTargetsForExperimentalAnnotation.kt")
|
||||||
public void testIncorrectTargetsForExperimentalAnnotation() throws Exception {
|
public void testIncorrectTargetsForExperimentalAnnotation() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt");
|
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");
|
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")
|
@TestMetadata("incorrectTargetsForExperimentalAnnotation.kt")
|
||||||
public void testIncorrectTargetsForExperimentalAnnotation() throws Exception {
|
public void testIncorrectTargetsForExperimentalAnnotation() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt");
|
runTest("compiler/testData/diagnostics/testsWithStdLib/experimental/incorrectTargetsForExperimentalAnnotation.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user