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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.config.ApiVersion
|
import org.jetbrains.kotlin.config.ApiVersion
|
||||||
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
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.Diagnostic
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.isSubpackageOf
|
||||||
import org.jetbrains.kotlin.resolve.DeprecationLevelValue.*
|
import org.jetbrains.kotlin.resolve.DeprecationLevelValue.*
|
||||||
import org.jetbrains.kotlin.resolve.annotations.argumentValue
|
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.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.SinceKotlinInfo
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.SinceKotlinInfo
|
||||||
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
|
||||||
private val JAVA_DEPRECATED = FqName("java.lang.Deprecated")
|
private val JAVA_DEPRECATED = FqName("java.lang.Deprecated")
|
||||||
@@ -181,6 +185,11 @@ private fun DeclarationDescriptor.getOwnDeprecations(languageVersionSettings: La
|
|||||||
typeAliasDescriptor.getOwnDeprecations(languageVersionSettings)
|
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>()
|
val result = SmartList<Deprecation>()
|
||||||
|
|
||||||
fun addDeprecationIfPresent(target: DeclarationDescriptor) {
|
fun addDeprecationIfPresent(target: DeclarationDescriptor) {
|
||||||
@@ -272,3 +281,14 @@ fun DeclarationDescriptor.isHiddenInResolution(languageVersionSettings: Language
|
|||||||
|
|
||||||
return isDeprecatedHidden(languageVersionSettings)
|
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() {
|
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
|
package
|
||||||
|
|
||||||
|
public fun builtIns(/*0*/ b: kotlin.Byte, /*1*/ s: kotlin.Short): kotlin.Unit
|
||||||
public fun local(): kotlin.Unit
|
public fun local(): kotlin.Unit
|
||||||
public fun noOverflow(): kotlin.Unit
|
public fun noOverflow(): kotlin.Unit
|
||||||
public operator fun Baz.rem(/*0*/ x: kotlin.Int): kotlin.Unit
|
public operator fun Baz.rem(/*0*/ x: kotlin.Int): kotlin.Unit
|
||||||
|
|||||||
Reference in New Issue
Block a user