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
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.frontend.java.di
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsPackageFragmentProvider
import org.jetbrains.kotlin.config.AnalysisFlags
import org.jetbrains.kotlin.config.JvmAnalysisFlags
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersionSettings
@@ -44,6 +43,7 @@ import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.JvmDiagnosticComponents
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
@@ -128,6 +128,7 @@ fun StorageComponentContainer.configureJavaSpecificComponents(
)
useImpl<FilesByFacadeFqNameIndexer>()
useImpl<JvmDiagnosticComponents>()
}
fun ComponentProvider.initJvmBuiltInsForTopDownAnalysis() {
@@ -0,0 +1,28 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.resolve.jvm
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
import org.jetbrains.kotlin.load.java.NULLABILITY_ANNOTATIONS
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
import org.jetbrains.kotlin.platform.PlatformSpecificDiagnosticComponents
class JvmDiagnosticComponents(
private val typeQualifierResolver: AnnotationTypeQualifierResolver
) : PlatformSpecificDiagnosticComponents {
override fun isNullabilityAnnotation(
annotationDescriptor: AnnotationDescriptor,
containingDeclaration: DeclarationDescriptor
): Boolean {
if (containingDeclaration !is JavaCallableMemberDescriptor) {
return false
}
return annotationDescriptor.fqName?.let { it in NULLABILITY_ANNOTATIONS } == true
|| typeQualifierResolver.resolveTypeQualifierAnnotation(annotationDescriptor) != null
}
}