Do not show warning for mod from built-ins when LV=1.0
#KT-16372 Fixed
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2016 JetBrains s.r.o.
|
||||
* Copyright 2010-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.config.ApiVersion
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
@@ -28,12 +29,15 @@ import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.isSubpackageOf
|
||||
import org.jetbrains.kotlin.resolve.DeprecationLevelValue.*
|
||||
import org.jetbrains.kotlin.resolve.annotations.argumentValue
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.SinceKotlinInfo
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import org.jetbrains.kotlin.utils.SmartList
|
||||
|
||||
private val JAVA_DEPRECATED = FqName("java.lang.Deprecated")
|
||||
@@ -181,6 +185,11 @@ private fun DeclarationDescriptor.getOwnDeprecations(languageVersionSettings: La
|
||||
typeAliasDescriptor.getOwnDeprecations(languageVersionSettings)
|
||||
}
|
||||
|
||||
// The problem is that declaration `mod` in built-ins has @Deprecated annotation but actually it was deprecated only in version 1.1
|
||||
if (!languageVersionSettings.supportsFeature(LanguageFeature.OperatorRem) && isOperatorModFromBuiltIns(this)) {
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
val result = SmartList<Deprecation>()
|
||||
|
||||
fun addDeprecationIfPresent(target: DeclarationDescriptor) {
|
||||
@@ -272,3 +281,14 @@ fun DeclarationDescriptor.isHiddenInResolution(languageVersionSettings: Language
|
||||
|
||||
return isDeprecatedHidden(languageVersionSettings)
|
||||
}
|
||||
|
||||
private fun isOperatorModFromBuiltIns(descriptor: DeclarationDescriptor): Boolean {
|
||||
if (descriptor is FunctionDescriptor && descriptor.isOperator) {
|
||||
val isOperatorMod = descriptor.name == OperatorNameConventions.MOD
|
||||
|
||||
val descriptorFqName = descriptor.fqNameOrNull() ?: return false
|
||||
return isOperatorMod && descriptorFqName.isSubpackageOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
@@ -24,5 +24,13 @@ fun local() {
|
||||
}
|
||||
|
||||
fun noOverflow() {
|
||||
(-1).<!DEPRECATION!>mod<!>(5)
|
||||
(-1).mod(5)
|
||||
}
|
||||
|
||||
fun builtIns(b: Byte, s: Short) {
|
||||
var a = 1 % 2
|
||||
a %= 3
|
||||
1.mod(2)
|
||||
b % s
|
||||
1.0 % 2.0
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package
|
||||
|
||||
public fun builtIns(/*0*/ b: kotlin.Byte, /*1*/ s: kotlin.Short): kotlin.Unit
|
||||
public fun local(): kotlin.Unit
|
||||
public fun noOverflow(): kotlin.Unit
|
||||
public operator fun Baz.rem(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||
|
||||
Reference in New Issue
Block a user