FE 1.0: don't spread OptIn markers to children #KT-48570 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
17590b7114
commit
b8c3b34886
-5
@@ -220,11 +220,6 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val container = containingDeclaration
|
|
||||||
if (container is ClassDescriptor && this !is ConstructorDescriptor) {
|
|
||||||
result.addAll(container.loadExperimentalities(moduleAnnotationsResolver, languageVersionSettings, visited, useFutureError))
|
|
||||||
}
|
|
||||||
|
|
||||||
for (moduleAnnotationClassId in moduleAnnotationsResolver.getAnnotationsOnContainingModule(this)) {
|
for (moduleAnnotationClassId in moduleAnnotationsResolver.getAnnotationsOnContainingModule(this)) {
|
||||||
val annotationClass = module.findClassAcrossModuleDependencies(moduleAnnotationClassId)
|
val annotationClass = module.findClassAcrossModuleDependencies(moduleAnnotationClassId)
|
||||||
result.addIfNotNull(annotationClass?.loadExperimentalityForMarkerAnnotation())
|
result.addIfNotNull(annotationClass?.loadExperimentalityForMarkerAnnotation())
|
||||||
|
|||||||
+89
@@ -0,0 +1,89 @@
|
|||||||
|
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||||
|
// FILE: api.kt
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
@RequiresOptIn(level = RequiresOptIn.Level.WARNING)
|
||||||
|
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
|
||||||
|
@Retention(AnnotationRetention.BINARY)
|
||||||
|
annotation class ExperimentalAPI
|
||||||
|
|
||||||
|
@ExperimentalAPI
|
||||||
|
class C {
|
||||||
|
fun function(): String = ""
|
||||||
|
val property: String = ""
|
||||||
|
class Nested
|
||||||
|
inner class Inner
|
||||||
|
}
|
||||||
|
|
||||||
|
@ExperimentalAPI
|
||||||
|
fun C.extension() {}
|
||||||
|
|
||||||
|
// FILE: usage-propagate.kt
|
||||||
|
|
||||||
|
package usage1
|
||||||
|
|
||||||
|
import api.*
|
||||||
|
|
||||||
|
@ExperimentalAPI
|
||||||
|
fun useAll() {
|
||||||
|
val c: C = C()
|
||||||
|
c.function()
|
||||||
|
c.property
|
||||||
|
C.Nested()
|
||||||
|
c.Inner()
|
||||||
|
c.extension()
|
||||||
|
}
|
||||||
|
|
||||||
|
@ExperimentalAPI
|
||||||
|
class Use {
|
||||||
|
fun useAll(c: C) {
|
||||||
|
c.function()
|
||||||
|
c.property
|
||||||
|
C.Nested()
|
||||||
|
c.Inner()
|
||||||
|
c.extension()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: usage-use.kt
|
||||||
|
|
||||||
|
package usage2
|
||||||
|
|
||||||
|
import api.*
|
||||||
|
|
||||||
|
@OptIn(ExperimentalAPI::class)
|
||||||
|
fun useAll() {
|
||||||
|
val c: C = C()
|
||||||
|
c.function()
|
||||||
|
c.property
|
||||||
|
C.Nested()
|
||||||
|
c.Inner()
|
||||||
|
c.extension()
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalAPI::class)
|
||||||
|
class Use {
|
||||||
|
fun useAll(c: C) {
|
||||||
|
c.function()
|
||||||
|
c.property
|
||||||
|
C.Nested()
|
||||||
|
c.Inner()
|
||||||
|
c.extension()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: usage-none.kt
|
||||||
|
|
||||||
|
package usage3
|
||||||
|
|
||||||
|
import api.*
|
||||||
|
|
||||||
|
fun use() {
|
||||||
|
val c: <!EXPERIMENTAL_API_USAGE!>C<!> = <!EXPERIMENTAL_API_USAGE!>C<!>()
|
||||||
|
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>function<!>()
|
||||||
|
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>property<!>
|
||||||
|
<!EXPERIMENTAL_API_USAGE!>C<!>.<!EXPERIMENTAL_API_USAGE!>Nested<!>()
|
||||||
|
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>Inner<!>()
|
||||||
|
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>extension<!>()
|
||||||
|
}
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
// FIR_IDENTICAL
|
|
||||||
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||||
// FILE: api.kt
|
// FILE: api.kt
|
||||||
|
|
||||||
@@ -82,9 +81,9 @@ import api.*
|
|||||||
|
|
||||||
fun use() {
|
fun use() {
|
||||||
val c: <!EXPERIMENTAL_API_USAGE!>C<!> = <!EXPERIMENTAL_API_USAGE!>C<!>()
|
val c: <!EXPERIMENTAL_API_USAGE!>C<!> = <!EXPERIMENTAL_API_USAGE!>C<!>()
|
||||||
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>function<!>()
|
<!EXPERIMENTAL_API_USAGE!>c<!>.function()
|
||||||
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>property<!>
|
<!EXPERIMENTAL_API_USAGE!>c<!>.property
|
||||||
<!EXPERIMENTAL_API_USAGE!>C<!>.<!EXPERIMENTAL_API_USAGE!>Nested<!>()
|
<!EXPERIMENTAL_API_USAGE!>C<!>.Nested()
|
||||||
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>Inner<!>()
|
<!EXPERIMENTAL_API_USAGE!>c<!>.Inner()
|
||||||
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>extension<!>()
|
<!EXPERIMENTAL_API_USAGE!>c<!>.<!EXPERIMENTAL_API_USAGE!>extension<!>()
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -52,7 +52,7 @@ package usage3
|
|||||||
import api.*
|
import api.*
|
||||||
|
|
||||||
fun use1() {
|
fun use1() {
|
||||||
<!EXPERIMENTAL_API_USAGE!>C<!>.<!EXPERIMENTAL_API_USAGE!>D<!>.<!EXPERIMENTAL_API_USAGE!>E<!>.<!EXPERIMENTAL_API_USAGE!>F<!>()
|
<!EXPERIMENTAL_API_USAGE!>C<!>.D.E.F()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun use2(f: <!EXPERIMENTAL_API_USAGE!>C<!>.<!EXPERIMENTAL_API_USAGE!>D<!>.<!EXPERIMENTAL_API_USAGE!>E<!>.<!EXPERIMENTAL_API_USAGE!>F<!>) = <!EXPERIMENTAL_API_USAGE!>f<!>.hashCode()
|
fun use2(f: <!EXPERIMENTAL_API_USAGE!>C<!>.D.E.F) = f.hashCode()
|
||||||
|
|||||||
+1
-1
@@ -49,7 +49,7 @@ interface NotExperimentalExtension : ExperimentalType {
|
|||||||
|
|
||||||
fun use(arg: NotExperimentalExtension) {
|
fun use(arg: NotExperimentalExtension) {
|
||||||
arg.foo()
|
arg.foo()
|
||||||
arg.<!EXPERIMENTAL_API_USAGE_ERROR!>bar<!>()
|
arg.bar()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Marker
|
@Marker
|
||||||
|
|||||||
+2
-2
@@ -49,7 +49,7 @@ interface NotExperimentalExtension : ExperimentalType {
|
|||||||
|
|
||||||
fun use(arg: NotExperimentalExtension) {
|
fun use(arg: NotExperimentalExtension) {
|
||||||
arg.foo()
|
arg.foo()
|
||||||
arg.<!EXPERIMENTAL_API_USAGE_FUTURE_ERROR!>bar<!>()
|
arg.bar()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Marker
|
@Marker
|
||||||
@@ -84,7 +84,7 @@ object O {
|
|||||||
operator fun provideDelegate(x: Any?, y: Any?): C = C()
|
operator fun provideDelegate(x: Any?, y: Any?): C = C()
|
||||||
}
|
}
|
||||||
|
|
||||||
val x: String by <!EXPERIMENTAL_API_USAGE_ERROR, EXPERIMENTAL_API_USAGE_FUTURE_ERROR!>O<!>
|
val x: String by <!EXPERIMENTAL_API_USAGE_FUTURE_ERROR!>O<!>
|
||||||
|
|
||||||
@Marker
|
@Marker
|
||||||
class OperatorContainer : Comparable<OperatorContainer> {
|
class OperatorContainer : Comparable<OperatorContainer> {
|
||||||
|
|||||||
Reference in New Issue
Block a user