Use OPT_IN instead of EXPERIMENTAL in diagnostic names

This commit is contained in:
Mikhail Glukhikh
2021-09-02 13:33:43 +03:00
committed by TeamCityServer
parent 2f07589b42
commit 3febabe977
150 changed files with 514 additions and 514 deletions
@@ -7,7 +7,7 @@ interface FirFunctionCall : FirBase
fun foo(statements: List<FirBase>, arguments: List<FirBase>, explicitReceiver: FirBase): List<FirFunctionCall> { fun foo(statements: List<FirBase>, arguments: List<FirBase>, explicitReceiver: FirBase): List<FirFunctionCall> {
val firstCalls = with(statements.last() as FirFunctionCall) setCall@{ val firstCalls = with(statements.last() as FirFunctionCall) setCall@{
<!EXPERIMENTAL_API_USAGE_ERROR!>buildList<!> { <!OPT_IN_USAGE_ERROR!>buildList<!> {
add(this@setCall) add(this@setCall)
with(arguments.last() as FirFunctionCall) plusCall@{ with(arguments.last() as FirFunctionCall) plusCall@{
add(this@plusCall) add(this@plusCall)
@@ -1,4 +1,4 @@
fun <T> foo(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> block: MutableList<T>.() -> Unit): T = null!! fun <T> foo(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> block: MutableList<T>.() -> Unit): T = null!!
fun takeString(s: String) {} fun takeString(s: String) {}
@@ -2,7 +2,7 @@ class DropDownComponent<T : Any>(val initialValues: List<T>)
fun test(strings: List<String>) { fun test(strings: List<String>) {
val dropDown = DropDownComponent( val dropDown = DropDownComponent(
initialValues = <!EXPERIMENTAL_API_USAGE_ERROR!>buildList<!> { initialValues = <!OPT_IN_USAGE_ERROR!>buildList<!> {
addAll(strings) addAll(strings)
} }
) )
@@ -1,5 +1,5 @@
fun test_1() { fun test_1() {
val list = <!EXPERIMENTAL_API_USAGE_ERROR!>buildList<!> { val list = <!OPT_IN_USAGE_ERROR!>buildList<!> {
add("") add("")
} }
takeList(list) takeList(list)
@@ -12,7 +12,7 @@ fun test_2() {
takeList(list) takeList(list)
} }
fun <E> myBuildList(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> builderAction: MutableList<E>.() -> Unit): List<E> { fun <E> myBuildList(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> builderAction: MutableList<E>.() -> Unit): List<E> {
return ArrayList<E>().apply(builderAction) return ArrayList<E>().apply(builderAction)
} }
@@ -2,7 +2,7 @@ interface KtScope {
fun getAllNames(): Set<String> fun getAllNames(): Set<String>
} }
inline fun <E> buildSet(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> builderAction: MutableSet<E>.() -> Unit): Set<E> { inline fun <E> buildSet(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> builderAction: MutableSet<E>.() -> Unit): Set<E> {
return null!! return null!!
} }
@@ -271,34 +271,34 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
val REPEATED_ANNOTATION_WARNING by warning<KtAnnotationEntry>() val REPEATED_ANNOTATION_WARNING by warning<KtAnnotationEntry>()
} }
val EXPERIMENTAL by object : DiagnosticGroup("OptIn-related") { val OPT_IN by object : DiagnosticGroup("OptIn") {
val EXPERIMENTAL_API_USAGE by warning<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) { val OPT_IN_USAGE by warning<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) {
parameter<FqName>("optInMarkerFqName") parameter<FqName>("optInMarkerFqName")
parameter<String>("message") parameter<String>("message")
} }
val EXPERIMENTAL_API_USAGE_ERROR by warning<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) { val OPT_IN_USAGE_ERROR by warning<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) {
parameter<FqName>("optInMarkerFqName") parameter<FqName>("optInMarkerFqName")
parameter<String>("message") parameter<String>("message")
} }
val EXPERIMENTAL_OVERRIDE by warning<PsiElement> { val OPT_IN_OVERRIDE by warning<PsiElement> {
parameter<FqName>("optInMarkerFqName") parameter<FqName>("optInMarkerFqName")
parameter<String>("message") parameter<String>("message")
} }
val EXPERIMENTAL_OVERRIDE_ERROR by error<PsiElement> { val OPT_IN_OVERRIDE_ERROR by error<PsiElement> {
parameter<FqName>("optInMarkerFqName") parameter<FqName>("optInMarkerFqName")
parameter<String>("message") parameter<String>("message")
} }
val EXPERIMENTAL_IS_NOT_ENABLED by warning<KtAnnotationEntry>(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) val OPT_IN_IS_NOT_ENABLED by warning<KtAnnotationEntry>(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED)
val EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION by error<PsiElement>() val OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION by error<PsiElement>()
val EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL by error<PsiElement>() val OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN by error<PsiElement>()
val USE_EXPERIMENTAL_WITHOUT_ARGUMENTS by warning<KtAnnotationEntry>() val OPT_IN_WITHOUT_ARGUMENTS by warning<KtAnnotationEntry>()
val USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER by warning<KtAnnotationEntry> { val OPT_IN_ARGUMENT_IS_NOT_MARKER by warning<KtAnnotationEntry> {
parameter<FqName>("notMarkerFqName") parameter<FqName>("notMarkerFqName")
} }
val EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET by error<KtAnnotationEntry> { val OPT_IN_MARKER_WITH_WRONG_TARGET by error<KtAnnotationEntry> {
parameter<String>("target") parameter<String>("target")
} }
val EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION by error<KtAnnotationEntry>() val OPT_IN_MARKER_WITH_WRONG_RETENTION by error<KtAnnotationEntry>()
} }
val EXPOSED_VISIBILITY by object : DiagnosticGroup("Exposed visibility") { val EXPOSED_VISIBILITY by object : DiagnosticGroup("Exposed visibility") {
@@ -237,18 +237,18 @@ object FirErrors {
val REPEATED_ANNOTATION by error0<KtAnnotationEntry>() val REPEATED_ANNOTATION by error0<KtAnnotationEntry>()
val REPEATED_ANNOTATION_WARNING by warning0<KtAnnotationEntry>() val REPEATED_ANNOTATION_WARNING by warning0<KtAnnotationEntry>()
// OptIn-related // OptIn
val EXPERIMENTAL_API_USAGE by warning2<PsiElement, FqName, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val OPT_IN_USAGE by warning2<PsiElement, FqName, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val EXPERIMENTAL_API_USAGE_ERROR by warning2<PsiElement, FqName, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val OPT_IN_USAGE_ERROR by warning2<PsiElement, FqName, String>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val EXPERIMENTAL_OVERRIDE by warning2<PsiElement, FqName, String>() val OPT_IN_OVERRIDE by warning2<PsiElement, FqName, String>()
val EXPERIMENTAL_OVERRIDE_ERROR by error2<PsiElement, FqName, String>() val OPT_IN_OVERRIDE_ERROR by error2<PsiElement, FqName, String>()
val EXPERIMENTAL_IS_NOT_ENABLED by warning0<KtAnnotationEntry>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) val OPT_IN_IS_NOT_ENABLED by warning0<KtAnnotationEntry>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
val EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION by error0<PsiElement>() val OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION by error0<PsiElement>()
val EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL by error0<PsiElement>() val OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN by error0<PsiElement>()
val USE_EXPERIMENTAL_WITHOUT_ARGUMENTS by warning0<KtAnnotationEntry>() val OPT_IN_WITHOUT_ARGUMENTS by warning0<KtAnnotationEntry>()
val USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER by warning1<KtAnnotationEntry, FqName>() val OPT_IN_ARGUMENT_IS_NOT_MARKER by warning1<KtAnnotationEntry, FqName>()
val EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET by error1<KtAnnotationEntry, String>() val OPT_IN_MARKER_WITH_WRONG_TARGET by error1<KtAnnotationEntry, String>()
val EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION by error0<KtAnnotationEntry>() val OPT_IN_MARKER_WITH_WRONG_RETENTION by error0<KtAnnotationEntry>()
// Exposed visibility // Exposed visibility
val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirBasedSymbol<*>, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3<KtNamedDeclaration, EffectiveVisibility, FirBasedSymbol<*>, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
@@ -23,7 +23,7 @@ object FirOptInAnnotationClassChecker : FirRegularClassChecker() {
if (declaration.getAnnotationByClassId(OptInNames.REQUIRES_OPT_IN_CLASS_ID) == null) return if (declaration.getAnnotationByClassId(OptInNames.REQUIRES_OPT_IN_CLASS_ID) == null) return
if (declaration.getRetention() == AnnotationRetention.SOURCE) { if (declaration.getRetention() == AnnotationRetention.SOURCE) {
val target = declaration.getRetentionAnnotation() val target = declaration.getRetentionAnnotation()
reporter.reportOn(target?.source, FirErrors.EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION, context) reporter.reportOn(target?.source, FirErrors.OPT_IN_MARKER_WITH_WRONG_RETENTION, context)
} }
val wrongTargets = declaration.getAllowedAnnotationTargets().intersect(Experimentality.WRONG_TARGETS_FOR_MARKER) val wrongTargets = declaration.getAllowedAnnotationTargets().intersect(Experimentality.WRONG_TARGETS_FOR_MARKER)
@@ -31,7 +31,7 @@ object FirOptInAnnotationClassChecker : FirRegularClassChecker() {
val target = declaration.getTargetAnnotation() val target = declaration.getTargetAnnotation()
reporter.reportOn( reporter.reportOn(
target?.source, target?.source,
FirErrors.EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET, FirErrors.OPT_IN_MARKER_WITH_WRONG_TARGET,
wrongTargets.joinToString(transform = KotlinTarget::description), wrongTargets.joinToString(transform = KotlinTarget::description),
context context
) )
@@ -33,7 +33,7 @@ object FirClassLiteralChecker : FirGetClassCallChecker() {
if (argument is FirResolvedQualifier) { if (argument is FirResolvedQualifier) {
val classId = argument.classId val classId = argument.classId
if (classId == OptInNames.REQUIRES_OPT_IN_CLASS_ID || classId == OptInNames.OPT_IN_CLASS_ID) { if (classId == OptInNames.REQUIRES_OPT_IN_CLASS_ID || classId == OptInNames.OPT_IN_CLASS_ID) {
reporter.reportOn(argument.source, FirErrors.EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION, context) reporter.reportOn(argument.source, FirErrors.OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION, context)
} }
} }
@@ -31,7 +31,7 @@ object FirOptInAnnotationCallChecker : FirAnnotationCallChecker() {
if (isOptIn) { if (isOptIn) {
val arguments = expression.arguments val arguments = expression.arguments
if (arguments.isEmpty()) { if (arguments.isEmpty()) {
reporter.reportOn(expression.source, FirErrors.USE_EXPERIMENTAL_WITHOUT_ARGUMENTS, context) reporter.reportOn(expression.source, FirErrors.OPT_IN_WITHOUT_ARGUMENTS, context)
} else { } else {
val annotationClasses = expression.findArgumentByName(OptInNames.USE_EXPERIMENTAL_ANNOTATION_CLASS) val annotationClasses = expression.findArgumentByName(OptInNames.USE_EXPERIMENTAL_ANNOTATION_CLASS)
for (classSymbol in annotationClasses?.extractClassesFromArgument().orEmpty()) { for (classSymbol in annotationClasses?.extractClassesFromArgument().orEmpty()) {
@@ -39,7 +39,7 @@ object FirOptInAnnotationCallChecker : FirAnnotationCallChecker() {
if (classSymbol.loadExperimentalityForMarkerAnnotation() == null) { if (classSymbol.loadExperimentalityForMarkerAnnotation() == null) {
reporter.reportOn( reporter.reportOn(
expression.source, expression.source,
FirErrors.USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER, FirErrors.OPT_IN_ARGUMENT_IS_NOT_MARKER,
classSymbol.classId.asSingleFqName(), classSymbol.classId.asSingleFqName(),
context context
) )
@@ -61,7 +61,7 @@ object FirOptInAnnotationCallChecker : FirAnnotationCallChecker() {
if (!languageVersionSettings.supportsFeature(LanguageFeature.OptInRelease) && if (!languageVersionSettings.supportsFeature(LanguageFeature.OptInRelease) &&
OptInNames.REQUIRES_OPT_IN_FQ_NAME.asString() !in useExperimentalFqNames OptInNames.REQUIRES_OPT_IN_FQ_NAME.asString() !in useExperimentalFqNames
) { ) {
reporter.reportOn(element, FirErrors.EXPERIMENTAL_IS_NOT_ENABLED, context) reporter.reportOn(element, FirErrors.OPT_IN_IS_NOT_ENABLED, context)
} }
} }
} }
@@ -191,8 +191,8 @@ object FirOptInUsageBaseChecker {
for ((annotationClassId, severity, message) in experimentalities) { for ((annotationClassId, severity, message) in experimentalities) {
if (!isExperimentalityAcceptableInContext(annotationClassId, context)) { if (!isExperimentalityAcceptableInContext(annotationClassId, context)) {
val diagnostic = when (severity) { val diagnostic = when (severity) {
Experimentality.Severity.WARNING -> FirErrors.EXPERIMENTAL_API_USAGE Experimentality.Severity.WARNING -> FirErrors.OPT_IN_USAGE
Experimentality.Severity.ERROR -> FirErrors.EXPERIMENTAL_API_USAGE_ERROR Experimentality.Severity.ERROR -> FirErrors.OPT_IN_USAGE_ERROR
} }
val reportedMessage = message ?: when (severity) { val reportedMessage = message ?: when (severity) {
Experimentality.Severity.WARNING -> "This declaration is experimental and its usage should be marked" Experimentality.Severity.WARNING -> "This declaration is experimental and its usage should be marked"
@@ -9,8 +9,8 @@ import org.jetbrains.kotlin.fir.FirRealSourceElementKind
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirOptInUsageBaseChecker import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirOptInUsageBaseChecker
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
@@ -36,9 +36,9 @@ object FirOptInUsageTypeRefChecker : FirTypeRefChecker() {
val lastAnnotationCall = context.qualifiedAccessOrAnnotationCalls.lastOrNull() as? FirAnnotationCall val lastAnnotationCall = context.qualifiedAccessOrAnnotationCalls.lastOrNull() as? FirAnnotationCall
if (lastAnnotationCall == null || lastAnnotationCall.annotationTypeRef !== typeRef) { if (lastAnnotationCall == null || lastAnnotationCall.annotationTypeRef !== typeRef) {
if (classId == OptInNames.REQUIRES_OPT_IN_CLASS_ID || classId == OptInNames.OPT_IN_CLASS_ID) { if (classId == OptInNames.REQUIRES_OPT_IN_CLASS_ID || classId == OptInNames.OPT_IN_CLASS_ID) {
reporter.reportOn(source, EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION, context) reporter.reportOn(source, OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION, context)
} else if (symbol is FirRegularClassSymbol && symbol.fir.getAnnotationByClassId(OptInNames.REQUIRES_OPT_IN_CLASS_ID) != null) { } else if (symbol is FirRegularClassSymbol && symbol.fir.getAnnotationByClassId(OptInNames.REQUIRES_OPT_IN_CLASS_ID) != null) {
reporter.reportOn(source, EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL, context) reporter.reportOn(source, OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN, context)
} }
} }
@@ -163,15 +163,15 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPECTED_FUNCTION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPECTED_LATEINIT_PROPERTY import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPECTED_LATEINIT_PROPERTY
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPECTED_PRIVATE_DECLARATION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPECTED_PRIVATE_DECLARATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPECTED_PROPERTY_INITIALIZER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPECTED_PROPERTY_INITIALIZER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_MARKER_WITH_WRONG_RETENTION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_MARKER_WITH_WRONG_TARGET
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_API_USAGE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_USAGE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_API_USAGE_ERROR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_USAGE_ERROR
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_IS_NOT_ENABLED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_IS_NOT_ENABLED
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_OVERRIDE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_OVERRIDE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPERIMENTAL_OVERRIDE_ERROR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_OVERRIDE_ERROR
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPLICIT_DELEGATION_CALL_REQUIRED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPLICIT_DELEGATION_CALL_REQUIRED
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_FUNCTION_RETURN_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_FUNCTION_RETURN_TYPE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_PARAMETER_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.EXPOSED_PARAMETER_TYPE
@@ -456,8 +456,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_ELVIS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_ELVIS_RIGHT_IS_NULL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_ELVIS_RIGHT_IS_NULL
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_IS_CHECK import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_IS_CHECK
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_VARARG_ON_PARAMETER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USELESS_VARARG_ON_PARAMETER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_ARGUMENT_IS_NOT_MARKER
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.USE_EXPERIMENTAL_WITHOUT_ARGUMENTS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OPT_IN_WITHOUT_ARGUMENTS
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.VALUE_CLASS_CANNOT_BE_CLONEABLE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.VALUE_CLASS_CANNOT_BE_CLONEABLE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.VAL_OR_VAR_ON_CATCH_PARAMETER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.VAL_OR_VAR_ON_CATCH_PARAMETER
@@ -699,31 +699,31 @@ class FirDefaultErrorMessages {
map.put(REPEATED_ANNOTATION_WARNING, "This annotation is not repeatable") map.put(REPEATED_ANNOTATION_WARNING, "This annotation is not repeatable")
// OptIn // OptIn
map.put(EXPERIMENTAL_API_USAGE, "{1}", TO_STRING, STRING) map.put(OPT_IN_USAGE, "{1}", TO_STRING, STRING)
map.put(EXPERIMENTAL_API_USAGE_ERROR, "{1}", TO_STRING, STRING) map.put(OPT_IN_USAGE_ERROR, "{1}", TO_STRING, STRING)
map.put(EXPERIMENTAL_OVERRIDE, "{1}", TO_STRING, STRING) map.put(OPT_IN_OVERRIDE, "{1}", TO_STRING, STRING)
map.put(EXPERIMENTAL_OVERRIDE_ERROR, "{1}", TO_STRING, STRING) map.put(OPT_IN_OVERRIDE_ERROR, "{1}", TO_STRING, STRING)
map.put(EXPERIMENTAL_IS_NOT_ENABLED, "This class can only be used with the compiler argument '-opt-in=kotlin.RequiresOptIn'") map.put(OPT_IN_IS_NOT_ENABLED, "This class can only be used with the compiler argument '-opt-in=kotlin.RequiresOptIn'")
map.put(EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION, "This class can only be used as an annotation") map.put(OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION, "This class can only be used as an annotation")
map.put( map.put(
EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL, OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN,
"This class can only be used as an annotation or as an argument to @OptIn" "This class can only be used as an annotation or as an argument to @OptIn"
) )
map.put(USE_EXPERIMENTAL_WITHOUT_ARGUMENTS, "@OptIn without any arguments has no effect") map.put(OPT_IN_WITHOUT_ARGUMENTS, "@OptIn without any arguments has no effect")
map.put( map.put(
USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER, OPT_IN_ARGUMENT_IS_NOT_MARKER,
"Annotation ''{0}'' is not an opt-in requirement marker, therefore its usage in @OptIn is ignored", "Annotation ''{0}'' is not an opt-in requirement marker, therefore its usage in @OptIn is ignored",
TO_STRING TO_STRING
) )
map.put( map.put(
EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET, OPT_IN_MARKER_WITH_WRONG_TARGET,
"Opt-in requirement marker annotation cannot be used on the following code elements: {0}. Please remove these targets", "Opt-in requirement marker annotation cannot be used on the following code elements: {0}. Please remove these targets",
STRING STRING
) )
map.put( map.put(
EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION, OPT_IN_MARKER_WITH_WRONG_RETENTION,
"Opt-in requirement marker annotation cannot be used with SOURCE retention. Please replace retention with BINARY" "Opt-in requirement marker annotation cannot be used with SOURCE retention. Please replace retention with BINARY"
) )
@@ -277,26 +277,26 @@ public interface Errors {
DiagnosticFactory1<PsiElement, FqName> ILLEGAL_KOTLIN_VERSION_STRING_VALUE = DiagnosticFactory1.create(ERROR); DiagnosticFactory1<PsiElement, FqName> ILLEGAL_KOTLIN_VERSION_STRING_VALUE = DiagnosticFactory1.create(ERROR);
DiagnosticFactory1<PsiElement, String> NEWER_VERSION_IN_SINCE_KOTLIN = DiagnosticFactory1.create(WARNING); DiagnosticFactory1<PsiElement, String> NEWER_VERSION_IN_SINCE_KOTLIN = DiagnosticFactory1.create(WARNING);
DiagnosticFactory2<PsiElement, FqName, String> EXPERIMENTAL_API_USAGE = DiagnosticFactory2.create(WARNING); DiagnosticFactory2<PsiElement, FqName, String> OPT_IN_USAGE = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<PsiElement, FqName, String> EXPERIMENTAL_API_USAGE_ERROR = DiagnosticFactory2.create(ERROR); DiagnosticFactory2<PsiElement, FqName, String> OPT_IN_USAGE_ERROR = DiagnosticFactory2.create(ERROR);
DiagnosticFactory2<PsiElement, FqName, String> EXPERIMENTAL_API_USAGE_FUTURE_ERROR = DiagnosticFactory2.create(WARNING); DiagnosticFactory2<PsiElement, FqName, String> OPT_IN_USAGE_FUTURE_ERROR = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<PsiElement, FqName, String> EXPERIMENTAL_OVERRIDE = DiagnosticFactory2.create(WARNING); DiagnosticFactory2<PsiElement, FqName, String> OPT_IN_OVERRIDE = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<PsiElement, FqName, String> EXPERIMENTAL_OVERRIDE_ERROR = DiagnosticFactory2.create(ERROR); DiagnosticFactory2<PsiElement, FqName, String> OPT_IN_OVERRIDE_ERROR = DiagnosticFactory2.create(ERROR);
DiagnosticFactory0<PsiElement> EXPERIMENTAL_IS_NOT_ENABLED = DiagnosticFactory0.create(WARNING); DiagnosticFactory0<PsiElement> OPT_IN_IS_NOT_ENABLED = DiagnosticFactory0.create(WARNING);
DiagnosticFactory0<PsiElement> EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<PsiElement> OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> DiagnosticFactory0<PsiElement>
EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL = DiagnosticFactory0.create(ERROR); OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtAnnotationEntry> USE_EXPERIMENTAL_WITHOUT_ARGUMENTS = DiagnosticFactory0.create(WARNING); DiagnosticFactory0<KtAnnotationEntry> OPT_IN_WITHOUT_ARGUMENTS = DiagnosticFactory0.create(WARNING);
DiagnosticFactory1<KtAnnotationEntry, FqName> USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER = DiagnosticFactory1.create(WARNING); DiagnosticFactory1<KtAnnotationEntry, FqName> OPT_IN_ARGUMENT_IS_NOT_MARKER = DiagnosticFactory1.create(WARNING);
DiagnosticFactory1<KtAnnotationEntry, String> EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET = DiagnosticFactory1.create(ERROR); DiagnosticFactory1<KtAnnotationEntry, String> OPT_IN_MARKER_WITH_WRONG_TARGET = DiagnosticFactory1.create(ERROR);
DiagnosticFactory0<PsiElement> EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<PsiElement> OPT_IN_MARKER_WITH_WRONG_RETENTION = DiagnosticFactory0.create(ERROR);
DiagnosticFactory1<KtAnnotationEntry, String> EXPERIMENTAL_ANNOTATION_ON_WRONG_TARGET = DiagnosticFactory1.create(ERROR); DiagnosticFactory1<KtAnnotationEntry, String> OPT_IN_MARKER_ON_WRONG_TARGET = DiagnosticFactory1.create(ERROR);
DiagnosticFactory0<KtAnnotationEntry> EXPERIMENTAL_ANNOTATION_ON_OVERRIDE = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<KtAnnotationEntry> OPT_IN_MARKER_ON_OVERRIDE = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtAnnotationEntry> EXPERIMENTAL_ANNOTATION_ON_OVERRIDE_WARNING = DiagnosticFactory0.create(WARNING); DiagnosticFactory0<KtAnnotationEntry> OPT_IN_MARKER_ON_OVERRIDE_WARNING = DiagnosticFactory0.create(WARNING);
DiagnosticFactory1<PsiElement, String> EXPERIMENTAL_UNSIGNED_LITERALS = DiagnosticFactory1.create(WARNING); DiagnosticFactory1<PsiElement, String> EXPERIMENTAL_UNSIGNED_LITERALS = DiagnosticFactory1.create(WARNING);
DiagnosticFactory1<PsiElement, String> EXPERIMENTAL_UNSIGNED_LITERALS_ERROR = DiagnosticFactory1.create(ERROR); DiagnosticFactory1<PsiElement, String> EXPERIMENTAL_UNSIGNED_LITERALS_ERROR = DiagnosticFactory1.create(ERROR);
@@ -158,25 +158,25 @@ public class DefaultErrorMessages {
MAP.put(ILLEGAL_KOTLIN_VERSION_STRING_VALUE, "Invalid @{0} annotation value (should be ''major.minor'' or ''major.minor.patch'')", TO_STRING); MAP.put(ILLEGAL_KOTLIN_VERSION_STRING_VALUE, "Invalid @{0} annotation value (should be ''major.minor'' or ''major.minor.patch'')", TO_STRING);
MAP.put(NEWER_VERSION_IN_SINCE_KOTLIN, "The version is greater than the specified API version {0}", STRING); MAP.put(NEWER_VERSION_IN_SINCE_KOTLIN, "The version is greater than the specified API version {0}", STRING);
MAP.put(EXPERIMENTAL_API_USAGE, "{1}", TO_STRING, STRING); MAP.put(OPT_IN_USAGE, "{1}", TO_STRING, STRING);
MAP.put(EXPERIMENTAL_API_USAGE_ERROR, "{1}", TO_STRING, STRING); MAP.put(OPT_IN_USAGE_ERROR, "{1}", TO_STRING, STRING);
MAP.put(EXPERIMENTAL_API_USAGE_FUTURE_ERROR, "{1}", TO_STRING, STRING); MAP.put(OPT_IN_USAGE_FUTURE_ERROR, "{1}", TO_STRING, STRING);
MAP.put(EXPERIMENTAL_OVERRIDE, "{1}", TO_STRING, STRING); MAP.put(OPT_IN_OVERRIDE, "{1}", TO_STRING, STRING);
MAP.put(EXPERIMENTAL_OVERRIDE_ERROR, "{1}", TO_STRING, STRING); MAP.put(OPT_IN_OVERRIDE_ERROR, "{1}", TO_STRING, STRING);
MAP.put(EXPERIMENTAL_IS_NOT_ENABLED, "This class can only be used with the compiler argument '-Xopt-in=kotlin.RequiresOptIn'"); MAP.put(OPT_IN_IS_NOT_ENABLED, "This class can only be used with the compiler argument '-Xopt-in=kotlin.RequiresOptIn'");
MAP.put(EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION, "This class can only be used as an annotation"); MAP.put(OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION, "This class can only be used as an annotation");
MAP.put(EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL, "This class can only be used as an annotation or as an argument to @OptIn"); MAP.put(OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN, "This class can only be used as an annotation or as an argument to @OptIn");
MAP.put(USE_EXPERIMENTAL_WITHOUT_ARGUMENTS, "@OptIn without any arguments has no effect"); MAP.put(OPT_IN_WITHOUT_ARGUMENTS, "@OptIn without any arguments has no effect");
MAP.put(USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER, "Annotation ''{0}'' is not an opt-in requirement marker, therefore its usage in @OptIn is ignored", TO_STRING); MAP.put(OPT_IN_ARGUMENT_IS_NOT_MARKER, "Annotation ''{0}'' is not an opt-in requirement marker, therefore its usage in @OptIn is ignored", TO_STRING);
MAP.put(EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET, "Opt-in requirement marker annotation cannot be used on the following code elements: {0}. Please remove these targets", STRING); MAP.put(OPT_IN_MARKER_WITH_WRONG_TARGET, "Opt-in requirement marker annotation cannot be used on the following code elements: {0}. Please remove these targets", STRING);
MAP.put(EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION, "Opt-in requirement marker annotation cannot be used with SOURCE retention. Please replace retention with BINARY"); MAP.put(OPT_IN_MARKER_WITH_WRONG_RETENTION, "Opt-in requirement marker annotation cannot be used with SOURCE retention. Please replace retention with BINARY");
MAP.put(EXPERIMENTAL_ANNOTATION_ON_WRONG_TARGET, "Opt-in requirement marker annotation cannot be used on {0}", STRING); MAP.put(OPT_IN_MARKER_ON_WRONG_TARGET, "Opt-in requirement marker annotation cannot be used on {0}", STRING);
MAP.put(EXPERIMENTAL_ANNOTATION_ON_OVERRIDE, "Opt-in requirement marker annotation on override requires the same marker on base declaration"); MAP.put(OPT_IN_MARKER_ON_OVERRIDE, "Opt-in requirement marker annotation on override requires the same marker on base declaration");
MAP.put(EXPERIMENTAL_ANNOTATION_ON_OVERRIDE_WARNING, "Opt-in requirement marker annotation on override makes no sense without the same marker on base declaration"); MAP.put(OPT_IN_MARKER_ON_OVERRIDE_WARNING, "Opt-in requirement marker annotation on override makes no sense without the same marker on base declaration");
MAP.put(EXPERIMENTAL_UNSIGNED_LITERALS, "{0}", STRING); MAP.put(EXPERIMENTAL_UNSIGNED_LITERALS, "{0}", STRING);
MAP.put(EXPERIMENTAL_UNSIGNED_LITERALS_ERROR, "{0}", STRING); MAP.put(EXPERIMENTAL_UNSIGNED_LITERALS_ERROR, "{0}", STRING);
@@ -65,22 +65,22 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
if (PROPERTY_GETTER in possibleTargets || if (PROPERTY_GETTER in possibleTargets ||
annotationUseSiteTarget == AnnotationUseSiteTarget.PROPERTY_GETTER annotationUseSiteTarget == AnnotationUseSiteTarget.PROPERTY_GETTER
) { ) {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_ON_WRONG_TARGET.on(entry, "getter")) trace.report(Errors.OPT_IN_MARKER_ON_WRONG_TARGET.on(entry, "getter"))
} }
if (VALUE_PARAMETER in possibleTargets && annotationUseSiteTarget == null || if (VALUE_PARAMETER in possibleTargets && annotationUseSiteTarget == null ||
annotationUseSiteTarget == AnnotationUseSiteTarget.RECEIVER || annotationUseSiteTarget == AnnotationUseSiteTarget.RECEIVER ||
annotationUseSiteTarget == AnnotationUseSiteTarget.SETTER_PARAMETER || annotationUseSiteTarget == AnnotationUseSiteTarget.SETTER_PARAMETER ||
annotationUseSiteTarget == AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER annotationUseSiteTarget == AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER
) { ) {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_ON_WRONG_TARGET.on(entry, "parameter")) trace.report(Errors.OPT_IN_MARKER_ON_WRONG_TARGET.on(entry, "parameter"))
} }
if (LOCAL_VARIABLE in possibleTargets) { if (LOCAL_VARIABLE in possibleTargets) {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_ON_WRONG_TARGET.on(entry, "variable")) trace.report(Errors.OPT_IN_MARKER_ON_WRONG_TARGET.on(entry, "variable"))
} }
if (annotationUseSiteTarget == AnnotationUseSiteTarget.FIELD || if (annotationUseSiteTarget == AnnotationUseSiteTarget.FIELD ||
annotationUseSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD annotationUseSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD
) { ) {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_ON_WRONG_TARGET.on(entry, "field")) trace.report(Errors.OPT_IN_MARKER_ON_WRONG_TARGET.on(entry, "field"))
} }
if (annotated is KtCallableDeclaration && if (annotated is KtCallableDeclaration &&
annotated !is KtPropertyAccessor && annotated !is KtPropertyAccessor &&
@@ -92,9 +92,9 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
!descriptor.hasExperimentalOverriddenDescriptors(annotationClass.fqNameSafe) !descriptor.hasExperimentalOverriddenDescriptors(annotationClass.fqNameSafe)
) { ) {
if (languageVersionSettings.supportsFeature(LanguageFeature.OptInOnOverrideForbidden)) { if (languageVersionSettings.supportsFeature(LanguageFeature.OptInOnOverrideForbidden)) {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_ON_OVERRIDE.on(entry)) trace.report(Errors.OPT_IN_MARKER_ON_OVERRIDE.on(entry))
} else { } else {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_ON_OVERRIDE_WARNING.on(entry)) trace.report(Errors.OPT_IN_MARKER_ON_OVERRIDE_WARNING.on(entry))
} }
} }
} }
@@ -126,7 +126,7 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
private fun checkUseExperimentalUsage(annotationClasses: List<ConstantValue<*>>, trace: BindingTrace, entry: KtAnnotationEntry) { private fun checkUseExperimentalUsage(annotationClasses: List<ConstantValue<*>>, trace: BindingTrace, entry: KtAnnotationEntry) {
if (annotationClasses.isEmpty()) { if (annotationClasses.isEmpty()) {
trace.report(Errors.USE_EXPERIMENTAL_WITHOUT_ARGUMENTS.on(entry)) trace.report(Errors.OPT_IN_WITHOUT_ARGUMENTS.on(entry))
return return
} }
@@ -138,7 +138,7 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
classDescriptor.loadExperimentalityForMarkerAnnotation() classDescriptor.loadExperimentalityForMarkerAnnotation()
} }
if (experimentality == null) { if (experimentality == null) {
trace.report(Errors.USE_EXPERIMENTAL_ARGUMENT_IS_NOT_MARKER.on(entry, classDescriptor.fqNameSafe)) trace.report(Errors.OPT_IN_ARGUMENT_IS_NOT_MARKER.on(entry, classDescriptor.fqNameSafe))
} }
} }
} }
@@ -157,7 +157,7 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
val wrongTargets = allowedTargets.intersect(Experimentality.WRONG_TARGETS_FOR_MARKER) val wrongTargets = allowedTargets.intersect(Experimentality.WRONG_TARGETS_FOR_MARKER)
if (wrongTargets.isNotEmpty()) { if (wrongTargets.isNotEmpty()) {
trace.report( trace.report(
Errors.EXPERIMENTAL_ANNOTATION_WITH_WRONG_TARGET.on( Errors.OPT_IN_MARKER_WITH_WRONG_TARGET.on(
entry, entry,
wrongTargets.joinToString(transform = KotlinTarget::description) wrongTargets.joinToString(transform = KotlinTarget::description)
) )
@@ -170,7 +170,7 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
if (retentionEntry != null) { if (retentionEntry != null) {
val (entry, descriptor) = retentionEntry val (entry, descriptor) = retentionEntry
if (descriptor?.getAnnotationRetention() == KotlinRetention.SOURCE) { if (descriptor?.getAnnotationRetention() == KotlinRetention.SOURCE) {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION.on(entry)) trace.report(Errors.OPT_IN_MARKER_WITH_WRONG_RETENTION.on(entry))
} }
} }
} }
@@ -125,15 +125,15 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
private val USAGE_DIAGNOSTICS = ExperimentalityDiagnostics( private val USAGE_DIAGNOSTICS = ExperimentalityDiagnostics(
warning = ExperimentalityDiagnostic2( warning = ExperimentalityDiagnostic2(
Errors.EXPERIMENTAL_API_USAGE, Errors.OPT_IN_USAGE,
getDefaultDiagnosticMessage("This declaration is experimental and its usage should be marked") getDefaultDiagnosticMessage("This declaration is experimental and its usage should be marked")
), ),
error = ExperimentalityDiagnostic2( error = ExperimentalityDiagnostic2(
Errors.EXPERIMENTAL_API_USAGE_ERROR, Errors.OPT_IN_USAGE_ERROR,
getDefaultDiagnosticMessage("This declaration is experimental and its usage must be marked") getDefaultDiagnosticMessage("This declaration is experimental and its usage must be marked")
), ),
futureError = ExperimentalityDiagnostic2( futureError = ExperimentalityDiagnostic2(
Errors.EXPERIMENTAL_API_USAGE_FUTURE_ERROR, Errors.OPT_IN_USAGE_FUTURE_ERROR,
getDefaultDiagnosticMessage("This declaration is experimental due to signature types and its usage must be marked (will become an error in 1.6)") getDefaultDiagnosticMessage("This declaration is experimental due to signature types and its usage must be marked (will become an error in 1.6)")
), ),
) )
@@ -391,7 +391,7 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
!element.isUsageAsUseExperimentalArgument(context.trace.bindingContext) !element.isUsageAsUseExperimentalArgument(context.trace.bindingContext)
) { ) {
context.trace.report( context.trace.report(
Errors.EXPERIMENTAL_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_USE_EXPERIMENTAL.on(element) Errors.OPT_IN_MARKER_CAN_ONLY_BE_USED_AS_ANNOTATION_OR_ARGUMENT_IN_OPT_IN.on(element)
) )
} }
} }
@@ -416,11 +416,11 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
REQUIRES_OPT_IN_FQ_NAME.asString() !in useExperimentalFqNames && REQUIRES_OPT_IN_FQ_NAME.asString() !in useExperimentalFqNames &&
OLD_EXPERIMENTAL_FQ_NAME.asString() !in useExperimentalFqNames OLD_EXPERIMENTAL_FQ_NAME.asString() !in useExperimentalFqNames
) { ) {
context.trace.report(Errors.EXPERIMENTAL_IS_NOT_ENABLED.on(element)) context.trace.report(Errors.OPT_IN_IS_NOT_ENABLED.on(element))
} }
if (!element.isUsageAsAnnotationOrImport() && !element.isUsageAsQualifier()) { if (!element.isUsageAsAnnotationOrImport() && !element.isUsageAsQualifier()) {
context.trace.report(Errors.EXPERIMENTAL_CAN_ONLY_BE_USED_AS_ANNOTATION.on(element)) context.trace.report(Errors.OPT_IN_CAN_ONLY_BE_USED_AS_ANNOTATION.on(element))
} }
} }
@@ -466,9 +466,9 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
val reportOn = (declaration as? KtNamedDeclaration)?.nameIdentifier ?: declaration val reportOn = (declaration as? KtNamedDeclaration)?.nameIdentifier ?: declaration
val (diagnostic, defaultMessageVerb) = when (experimentality.severity) { val (diagnostic, defaultMessageVerb) = when (experimentality.severity) {
Experimentality.Severity.WARNING -> Errors.EXPERIMENTAL_OVERRIDE to "should" Experimentality.Severity.WARNING -> Errors.OPT_IN_OVERRIDE to "should"
Experimentality.Severity.ERROR -> Errors.EXPERIMENTAL_OVERRIDE_ERROR to "must" Experimentality.Severity.ERROR -> Errors.OPT_IN_OVERRIDE_ERROR to "must"
Experimentality.Severity.FUTURE_ERROR -> Errors.EXPERIMENTAL_OVERRIDE_ERROR to "must" Experimentality.Severity.FUTURE_ERROR -> Errors.OPT_IN_OVERRIDE_ERROR to "must"
} }
val message = experimentality.message val message = experimentality.message
?: "This declaration overrides experimental member of supertype " + ?: "This declaration overrides experimental member of supertype " +
@@ -1,7 +1,7 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: STDLIB_COLLECTIONS // WASM_MUTE_REASON: STDLIB_COLLECTIONS
// !LANGUAGE: +NewInference // !LANGUAGE: +NewInference
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
// WITH_RUNTIME // WITH_RUNTIME
@OptIn(ExperimentalStdlibApi::class) @OptIn(ExperimentalStdlibApi::class)
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
@@ -1,4 +1,4 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -UNCHECKED_CAST -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -UNCHECKED_CAST -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
@@ -14,7 +14,7 @@ fun <T> materialize() = null as T
interface FlowCollector<in T> {} interface FlowCollector<in T> {}
@Suppress("EXPERIMENTAL_API_USAGE_ERROR") @Suppress("OPT_IN_USAGE_ERROR")
fun <L> flow(@BuilderInference block: suspend FlowCollector<L>.() -> Unit) = Flow(block) fun <L> flow(@BuilderInference block: suspend FlowCollector<L>.() -> Unit) = Flow(block)
class Flow<out R>(private val block: suspend FlowCollector<R>.() -> Unit) class Flow<out R>(private val block: suspend FlowCollector<R>.() -> Unit)
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -14,7 +14,7 @@ fun <T> materialize() = null as T
interface FlowCollector<in T> {} interface FlowCollector<in T> {}
@Suppress("EXPERIMENTAL_API_USAGE_ERROR") @Suppress("OPT_IN_USAGE_ERROR")
fun <L> flow(@BuilderInference block: suspend FlowCollector<L>.() -> Unit) = Flow(block) fun <L> flow(@BuilderInference block: suspend FlowCollector<L>.() -> Unit) = Flow(block)
class Flow<out R>(private val block: suspend FlowCollector<R>.() -> Unit) class Flow<out R>(private val block: suspend FlowCollector<R>.() -> Unit)
@@ -5,7 +5,7 @@ import kotlin.experimental.ExperimentalTypeInference
interface FlowCollector<in T> {} interface FlowCollector<in T> {}
@Suppress("EXPERIMENTAL_API_USAGE_ERROR") @Suppress("OPT_IN_USAGE_ERROR")
fun <L> flow(@BuilderInference block: suspend FlowCollector<L>.() -> Unit) = Flow(block) fun <L> flow(@BuilderInference block: suspend FlowCollector<L>.() -> Unit) = Flow(block)
class Flow<out R>(private val block: suspend FlowCollector<R>.() -> Unit) class Flow<out R>(private val block: suspend FlowCollector<R>.() -> Unit)
@@ -11,7 +11,7 @@ interface FlowCollector<T> {
fun emit(value: T) fun emit(value: T)
} }
@Suppress("EXPERIMENTAL_API_USAGE_ERROR") @Suppress("OPT_IN_USAGE_ERROR")
fun <I> flow(@BuilderInference block: FlowCollector<I>.() -> Unit): I = null as I fun <I> flow(@BuilderInference block: FlowCollector<I>.() -> Unit): I = null as I
fun adapt(): Unit = flow { fun adapt(): Unit = flow {
@@ -1,5 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -UNUSED_PARAMETER -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -UNUSED_PARAMETER -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -UNUSED_PARAMETER -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -UNUSED_PARAMETER -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// !LANGUAGE: +UnrestrictedBuilderInference -UseBuilderInferenceOnlyIfNeeded // !LANGUAGE: +UnrestrictedBuilderInference -UseBuilderInferenceOnlyIfNeeded
// WITH_RUNTIME // WITH_RUNTIME
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE_ERROR -CAST_NEVER_SUCCEEDS // !DIAGNOSTICS: -OPT_IN_USAGE_ERROR -CAST_NEVER_SUCCEEDS
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
@@ -1,5 +1,5 @@
// WITH_RUNTIME // WITH_RUNTIME
// !DIAGNOSTICS: -EXPERIMENTAL_IS_NOT_ENABLED -DEPRECATION -EXPERIMENTAL_API_USAGE_ERROR // !DIAGNOSTICS: -OPT_IN_IS_NOT_ENABLED -DEPRECATION -OPT_IN_USAGE_ERROR
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// WITH_RUNTIME // WITH_RUNTIME
// !DIAGNOSTICS: -EXPERIMENTAL_IS_NOT_ENABLED -DEPRECATION -EXPERIMENTAL_API_USAGE_ERROR // !DIAGNOSTICS: -OPT_IN_IS_NOT_ENABLED -DEPRECATION -OPT_IN_USAGE_ERROR
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// !LANGUAGE: -UnrestrictedBuilderInference // !LANGUAGE: -UnrestrictedBuilderInference
// !DIAGNOSTICS: -EXPERIMENTAL_IS_NOT_ENABLED -UNCHECKED_CAST // !DIAGNOSTICS: -OPT_IN_IS_NOT_ENABLED -UNCHECKED_CAST
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// !LANGUAGE: -UnrestrictedBuilderInference // !LANGUAGE: -UnrestrictedBuilderInference
// !DIAGNOSTICS: -EXPERIMENTAL_IS_NOT_ENABLED -UNCHECKED_CAST // !DIAGNOSTICS: -OPT_IN_IS_NOT_ENABLED -UNCHECKED_CAST
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// FIR_IDENTICAL // FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -UNCHECKED_CAST -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -UNCHECKED_CAST -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: main.kt // FILE: main.kt
@@ -1,4 +1,4 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,4 +1,4 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// FIR_IDENTICAL // FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -UNUSED_PARAMETER -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,7 +1,7 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,7 +1,7 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,7 +1,7 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
// KT-47797 // KT-47797
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,7 +1,7 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
// KT-47797 // KT-47797
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNUSED_LAMBDA_EXPRESSION -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNUSED_LAMBDA_EXPRESSION -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNUSED_LAMBDA_EXPRESSION -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNUSED_LAMBDA_EXPRESSION -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -UNCHECKED_CAST -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -UNCHECKED_CAST -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// FILE: main.kt // FILE: main.kt
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -UNCHECKED_CAST -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -UNCHECKED_CAST -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// FILE: main.kt // FILE: main.kt
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -12,10 +12,10 @@ class Test {
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@UseExperimental(ExperimentalTypeInference::class) @UseExperimental(ExperimentalTypeInference::class)
fun <R> build(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO() fun <R> build(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO()
@UseExperimental(ExperimentalTypeInference::class) @UseExperimental(ExperimentalTypeInference::class)
fun <R> build2(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO() fun <R> build2(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO()
class Inv<K> class Inv<K>
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -12,10 +12,10 @@ class Test {
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@UseExperimental(ExperimentalTypeInference::class) @UseExperimental(ExperimentalTypeInference::class)
fun <R1> build(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R1>.() -> Unit): R1 = TODO() fun <R1> build(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R1>.() -> Unit): R1 = TODO()
@UseExperimental(ExperimentalTypeInference::class) @UseExperimental(ExperimentalTypeInference::class)
fun <R2> build2(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R2>.() -> Unit): R2 = TODO() fun <R2> build2(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R2>.() -> Unit): R2 = TODO()
class Out<out K> class Out<out K>
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -15,10 +15,10 @@ class Test {
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@UseExperimental(ExperimentalTypeInference::class) @UseExperimental(ExperimentalTypeInference::class)
fun <R> build(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO() fun <R> build(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO()
@UseExperimental(ExperimentalTypeInference::class) @UseExperimental(ExperimentalTypeInference::class)
fun <R> build2(@<!EXPERIMENTAL_API_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO() fun <R> build2(@<!OPT_IN_USAGE_ERROR!>BuilderInference<!> block: TestInterface<R>.() -> Unit): R = TODO()
class Inv<K> class Inv<K>
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNCHECKED_CAST -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -UNCHECKED_CAST -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNCHECKED_CAST -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -UNCHECKED_CAST -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
// FILE: Test.java // FILE: Test.java
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// FILE: main.kt // FILE: main.kt
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// FILE: main.kt // FILE: main.kt
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// FILE: main.kt // FILE: main.kt
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -DEPRECATION -OPT_IN_IS_NOT_ENABLED
// WITH_RUNTIME // WITH_RUNTIME
// FILE: main.kt // FILE: main.kt
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// !LANGUAGE: +UnrestrictedBuilderInference // !LANGUAGE: +UnrestrictedBuilderInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE // !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -OPT_IN_IS_NOT_ENABLED -UNUSED_VARIABLE
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,6 +1,6 @@
// WITH_RUNTIME // WITH_RUNTIME
// SKIP_TXT // SKIP_TXT
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS -UNCHECKED_CAST -UNUSED_PARAMETER -UNUSED_VARIABLE -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// !LANGUAGE: +NewInference // !LANGUAGE: +NewInference
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE_ERROR -EXPERIMENTAL_API_USAGE_FUTURE_ERROR -UNUSED_PARAMETER // !DIAGNOSTICS: -OPT_IN_USAGE_ERROR -OPT_IN_USAGE_FUTURE_ERROR -UNUSED_PARAMETER
import kotlin.contracts.* import kotlin.contracts.*
@@ -1,5 +1,5 @@
// !LANGUAGE: +NewInference // !LANGUAGE: +NewInference
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE_ERROR -EXPERIMENTAL_API_USAGE_FUTURE_ERROR -UNUSED_PARAMETER // !DIAGNOSTICS: -OPT_IN_USAGE_ERROR -OPT_IN_USAGE_FUTURE_ERROR -UNUSED_PARAMETER
import kotlin.contracts.* import kotlin.contracts.*
@@ -1,6 +1,6 @@
import kotlin.contracts.* import kotlin.contracts.*
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
inline fun atLeastOnce(block: () -> Unit) { inline fun atLeastOnce(block: () -> Unit) {
contract { contract {
callsInPlace(block, InvocationKind.AT_LEAST_ONCE) callsInPlace(block, InvocationKind.AT_LEAST_ONCE)
@@ -8,7 +8,7 @@ inline fun atLeastOnce(block: () -> Unit) {
block() block()
} }
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
inline fun atMostOnce(block: () -> Unit) { inline fun atMostOnce(block: () -> Unit) {
contract { contract {
callsInPlace(block, InvocationKind.AT_MOST_ONCE) callsInPlace(block, InvocationKind.AT_MOST_ONCE)
@@ -16,7 +16,7 @@ inline fun atMostOnce(block: () -> Unit) {
block() block()
} }
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
inline fun exactlyOnce(block: () -> Unit) { inline fun exactlyOnce(block: () -> Unit) {
contract { contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE) callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -1,6 +1,6 @@
import kotlin.contracts.* import kotlin.contracts.*
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
inline fun atLeastOnce(block: () -> Unit) { inline fun atLeastOnce(block: () -> Unit) {
contract { contract {
callsInPlace(block, InvocationKind.AT_LEAST_ONCE) callsInPlace(block, InvocationKind.AT_LEAST_ONCE)
@@ -8,7 +8,7 @@ inline fun atLeastOnce(block: () -> Unit) {
block() block()
} }
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
inline fun atMostOnce(block: () -> Unit) { inline fun atMostOnce(block: () -> Unit) {
contract { contract {
callsInPlace(block, InvocationKind.AT_MOST_ONCE) callsInPlace(block, InvocationKind.AT_MOST_ONCE)
@@ -16,7 +16,7 @@ inline fun atMostOnce(block: () -> Unit) {
block() block()
} }
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
inline fun exactlyOnce(block: () -> Unit) { inline fun exactlyOnce(block: () -> Unit) {
contract { contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE) callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -1,12 +1,12 @@
package package
@kotlin.Suppress(names = {"EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR"}) public inline fun atLeastOnce(/*0*/ block: () -> kotlin.Unit): kotlin.Unit @kotlin.Suppress(names = {"OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR"}) public inline fun atLeastOnce(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
CallsInPlace(block, AT_LEAST_ONCE) CallsInPlace(block, AT_LEAST_ONCE)
@kotlin.Suppress(names = {"EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR"}) public inline fun atMostOnce(/*0*/ block: () -> kotlin.Unit): kotlin.Unit @kotlin.Suppress(names = {"OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR"}) public inline fun atMostOnce(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
CallsInPlace(block, AT_MOST_ONCE) CallsInPlace(block, AT_MOST_ONCE)
@kotlin.Suppress(names = {"EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR"}) public inline fun exactlyOnce(/*0*/ block: () -> kotlin.Unit): kotlin.Unit @kotlin.Suppress(names = {"OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR"}) public inline fun exactlyOnce(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
CallsInPlace(block, EXACTLY_ONCE) CallsInPlace(block, EXACTLY_ONCE)
public fun test(): kotlin.Unit public fun test(): kotlin.Unit
@@ -1,6 +1,6 @@
import kotlin.contracts.* import kotlin.contracts.*
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
fun foo(f1: () -> Unit, f2: () -> Unit) { fun foo(f1: () -> Unit, f2: () -> Unit) {
contract { contract {
callsInPlace(f1, InvocationKind.EXACTLY_ONCE) callsInPlace(f1, InvocationKind.EXACTLY_ONCE)
@@ -1,6 +1,6 @@
import kotlin.contracts.* import kotlin.contracts.*
@Suppress("EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR") @Suppress("OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR")
fun foo(f1: () -> Unit, f2: () -> Unit) { fun foo(f1: () -> Unit, f2: () -> Unit) {
contract { contract {
callsInPlace(f1, InvocationKind.EXACTLY_ONCE) callsInPlace(f1, InvocationKind.EXACTLY_ONCE)
@@ -1,6 +1,6 @@
package package
@kotlin.Suppress(names = {"EXPERIMENTAL_API_USAGE_ERROR", "EXPERIMENTAL_API_USAGE_FUTURE_ERROR"}) public fun foo(/*0*/ f1: () -> kotlin.Unit, /*1*/ f2: () -> kotlin.Unit): kotlin.Unit @kotlin.Suppress(names = {"OPT_IN_USAGE_ERROR", "OPT_IN_USAGE_FUTURE_ERROR"}) public fun foo(/*0*/ f1: () -> kotlin.Unit, /*1*/ f2: () -> kotlin.Unit): kotlin.Unit
CallsInPlace(f1, EXACTLY_ONCE) CallsInPlace(f1, EXACTLY_ONCE)
CallsInPlace(f2, EXACTLY_ONCE) CallsInPlace(f2, EXACTLY_ONCE)
@@ -1,12 +1,12 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
fun ubyte(vararg a: <!EXPERIMENTAL_API_USAGE!>UByte<!>) {} fun ubyte(vararg a: <!OPT_IN_USAGE!>UByte<!>) {}
fun ushort(vararg a: <!EXPERIMENTAL_API_USAGE!>UShort<!>) {} fun ushort(vararg a: <!OPT_IN_USAGE!>UShort<!>) {}
fun uint(vararg a: <!EXPERIMENTAL_API_USAGE!>UInt<!>) {} fun uint(vararg a: <!OPT_IN_USAGE!>UInt<!>) {}
fun ulong(vararg a: <!EXPERIMENTAL_API_USAGE!>ULong<!>) {} fun ulong(vararg a: <!OPT_IN_USAGE!>ULong<!>) {}
class ValueParam(vararg val a: <!EXPERIMENTAL_API_USAGE!>ULong<!>) class ValueParam(vararg val a: <!OPT_IN_USAGE!>ULong<!>)
annotation class Ann(vararg val a: <!EXPERIMENTAL_API_USAGE!>UInt<!>) annotation class Ann(vararg val a: <!OPT_IN_USAGE!>UInt<!>)
fun array(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> a: <!EXPERIMENTAL_API_USAGE!>UIntArray<!>) {} fun array(<!FORBIDDEN_VARARG_PARAMETER_TYPE!>vararg<!> a: <!OPT_IN_USAGE!>UIntArray<!>) {}
@@ -33,7 +33,7 @@ fun takeUShort(@ImplicitIntegerCoercion u: UShort) {}
fun takeUInt(@ImplicitIntegerCoercion u: UInt) {} fun takeUInt(@ImplicitIntegerCoercion u: UInt) {}
fun takeULong(@ImplicitIntegerCoercion u: ULong) {} fun takeULong(@ImplicitIntegerCoercion u: ULong) {}
fun takeUBytes(@ImplicitIntegerCoercion vararg u: <!EXPERIMENTAL_API_USAGE!>UByte<!>) {} fun takeUBytes(@ImplicitIntegerCoercion vararg u: <!OPT_IN_USAGE!>UByte<!>) {}
fun takeLong(@ImplicitIntegerCoercion l: Long) {} fun takeLong(@ImplicitIntegerCoercion l: Long) {}
@@ -5,7 +5,7 @@ fun takeUShort(u: UShort) {}
fun takeUInt(u: UInt) {} fun takeUInt(u: UInt) {}
fun takeULong(u: ULong) {} fun takeULong(u: ULong) {}
fun takeUBytes(vararg u: <!EXPERIMENTAL_API_USAGE!>UByte<!>) {} fun takeUBytes(vararg u: <!OPT_IN_USAGE!>UByte<!>) {}
fun takeNullableUInt(u: UInt?) {} fun takeNullableUInt(u: UInt?) {}
@@ -1,7 +1,7 @@
fun ubyte(vararg a: <!EXPERIMENTAL_API_USAGE!>UByte<!>): <!EXPERIMENTAL_API_USAGE!>UByteArray<!> = <!EXPERIMENTAL_API_USAGE!>a<!> fun ubyte(vararg a: <!OPT_IN_USAGE!>UByte<!>): <!OPT_IN_USAGE!>UByteArray<!> = <!OPT_IN_USAGE!>a<!>
fun ushort(vararg a: <!EXPERIMENTAL_API_USAGE!>UShort<!>): <!EXPERIMENTAL_API_USAGE!>UShortArray<!> = <!EXPERIMENTAL_API_USAGE!>a<!> fun ushort(vararg a: <!OPT_IN_USAGE!>UShort<!>): <!OPT_IN_USAGE!>UShortArray<!> = <!OPT_IN_USAGE!>a<!>
fun uint(vararg a: <!EXPERIMENTAL_API_USAGE!>UInt<!>): <!EXPERIMENTAL_API_USAGE!>UIntArray<!> = <!EXPERIMENTAL_API_USAGE!>a<!> fun uint(vararg a: <!OPT_IN_USAGE!>UInt<!>): <!OPT_IN_USAGE!>UIntArray<!> = <!OPT_IN_USAGE!>a<!>
fun ulong(vararg a: <!EXPERIMENTAL_API_USAGE!>ULong<!>): <!EXPERIMENTAL_API_USAGE!>ULongArray<!> = <!EXPERIMENTAL_API_USAGE!>a<!> fun ulong(vararg a: <!OPT_IN_USAGE!>ULong<!>): <!OPT_IN_USAGE!>ULongArray<!> = <!OPT_IN_USAGE!>a<!>
fun rawUInt(vararg a: <!EXPERIMENTAL_API_USAGE!>UInt<!>): IntArray = <!EXPERIMENTAL_API_USAGE, RETURN_TYPE_MISMATCH!>a<!> fun rawUInt(vararg a: <!OPT_IN_USAGE!>UInt<!>): IntArray = <!OPT_IN_USAGE, RETURN_TYPE_MISMATCH!>a<!>
@@ -1,5 +1,5 @@
// FIR_IDENTICAL // FIR_IDENTICAL
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_EXPRESSION // !DIAGNOSTICS: -OPT_IN_USAGE_ERROR -UNUSED_EXPRESSION
fun test(s: String?) { fun test(s: String?) {
val list = buildList { val list = buildList {
@@ -1,5 +1,5 @@
// !LANGUAGE: +NewInference // !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -UNUSED_PARAMETER -OPT_IN_IS_NOT_ENABLED
// ISSUE: KT-41164 // ISSUE: KT-41164
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// !LANGUAGE: +NewInference // !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER -EXPERIMENTAL_IS_NOT_ENABLED // !DIAGNOSTICS: -UNUSED_PARAMETER -OPT_IN_IS_NOT_ENABLED
// ISSUE: KT-41164 // ISSUE: KT-41164
import kotlin.experimental.ExperimentalTypeInference import kotlin.experimental.ExperimentalTypeInference
@@ -1,5 +1,5 @@
// FIR_IDENTICAL // FIR_IDENTICAL
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS // !DIAGNOSTICS: -OPT_IN_USAGE_ERROR -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
fun <T, R> Flow<T>.transformLatest(@BuilderInference transform: suspend FlowCollector<R>.(value: T) -> Unit) = null as Flow<R> fun <T, R> Flow<T>.transformLatest(@BuilderInference transform: suspend FlowCollector<R>.(value: T) -> Unit) = null as Flow<R>
@@ -1,4 +1,4 @@
// !DIAGNOSTICS: -UNCHECKED_CAST -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_PARAMETER // !DIAGNOSTICS: -UNCHECKED_CAST -OPT_IN_USAGE_ERROR -UNUSED_PARAMETER
class Bar class Bar
@@ -1,4 +1,4 @@
// !DIAGNOSTICS: -UNCHECKED_CAST -EXPERIMENTAL_API_USAGE_ERROR -UNUSED_PARAMETER // !DIAGNOSTICS: -UNCHECKED_CAST -OPT_IN_USAGE_ERROR -UNUSED_PARAMETER
class Bar class Bar
@@ -111,29 +111,29 @@ package usage3
import api.* import api.*
@<!EXPERIMENTAL_API_USAGE!>EAnno<!> fun function() {} @<!OPT_IN_USAGE!>EAnno<!> fun function() {}
fun parameter(@<!EXPERIMENTAL_API_USAGE!>EAnno<!> p: String) {} fun parameter(@<!OPT_IN_USAGE!>EAnno<!> p: String) {}
fun parameterType(p: <!WRONG_ANNOTATION_TARGET!>@<!EXPERIMENTAL_API_USAGE!>EAnno<!><!> String) {} fun parameterType(p: <!WRONG_ANNOTATION_TARGET!>@<!OPT_IN_USAGE!>EAnno<!><!> String) {}
fun returnType(): <!WRONG_ANNOTATION_TARGET!>@<!EXPERIMENTAL_API_USAGE!>EAnno<!><!> Unit {} fun returnType(): <!WRONG_ANNOTATION_TARGET!>@<!OPT_IN_USAGE!>EAnno<!><!> Unit {}
@<!EXPERIMENTAL_API_USAGE!>EAnno<!> val property = "" @<!OPT_IN_USAGE!>EAnno<!> val property = ""
@<!EXPERIMENTAL_API_USAGE!>EAnno<!> typealias Typealias = Unit @<!OPT_IN_USAGE!>EAnno<!> typealias Typealias = Unit
@<!EXPERIMENTAL_API_USAGE!>EAnno<!> class Klass @<!OPT_IN_USAGE!>EAnno<!> class Klass
annotation class AnnotationArgument(val p: <!EXPERIMENTAL_API_USAGE!>EAnno<!>) annotation class AnnotationArgument(val p: <!OPT_IN_USAGE!>EAnno<!>)
fun insideBody() { fun insideBody() {
@<!EXPERIMENTAL_API_USAGE!>EAnno<!> fun local() {} @<!OPT_IN_USAGE!>EAnno<!> fun local() {}
} }
fun inDefaultArgument(f: () -> Unit = @<!EXPERIMENTAL_API_USAGE!>EAnno<!> fun() {}) {} fun inDefaultArgument(f: () -> Unit = @<!OPT_IN_USAGE!>EAnno<!> fun() {}) {}
val inProperty = @<!EXPERIMENTAL_API_USAGE!>EAnno<!> fun() {} val inProperty = @<!OPT_IN_USAGE!>EAnno<!> fun() {}
val inPropertyAccessor: () -> Unit val inPropertyAccessor: () -> Unit
get() = @<!EXPERIMENTAL_API_USAGE!>EAnno<!> fun() {} get() = @<!OPT_IN_USAGE!>EAnno<!> fun() {}

Some files were not shown because too many files have changed in this diff Show More