Update annotation rendering in diagnostics

Disable annotation rendering in default type and descriptor renderers.
Preserve annotations in Android and Serialization plugins.
Update error texts in ide tests.
Nullability annotations in Java descriptors are rendered with context-dependent renderer.

#KT-20258 Fixed
This commit is contained in:
Pavel Kirpichenkov
2019-09-20 17:01:09 +03:00
parent 2a99687a95
commit b7e5d9faae
54 changed files with 1047 additions and 46 deletions
@@ -116,7 +116,7 @@ public class IdeErrorMessages {
"<tr><td>Parameter:</td><td>{1}</td></tr></table></html>", HTML_RENDER_TYPE, HTML_RENDER_TYPE);
MAP.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, "<html>Return type is ''{0}'', which is not a subtype of overridden<br/>" +
"{1}</html>", HTML_RENDER_RETURN_TYPE, HTML);
"{1}</html>", HTML_RENDER_RETURN_TYPE, HTML_WITH_ANNOTATIONS_WHITELIST);
MAP.put(RETURN_TYPE_MISMATCH_ON_INHERITANCE, "<html>Return types of inherited members are incompatible:<br/>{0},<br/>{1}</html>",
HTML, HTML);
@@ -36,6 +36,6 @@ object IdeMultiplatformDiagnosticRenderingMode : MultiplatformDiagnosticRenderin
}
override fun renderDescriptor(sb: StringBuilder, descriptor: DeclarationDescriptor, context: RenderingContext, indent: String) {
sb.append(IdeRenderers.HTML.render(descriptor, context))
sb.append(IdeRenderers.HTML_WITH_ANNOTATIONS.render(descriptor, context))
}
}
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.diagnostics.rendering.*
import org.jetbrains.kotlin.idea.highlighter.renderersUtil.renderResolvedCall
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.DescriptorRendererModifier
import org.jetbrains.kotlin.resolve.MemberComparator
import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
@@ -37,7 +38,10 @@ object IdeRenderers {
}
@JvmField
val HTML_RENDER_TYPE = SmartTypeRenderer(DescriptorRenderer.HTML.withOptions { parameterNamesInFunctionalTypes = false })
val HTML_RENDER_TYPE = SmartTypeRenderer(DescriptorRenderer.HTML.withOptions {
parameterNamesInFunctionalTypes = false
modifiers = DescriptorRendererModifier.ALL_EXCEPT_ANNOTATIONS
})
@JvmField
val HTML_NONE_APPLICABLE_CALLS = Renderer { calls: Collection<ResolvedCall<*>> ->
@@ -91,5 +95,11 @@ object IdeRenderers {
}
@JvmField
val HTML = DescriptorRenderer.HTML.asRenderer()
val HTML = DescriptorRenderer.HTML.withOptions {
modifiers = DescriptorRendererModifier.ALL_EXCEPT_ANNOTATIONS
}.asRenderer()
@JvmField val HTML_WITH_ANNOTATIONS = DescriptorRenderer.HTML.withOptions {
modifiers = DescriptorRendererModifier.ALL
}.asRenderer()
@JvmField val HTML_WITH_ANNOTATIONS_WHITELIST = DescriptorRenderer.HTML.withAnnotationsWhitelist()
}
@@ -55,16 +55,21 @@ class ChangeSuperTypeListEntryTypeArgumentFix(
companion object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
val casted = when (diagnostic.factory) {
Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE -> Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE.cast(diagnostic)
Errors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE -> Errors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE.cast(diagnostic)
val (casted, declaration) = when (diagnostic.factory) {
Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE -> {
val casted = Errors.RETURN_TYPE_MISMATCH_ON_OVERRIDE.cast(diagnostic)
casted to casted.b.declaration
}
Errors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE -> {
val casted = Errors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE.cast(diagnostic)
casted to casted.b
}
else -> null
} ?: return null
val type = casted.a.returnType?.toString() ?: return null
val superClassDescriptor = casted.b.containingDeclaration as? ClassDescriptor ?: return null
val superDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(casted.b) as? KtNamedDeclaration ?: return null
val superClassDescriptor = declaration.containingDeclaration as? ClassDescriptor ?: return null
val superDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(declaration) as? KtNamedDeclaration ?: return null
val superTypeReference = superDeclaration.getReturnTypeReference()?.text ?: return null
val typeParameterIndex = superClassDescriptor.declaredTypeParameters.map { it.name.asString() }.indexOf(superTypeReference)
if (typeParameterIndex < 0) return null
@@ -1,5 +1,5 @@
// PROBLEM: none
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Collection<Int>.plus(element: Int): List<Int> defined in kotlin.collections<br>@InlineOnly public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Collection<Int>.plus(element: Int): List<Int> defined in kotlin.collections<br>public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
// WITH_RUNTIME
fun test() {
var list = mutableListOf(1)
@@ -1,5 +1,5 @@
// PROBLEM: none
// ERROR: Assignment operators ambiguity: <br>public operator fun <K, V> Map<out Int, Int>.plus(pair: Pair<Int, Int>): Map<Int, Int> defined in kotlin.collections<br>@InlineOnly public inline operator fun <K, V> MutableMap<in Int, in Int>.plusAssign(pair: Pair<Int, Int>): Unit defined in kotlin.collections
// ERROR: Assignment operators ambiguity: <br>public operator fun <K, V> Map<out Int, Int>.plus(pair: Pair<Int, Int>): Map<Int, Int> defined in kotlin.collections<br>public inline operator fun <K, V> MutableMap<in Int, in Int>.plusAssign(pair: Pair<Int, Int>): Unit defined in kotlin.collections
// WITH_RUNTIME
fun test() {
var map = mutableMapOf(1 to 2)
@@ -1,5 +1,5 @@
// PROBLEM: none
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Set<Int>.plus(element: Int): Set<Int> defined in kotlin.collections<br>@InlineOnly public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Set<Int>.plus(element: Int): Set<Int> defined in kotlin.collections<br>public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
// WITH_RUNTIME
fun test() {
var set = mutableSetOf(1)
@@ -2,7 +2,7 @@
// ACTION: Replace overloaded operator with function call
// ACTION: Replace with 'plusAssign()' call
// ACTION: Replace with ordinary assignment
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Collection<Int>.plus(element: Int): List<Int> defined in kotlin.collections<br>@InlineOnly public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
// ERROR: Assignment operators ambiguity: <br>public operator fun <T> Collection<Int>.plus(element: Int): List<Int> defined in kotlin.collections<br>public inline operator fun <T> MutableCollection<in Int>.plusAssign(element: Int): Unit defined in kotlin.collections
// WITH_RUNTIME
class Test {
@@ -2,7 +2,7 @@
// ACTION: Create extension function 'A.minus'
// ACTION: Create member function 'A.minus'
// ACTION: Replace overloaded operator with function call
// ERROR: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: <br>@InlineOnly public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin<br>@InlineOnly public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin<br>public operator fun <T> Iterable<???>.minus(elements: Array<out ???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Iterable<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Sequence<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<A>.minus(element: A): List<A> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out ???, ???>.minus(keys: Array<out ???>): Map<???, ???> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out ???, ???>.minus(keys: Iterable<???>): Map<???, ???> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out ???, ???>.minus(keys: Sequence<???>): Map<???, ???> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out A, ???>.minus(key: A): Map<A, ???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Array<out ???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Iterable<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Sequence<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<A>.minus(element: A): Set<A> defined in kotlin.collections<br>public operator fun <T> Sequence<???>.minus(elements: Array<out ???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Iterable<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Sequence<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<A>.minus(element: A): Sequence<A> defined in kotlin.sequences
// ERROR: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: <br>public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin<br>public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin<br>public operator fun <T> Iterable<???>.minus(elements: Array<out ???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Iterable<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Sequence<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<A>.minus(element: A): List<A> defined in kotlin.collections<br>public operator fun <K, V> Map<out ???, ???>.minus(keys: Array<out ???>): Map<???, ???> defined in kotlin.collections<br>public operator fun <K, V> Map<out ???, ???>.minus(keys: Iterable<???>): Map<???, ???> defined in kotlin.collections<br>public operator fun <K, V> Map<out ???, ???>.minus(keys: Sequence<???>): Map<???, ???> defined in kotlin.collections<br>public operator fun <K, V> Map<out A, ???>.minus(key: A): Map<A, ???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Array<out ???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Iterable<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Sequence<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<A>.minus(element: A): Set<A> defined in kotlin.collections<br>public operator fun <T> Sequence<???>.minus(elements: Array<out ???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Iterable<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Sequence<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<A>.minus(element: A): Sequence<A> defined in kotlin.sequences
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
class A
@@ -2,7 +2,7 @@
// ACTION: Create extension function 'A.minus'
// ACTION: Create member function 'A.minus'
// ACTION: Replace overloaded operator with function call
// ERROR: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: <br>@InlineOnly public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin<br>@InlineOnly public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin<br>public operator fun <T> Iterable<???>.minus(elements: Array<out ???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Iterable<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Sequence<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<A>.minus(element: A): List<A> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out ???, ???>.minus(keys: Array<out ???>): Map<???, ???> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out ???, ???>.minus(keys: Iterable<???>): Map<???, ???> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out ???, ???>.minus(keys: Sequence<???>): Map<???, ???> defined in kotlin.collections<br>@SinceKotlin public operator fun <K, V> Map<out A, ???>.minus(key: A): Map<A, ???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Array<out ???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Iterable<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Sequence<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<A>.minus(element: A): Set<A> defined in kotlin.collections<br>public operator fun <T> Sequence<???>.minus(elements: Array<out ???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Iterable<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Sequence<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<A>.minus(element: A): Sequence<A> defined in kotlin.sequences
// ERROR: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: <br>public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin<br>public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin<br>public operator fun <T> Iterable<???>.minus(elements: Array<out ???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Iterable<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<???>.minus(elements: Sequence<???>): List<???> defined in kotlin.collections<br>public operator fun <T> Iterable<A>.minus(element: A): List<A> defined in kotlin.collections<br>public operator fun <K, V> Map<out ???, ???>.minus(keys: Array<out ???>): Map<???, ???> defined in kotlin.collections<br>public operator fun <K, V> Map<out ???, ???>.minus(keys: Iterable<???>): Map<???, ???> defined in kotlin.collections<br>public operator fun <K, V> Map<out ???, ???>.minus(keys: Sequence<???>): Map<???, ???> defined in kotlin.collections<br>public operator fun <K, V> Map<out A, ???>.minus(key: A): Map<A, ???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Array<out ???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Iterable<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<???>.minus(elements: Sequence<???>): Set<???> defined in kotlin.collections<br>public operator fun <T> Set<A>.minus(element: A): Set<A> defined in kotlin.collections<br>public operator fun <T> Sequence<???>.minus(elements: Array<out ???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Iterable<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<???>.minus(elements: Sequence<???>): Sequence<???> defined in kotlin.sequences<br>public operator fun <T> Sequence<A>.minus(element: A): Sequence<A> defined in kotlin.sequences
// COMPILER_ARGUMENTS: -XXLanguage:-NewInference
class A
@@ -1,5 +1,5 @@
// "class org.jetbrains.kotlin.idea.quickfix.replaceWith.DeprecatedSymbolUsageFix" "false"
// ERROR: Too many arguments for @Deprecated public fun oldFun(): Unit defined in root package in file callWithError.kt
// ERROR: Too many arguments for public fun oldFun(): Unit defined in root package in file callWithError.kt
@Deprecated("", ReplaceWith("newFun()"))
fun oldFun() {
+2 -2
View File
@@ -9,6 +9,6 @@ fun goo(a: String) { // ERROR: Unresolved reference: goo
}
/** unresolvedMultiline.kts:3 Unresolved reference: foo */
/** unresolvedMultiline.kts:3 Overload resolution ambiguity:
@HidesMembers public inline fun <T> Iterable<TypeVariable(T)>.forEach(action: (TypeVariable(T)) -> Unit): Unit defined in kotlin.collections
@HidesMembers public inline fun <K, V> Map<out TypeVariable(K), TypeVariable(V)>.forEach(action: (Map.Entry<TypeVariable(K), TypeVariable(V)>) -> Unit): Unit defined in kotlin.collections */
public inline fun <T> Iterable<TypeVariable(T)>.forEach(action: (TypeVariable(T)) -> Unit): Unit defined in kotlin.collections
public inline fun <K, V> Map<out TypeVariable(K), TypeVariable(V)>.forEach(action: (Map.Entry<TypeVariable(K), TypeVariable(V)>) -> Unit): Unit defined in kotlin.collections */
/** unresolvedMultiline.kts:7 Unresolved reference: goo */
+2 -2
View File
@@ -11,8 +11,8 @@ fun goo(a: String) { // ERROR: error: unresolved reference: goo...
foo.forEach {
^
error: cannot choose among the following candidates without completing type inference:
@HidesMembers public inline fun <T> Iterable<???>.forEach(action: (???) -> Unit): Unit defined in kotlin.collections
@HidesMembers public inline fun <K, V> Map<out ???, ???>.forEach(action: (Map.Entry<???, ???>) -> Unit): Unit defined in kotlin.collections
public inline fun <T> Iterable<???>.forEach(action: (???) -> Unit): Unit defined in kotlin.collections
public inline fun <K, V> Map<out ???, ???>.forEach(action: (Map.Entry<???, ???>) -> Unit): Unit defined in kotlin.collections
foo.forEach {
^ */
/** unresolvedMultiline.kts:7 error: unresolved reference: goo