diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java index 3bf4508ebc4..6d471a80d82 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -826,6 +826,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/annotations/annotationOnParameterInFunctionType.kt"); } + @TestMetadata("annotationRenderingInTypes.kt") + public void testAnnotationRenderingInTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.kt"); + } + @TestMetadata("AnnotationsForClasses.kt") public void testAnnotationsForClasses() throws Exception { runTest("compiler/testData/diagnostics/tests/annotations/AnnotationsForClasses.kt"); @@ -1418,6 +1423,74 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok } } + @TestMetadata("compiler/testData/diagnostics/tests/annotations/rendering") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Rendering extends AbstractFirDiagnosticsSmokeTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInRendering() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/annotations/rendering"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("cannotOverrideInvisibleMember.kt") + public void testCannotOverrideInvisibleMember() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.kt"); + } + + @TestMetadata("conflictingOverloads.kt") + public void testConflictingOverloads() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.kt"); + } + + @TestMetadata("differentNamesForParameter.kt") + public void testDifferentNamesForParameter() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.kt"); + } + + @TestMetadata("memberProjectedOut.kt") + public void testMemberProjectedOut() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.kt"); + } + + @TestMetadata("multipleInheritedDefaults.kt") + public void testMultipleInheritedDefaults() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.kt"); + } + + @TestMetadata("notImplementedMembers.kt") + public void testNotImplementedMembers() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.kt"); + } + + @TestMetadata("tooManyArguments.kt") + public void testTooManyArguments() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.kt"); + } + + @TestMetadata("typeMismatchDueToTypeProjections.kt") + public void testTypeMismatchDueToTypeProjections() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.kt"); + } + + @TestMetadata("typeMismatchOnOverride.kt") + public void testTypeMismatchOnOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.kt"); + } + + @TestMetadata("typeMismatchOnOverrideJavaNullable.kt") + public void testTypeMismatchOnOverrideJavaNullable() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.kt"); + } + + @TestMetadata("unusedValue.kt") + public void testUnusedValue() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.kt"); + } + } + @TestMetadata("compiler/testData/diagnostics/tests/annotations/withUseSiteTarget") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index 78c4e5a79f2..4a1956b8e01 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -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() + useImpl() } fun ComponentProvider.initJvmBuiltInsForTopDownAnalysis() { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmDiagnosticComponents.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmDiagnosticComponents.kt new file mode 100644 index 00000000000..ae7e5a323ba --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmDiagnosticComponents.kt @@ -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 + } +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index d7db9248ce2..20c78ecc7ea 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -11,12 +11,12 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.impl.source.tree.LeafPsiElement; import kotlin.Pair; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.analyzer.ModuleInfo; import org.jetbrains.kotlin.cfg.WhenMissingCase; import org.jetbrains.kotlin.config.LanguageFeature; import org.jetbrains.kotlin.config.LanguageVersion; import org.jetbrains.kotlin.config.LanguageVersionSettings; import org.jetbrains.kotlin.descriptors.*; +import org.jetbrains.kotlin.diagnostics.rendering.DeclarationWithDiagnosticComponents; import org.jetbrains.kotlin.lexer.KtKeywordToken; import org.jetbrains.kotlin.lexer.KtModifierKeywordToken; import org.jetbrains.kotlin.lexer.KtTokens; @@ -475,7 +475,7 @@ public interface Errors { DiagnosticFactory3.create(ERROR, VISIBILITY_MODIFIER); DiagnosticFactory3 CANNOT_CHANGE_ACCESS_PRIVILEGE = DiagnosticFactory3.create(ERROR, VISIBILITY_MODIFIER); - DiagnosticFactory2 RETURN_TYPE_MISMATCH_ON_OVERRIDE = + DiagnosticFactory2 RETURN_TYPE_MISMATCH_ON_OVERRIDE = DiagnosticFactory2.create(ERROR, DECLARATION_RETURN_TYPE); DiagnosticFactory2 PROPERTY_TYPE_MISMATCH_ON_OVERRIDE = DiagnosticFactory2.create(ERROR, DECLARATION_RETURN_TYPE); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/AnnotationsWhitelistDescriptorRenderer.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/AnnotationsWhitelistDescriptorRenderer.kt new file mode 100644 index 00000000000..2c59f3fd080 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/AnnotationsWhitelistDescriptorRenderer.kt @@ -0,0 +1,36 @@ +/* + * 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.diagnostics.rendering + +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.platform.PlatformSpecificDiagnosticComponents +import org.jetbrains.kotlin.renderer.DescriptorRenderer + +data class DeclarationWithDiagnosticComponents( + val declaration: DeclarationDescriptor, + val diagnosticComponents: PlatformSpecificDiagnosticComponents +) : Iterable { + override fun iterator() = + sequenceOf(declaration, diagnosticComponents).iterator() +} + +class AnnotationsWhitelistDescriptorRenderer( + private val baseRenderer: DescriptorRenderer, + private val toParameterRenderer: DescriptorRenderer.() -> DiagnosticParameterRenderer +) : DiagnosticParameterRenderer { + override fun render(obj: DeclarationWithDiagnosticComponents, renderingContext: RenderingContext): String { + val (descriptor, diagnosticComponents) = obj + return baseRenderer.withOptions { + annotationFilter = { annotation -> + diagnosticComponents.isNullabilityAnnotation(annotation, descriptor) + } + }.toParameterRenderer().render(descriptor, renderingContext) + } +} + +fun DescriptorRenderer.withAnnotationsWhitelist( + toParameterRenderer: DescriptorRenderer.() -> DiagnosticParameterRenderer = DescriptorRenderer::asRenderer +) = AnnotationsWhitelistDescriptorRenderer(this, toParameterRenderer) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 997375bea7d..5da85c0a6e9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -84,7 +84,8 @@ public class DefaultErrorMessages { MAP.put(EXTENSION_FUNCTION_SHADOWED_BY_MEMBER_PROPERTY_WITH_INVOKE, "Extension function is shadowed by a member property ''{0}'' with {1}", NAME, COMPACT_WITH_MODIFIERS); - MAP.put(INACCESSIBLE_TYPE, "Type {0} is inaccessible in this context due to: {1}", RENDER_TYPE, commaSeparated(FQ_NAMES_IN_TYPES)); + MAP.put(INACCESSIBLE_TYPE, "Type {0} is inaccessible in this context due to: {1}", RENDER_TYPE, commaSeparated( + FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS)); MAP.put(REDECLARATION, "Conflicting declarations: {0}", commaSeparated(COMPACT_WITH_MODIFIERS)); MAP.put(PACKAGE_OR_CLASSIFIER_REDECLARATION, "Redeclaration: {0}", STRING); @@ -762,7 +763,7 @@ public class DefaultErrorMessages { MAP.put(CANNOT_CHANGE_ACCESS_PRIVILEGE, "Cannot change access privilege ''{0}'' for ''{1}'' in ''{2}''", VISIBILITY, NAME, NAME); MAP.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, "Return type of ''{0}'' is not a subtype of the return type of the overridden member ''{1}''", - NAME, FQ_NAMES_IN_TYPES); + NAME, FQ_NAMES_IN_TYPES_ANNOTATIONS_WHITELIST); MAP.put(RETURN_TYPE_MISMATCH_ON_INHERITANCE, "''{0}'' clashes with ''{1}'': return types are incompatible", SHORT_NAMES_IN_TYPES, SHORT_NAMES_IN_TYPES); @@ -784,7 +785,8 @@ public class DefaultErrorMessages { MAP.put(PROPERTY_TYPE_MISMATCH_BY_DELEGATION, "Type of property ''{0}'' is not a subtype of overridden by delegation ''{1}''", SHORT_NAMES_IN_TYPES, SHORT_NAMES_IN_TYPES); - MAP.put(VAR_OVERRIDDEN_BY_VAL, "Var-property {0} cannot be overridden by val-property {1}", FQ_NAMES_IN_TYPES, FQ_NAMES_IN_TYPES); + MAP.put(VAR_OVERRIDDEN_BY_VAL, "Var-property {0} cannot be overridden by val-property {1}", FQ_NAMES_IN_TYPES, + FQ_NAMES_IN_TYPES); MAP.put(CONFLICTING_INHERITED_MEMBERS, "{0} inherits conflicting members: {1}", NAME, commaSeparated(FQ_NAMES_IN_TYPES)); MAP.put(ABSTRACT_MEMBER_NOT_IMPLEMENTED, "{0} is not abstract and does not implement abstract member {1}", RENDER_CLASS_OR_OBJECT, @@ -921,7 +923,8 @@ public class DefaultErrorMessages { MAP.put(DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES, "Names of the parameter #{1} conflict in the following members of supertypes: ''{0}''. " + - "This may cause problems when calling this function with named arguments.", commaSeparated(FQ_NAMES_IN_TYPES), TO_STRING); + "This may cause problems when calling this function with named arguments.", commaSeparated( + FQ_NAMES_IN_TYPES), TO_STRING); MAP.put(NAME_FOR_AMBIGUOUS_PARAMETER, "Named argument is not allowed for a parameter with an ambiguous name"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt index f425e0eb9e9..9cbf3451bd5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newTable import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.newText +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.psi.* @@ -157,7 +158,25 @@ object Renderers { val RENDER_CLASS_OR_OBJECT_NAME = Renderer { it.renderKindWithName() } @JvmField - val RENDER_TYPE = SmartTypeRenderer(DescriptorRenderer.FQ_NAMES_IN_TYPES.withOptions { parameterNamesInFunctionalTypes = false }) + val RENDER_TYPE = SmartTypeRenderer(DescriptorRenderer.FQ_NAMES_IN_TYPES.withOptions { + parameterNamesInFunctionalTypes = false + }) + + @JvmField + val RENDER_TYPE_WITH_ANNOTATIONS = SmartTypeRenderer(DescriptorRenderer.FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS.withOptions { + parameterNamesInFunctionalTypes = false + }) + + @JvmField + val TYPE_PROJECTION = Renderer { projection -> + when { + projection.isStarProjection -> "*" + projection.projectionKind == Variance.INVARIANT -> + RENDER_TYPE.render(projection.type, RenderingContext.of(projection.type)) + else -> + "${projection.projectionKind} ${RENDER_TYPE.render(projection.type, RenderingContext.of(projection.type))}" + } + } @JvmField val RENDER_POSITION_VARIANCE = Renderer { variance: Variance -> @@ -504,7 +523,10 @@ object Renderers { newText().normal( typeParameter.name.wrapIntoQuotes() + " cannot capture " + - "${capturedTypeConstructor.projection.toString().wrapIntoQuotes()}. " + + "${result.typeProjectionRenderer.render( + capturedTypeConstructor.projection, + RenderingContext.of(capturedTypeConstructor.projection) + ).wrapIntoQuotes()}. " + explanation ) ) @@ -527,11 +549,18 @@ object Renderers { } } - private fun renderTypes(types: Collection, context: RenderingContext) = - StringUtil.join(types, { RENDER_TYPE.render(it, context) }, ", ") + private fun renderTypes( + types: Collection, + typeRenderer: DiagnosticParameterRenderer, + context: RenderingContext + ): String { + return StringUtil.join(types, { typeRenderer.render(it, context) }, ", ") + } @JvmField - val RENDER_COLLECTION_OF_TYPES = ContextDependentRenderer> { types, context -> renderTypes(types, context) } + val RENDER_COLLECTION_OF_TYPES = ContextDependentRenderer> { types, context -> + renderTypes(types, RENDER_TYPE, context) + } enum class ConstraintSystemRenderingVerbosity { COMPACT, @@ -634,13 +663,13 @@ object Renderers { if (TypeUtils.noExpectedType(inferenceErrorData.expectedType)) { append(inferenceErrorData.expectedType) } else { - append(RENDER_TYPE.render(inferenceErrorData.expectedType, context)) + append(RENDER_TYPE_WITH_ANNOTATIONS.render(inferenceErrorData.expectedType, context)) } append("\nArgument types:\n") if (inferenceErrorData.receiverArgumentType != null) { - append(RENDER_TYPE.render(inferenceErrorData.receiverArgumentType, context)).append(".") + append(RENDER_TYPE_WITH_ANNOTATIONS.render(inferenceErrorData.receiverArgumentType, context)).append(".") } - append("(").append(renderTypes(inferenceErrorData.valueArgumentsTypes, context)).append(")") + append("(").append(renderTypes(inferenceErrorData.valueArgumentsTypes, RENDER_TYPE_WITH_ANNOTATIONS, context)).append(")") } private fun String.wrapIntoQuotes(): String = "'$this'" @@ -662,6 +691,10 @@ object Renderers { @JvmField val FQ_NAMES_IN_TYPES = DescriptorRenderer.FQ_NAMES_IN_TYPES.asRenderer() @JvmField + val FQ_NAMES_IN_TYPES_ANNOTATIONS_WHITELIST = DescriptorRenderer.FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS.withAnnotationsWhitelist() + @JvmField + val FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS = DescriptorRenderer.FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS.asRenderer() + @JvmField val COMPACT = DescriptorRenderer.COMPACT.asRenderer() @JvmField val COMPACT_WITHOUT_SUPERTYPES = DescriptorRenderer.COMPACT_WITHOUT_SUPERTYPES.asRenderer() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/TabledDescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/TabledDescriptorRenderer.java index 5f92c2741cc..1cb5649722b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/TabledDescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/TabledDescriptorRenderer.java @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.Table import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TextRenderer.TextElement; import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPosition; import org.jetbrains.kotlin.types.KotlinType; +import org.jetbrains.kotlin.types.TypeProjection; import java.util.ArrayList; import java.util.Iterator; @@ -157,6 +158,11 @@ public class TabledDescriptorRenderer { return Renderers.RENDER_TYPE; } + @NotNull + public DiagnosticParameterRenderer getTypeProjectionRenderer() { + return Renderers.TYPE_PROJECTION; + } + protected void renderText(TextRenderer textRenderer, StringBuilder result) { for (TextElement element : textRenderer.elements) { result.append(element.text); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt index 439891a2d80..c3a9cf56c36 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt @@ -77,7 +77,7 @@ private fun collectClassifiersFqNames(objectsToRender: Collection): Set, result: MutableSet) { +private fun collectMentionedClassifiersFqNames(contextObjects: Iterable, result: MutableSet) { fun KotlinType.addMentionedTypeConstructor() { constructor.declarationDescriptor?.let { result.add(it.fqNameUnsafe) } } @@ -90,7 +90,7 @@ private fun collectMentionedClassifiersFqNames(contextObjects: Collection, } } - contextObjects.filterIsInstance>().forEach { + contextObjects.filterIsInstance>().forEach { collectMentionedClassifiersFqNames(it, result) } contextObjects.filterIsInstance().forEach { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt index fa05f053163..acfd8cdc68c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt @@ -30,8 +30,10 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERR import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2 import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement import org.jetbrains.kotlin.diagnostics.Errors.* +import org.jetbrains.kotlin.diagnostics.rendering.DeclarationWithDiagnosticComponents import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.platform.PlatformSpecificDiagnosticComponents import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorUtils.classCanHaveAbstractFakeOverride import org.jetbrains.kotlin.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE @@ -47,7 +49,8 @@ class OverrideResolver( private val trace: BindingTrace, private val overridesBackwardCompatibilityHelper: OverridesBackwardCompatibilityHelper, private val languageVersionSettings: LanguageVersionSettings, - private val kotlinTypeRefiner: KotlinTypeRefiner + private val kotlinTypeRefiner: KotlinTypeRefiner, + private val platformSpecificDiagnosticComponents: PlatformSpecificDiagnosticComponents ) { fun check(c: TopDownAnalysisContext) { @@ -289,7 +292,9 @@ class OverrideResolver( override fun returnTypeMismatchOnOverride(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) { if (!typeMismatchError) { typeMismatchError = true - trace.report(RETURN_TYPE_MISMATCH_ON_OVERRIDE.on(member, declared, overridden)) + trace.report(RETURN_TYPE_MISMATCH_ON_OVERRIDE.on( + member, declared, DeclarationWithDiagnosticComponents(overridden, platformSpecificDiagnosticComponents) + )) } } diff --git a/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.kt b/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.kt new file mode 100644 index 00000000000..6ad7f38aaff --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.kt @@ -0,0 +1,25 @@ +// !RENDER_DIAGNOSTICS_MESSAGES +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_ANONYMOUS_PARAMETER + +fun f1(x: String) {} +fun f2(f: () -> Unit) {} +fun test1() = f2( Unit", "KFunction1")!>::f1) + + +@Target(AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.TYPE) +annotation class Ann + +fun <@Ann R : @Ann Any> f3(a: Array<@Ann R>): Array<@Ann R?> = null!! + +fun test2(a: @Ann Array) { + val r: Array = f3(a) +} + + +var test3: Int = 0 + set(s: @Ann String) {} + + +fun f4(fn: (@Ann Int, @Ann Int) -> Unit) {} + +val test4 = f4 { single -> } diff --git a/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.txt b/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.txt new file mode 100644 index 00000000000..5172d3d52d3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.txt @@ -0,0 +1,17 @@ +package + +public var test3: kotlin.Int +public val test4: kotlin.Unit +public fun f1(/*0*/ x: kotlin.String): kotlin.Unit +public fun f2(/*0*/ f: () -> kotlin.Unit): kotlin.Unit +public fun f3(/*0*/ a: kotlin.Array<@Ann R>): kotlin.Array<@Ann R?> +public fun f4(/*0*/ fn: (@Ann kotlin.Int, @Ann kotlin.Int) -> kotlin.Unit): kotlin.Unit +public fun test1(): kotlin.Unit +public fun test2(/*0*/ a: @Ann kotlin.Array): kotlin.Unit + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation { + public constructor Ann() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.kt b/compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.kt new file mode 100644 index 00000000000..f612b7fee73 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.kt @@ -0,0 +1,15 @@ +// !DIAGNOSTICS: -INCOMPATIBLE_MODIFIERS +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS) +annotation class A + +@A +open class B1 { + @A + private open fun foo() {} +} + +class D1 : B1() { + override fun foo() {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.txt b/compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.txt new file mode 100644 index 00000000000..0b18f521daf --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.txt @@ -0,0 +1,24 @@ +package + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS}) public final annotation class A : kotlin.Annotation { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@A public open class B1 { + public constructor B1() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @A private open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class D1 : B1 { + public constructor D1() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.kt b/compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.kt new file mode 100644 index 00000000000..2822ce412ed --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.kt @@ -0,0 +1,10 @@ +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER) +annotation class An + +@An +data class A(@An val x: @An Int) { + @An + fun copy(@An x: @An Int) = x +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.txt b/compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.txt new file mode 100644 index 00000000000..84e1858197e --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.txt @@ -0,0 +1,19 @@ +package + +@An public final data class A { + public constructor A(/*0*/ @An x: @An kotlin.Int) + public final val x: @An kotlin.Int + public final operator /*synthesized*/ fun component1(): @An kotlin.Int + @An public final fun copy(/*0*/ @An x: @An kotlin.Int): @An kotlin.Int + public final /*synthesized*/ fun copy(/*0*/ @An x: @An kotlin.Int = ...): A + public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER}) public final annotation class An : kotlin.Annotation { + public constructor An() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.kt b/compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.kt new file mode 100644 index 00000000000..25d3516b121 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.kt @@ -0,0 +1,18 @@ +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER) +annotation class An + +@An +interface A { + @An + fun foo(@An a : @An Int) +} + +@An +interface B { + @An + fun foo(@An b : @An Int) +} + +interface C : A, B \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.txt b/compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.txt new file mode 100644 index 00000000000..509445c436b --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.txt @@ -0,0 +1,29 @@ +package + +@An public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @An public abstract fun foo(/*0*/ @An a: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER}) public final annotation class An : kotlin.Annotation { + public constructor An() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface B { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @An public abstract fun foo(/*0*/ @An b: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface C : A, B { + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @An public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ @An a: @An kotlin.Int): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.kt b/compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.kt new file mode 100644 index 00000000000..99c67a63922 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.kt @@ -0,0 +1,15 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS) +annotation class A + +@A +class C { + @A + operator fun set(x: @A Int, y: @A T) {} +} + +fun test(a: C) { + ")!>a[1] = 25 +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.txt b/compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.txt new file mode 100644 index 00000000000..5e7dd0bc29b --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.txt @@ -0,0 +1,18 @@ +package + +public fun test(/*0*/ a: C): kotlin.Unit + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS}) public final annotation class A : kotlin.Annotation { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@A public final class C { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + @A public final operator fun set(/*0*/ x: @A kotlin.Int, /*1*/ y: @A T): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.kt b/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.kt new file mode 100644 index 00000000000..f0ab2e368b4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.kt @@ -0,0 +1,26 @@ +// !RENDER_DIAGNOSTICS_MESSAGES +// !DIAGNOSTICS: -ABSTRACT_MEMBER_NOT_IMPLEMENTED + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.EXPRESSION) +@Retention( AnnotationRetention.SOURCE) +annotation class An + +@An +interface A { + @An + fun foo(@An a: @An Int = @An 1) +} + +@An +interface B { + @An + fun foo(@An a: @An Int = @An 2) +} + +class AB1 : A, B + +@An +class AB2 : A, B { + @An + override fun foo(@An a: @An Int) {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.txt b/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.txt new file mode 100644 index 00000000000..bdabcebe38f --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.txt @@ -0,0 +1,38 @@ +package + +@An public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @An public abstract fun foo(/*0*/ @An a: @An kotlin.Int = ...): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class AB1 : A, B { + public constructor AB1() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @An public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ @An a: @An kotlin.Int = ...): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public final class AB2 : A, B { + public constructor AB2() + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @An public open override /*2*/ fun foo(/*0*/ @An a: @An kotlin.Int = ...): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.EXPRESSION}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class An : kotlin.Annotation { + public constructor An() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface B { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @An public abstract fun foo(/*0*/ @An a: @An kotlin.Int = ...): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.kt b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.kt new file mode 100644 index 00000000000..249bd575dfe --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.kt @@ -0,0 +1,48 @@ +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY) +annotation class An + +@An +interface A { + @An + fun a(@An arg: @An Int) +} + +@An +interface B { + @An + fun a(@An arg: @An Int) +} + + a(arg: Int): Unit defined in B")!>interface C : A, B + +@An +abstract class D { + @An + abstract val d: @An Int +} + +class E : D(), A +class F : A + +@An +interface G { + @An + fun a(@An arg: @An Int) +} + +@An +interface AI : A { + @An + override fun a(@An arg: @An Int) {} +} + +@An +interface GI : G { + @An + override fun a(@An arg: @An Int) {} +} + +class AG1(val a: A, val g: G) : A by a, G by g +class AG2() : AI, GI \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.txt b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.txt new file mode 100644 index 00000000000..1b372970a90 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.txt @@ -0,0 +1,93 @@ +package + +@An public interface A { + @An public abstract fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class AG1 : A, G { + public constructor AG1(/*0*/ a: A, /*1*/ g: G) + public final val a: A + public final val g: G + @An public open override /*2*/ /*delegation*/ fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class AG2 : AI, GI { + public constructor AG2() + @An public open override /*2*/ /*fake_override*/ fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface AI : A { + @An public open override /*1*/ fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY}) public final annotation class An : kotlin.Annotation { + public constructor An() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface B { + @An public abstract fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface C : A, B { + @An public abstract override /*1*/ /*fake_override*/ fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public abstract class D { + public constructor D() + @An public abstract val d: @An kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class E : D, A { + public constructor E() + @An public abstract override /*1*/ /*fake_override*/ val d: @An kotlin.Int + @An public abstract override /*1*/ /*fake_override*/ fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class F : A { + public constructor F() + @An public abstract override /*1*/ /*fake_override*/ fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface G { + @An public abstract fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface GI : G { + @An public open override /*1*/ fun a(/*0*/ @An arg: @An kotlin.Int): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.kt b/compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.kt new file mode 100644 index 00000000000..ad9ae7019d9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.kt @@ -0,0 +1,11 @@ +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS) +annotation class Ann(val s: String = "") + +@Ann("s") +fun foo() {} + +val bar = foo( + 15 +) \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.txt b/compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.txt new file mode 100644 index 00000000000..a71696f9b46 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.txt @@ -0,0 +1,12 @@ +package + +public val bar: kotlin.Unit +@Ann(s = "s") public fun foo(): kotlin.Unit + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS}) public final annotation class Ann : kotlin.Annotation { + public constructor Ann(/*0*/ s: kotlin.String = ...) + public final val s: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.kt b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.kt new file mode 100644 index 00000000000..6e63befc14f --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.kt @@ -0,0 +1,17 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS) +annotation class A + +@A +class C { + @A + operator fun plus(x: Out<@A T>): @A C<@A T> = this +} + +class Out + +fun test(a: C, y: Out) { + a + ", "Out", "C", "public final operator fun plus(x: Out): C defined in C")!>y +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.txt b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.txt new file mode 100644 index 00000000000..c09da10570b --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.txt @@ -0,0 +1,25 @@ +package + +public fun test(/*0*/ a: C, /*1*/ y: Out): kotlin.Unit + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS}) public final annotation class A : kotlin.Annotation { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@A public final class C { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + @A public final operator fun plus(/*0*/ x: Out<@A T>): @A C<@A T> + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Out { + public constructor Out() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.kt b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.kt new file mode 100644 index 00000000000..1da134986bd --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.kt @@ -0,0 +1,26 @@ +// !RENDER_DIAGNOSTICS_MESSAGES + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER) +annotation class An + +@An +interface A { + @An + val p1: @An String + @An + var p2: @An String + @An + fun test(@An arg: @An String): @An String +} + +@An +interface B : A { + override val p1: Int + @An + override val p2: @An String + override fun test(arg: String): Int +} + +interface C : A { + override var p2: Int +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.txt b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.txt new file mode 100644 index 00000000000..3deb0016c95 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.txt @@ -0,0 +1,35 @@ +package + +@An public interface A { + @An public abstract val p1: @An kotlin.String + @An public abstract var p2: @An kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + @An public abstract fun test(/*0*/ @An arg: @An kotlin.String): @An kotlin.String + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER}) public final annotation class An : kotlin.Annotation { + public constructor An() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface B : A { + public abstract override /*1*/ val p1: kotlin.Int + @An public abstract override /*1*/ val p2: @An kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract override /*1*/ fun test(/*0*/ arg: kotlin.String): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface C : A { + @An public abstract override /*1*/ /*fake_override*/ val p1: @An kotlin.String + public abstract override /*1*/ var p2: kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + @An public abstract override /*1*/ /*fake_override*/ fun test(/*0*/ @An arg: @An kotlin.String): @An kotlin.String + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.kt b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.kt new file mode 100644 index 00000000000..0fd8f38666a --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.kt @@ -0,0 +1,42 @@ +// !RENDER_DIAGNOSTICS_MESSAGES +// JAVAC_SKIP + +// FILE: A.java + +import org.jetbrains.annotations.NotNull; +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@javax.annotation.meta.TypeQualifier +public @interface MyTypeQualifier {} + +@An +public interface A { + @NotNull + @An + @MyTypeQualifier + String foo(); +} + +// FILE: k.kt + +import org.jetbrains.annotations.NotNull; + +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER) +annotation class An + +class B : A { + override fun foo(): String? = null +} + +@An +public interface C { + @NotNull + @An + fun foo(): String +} + +class D : C { + override fun foo(): String? = null +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.txt b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.txt new file mode 100644 index 00000000000..adaafc549b0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.txt @@ -0,0 +1,38 @@ +package + +@An public interface A { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @org.jetbrains.annotations.NotNull @An @MyTypeQualifier public abstract fun foo(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER}) public final annotation class An : kotlin.Annotation { + public constructor An() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class B : A { + public constructor B() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ fun foo(): kotlin.String? + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +@An public interface C { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @org.jetbrains.annotations.NotNull @An public abstract fun foo(): kotlin.String + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class D : C { + public constructor D() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ fun foo(): kotlin.String? + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.kt b/compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.kt new file mode 100644 index 00000000000..762ba1ef936 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.kt @@ -0,0 +1,12 @@ +// !RENDER_DIAGNOSTICS_MESSAGES +// !DIAGNOSTICS: -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE + +@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.LOCAL_VARIABLE) +annotation class A + +@A +fun test() { + @A + var b: @A Int = 0 + b = 15 +} diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.txt b/compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.txt new file mode 100644 index 00000000000..b7e59115f75 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.txt @@ -0,0 +1,10 @@ +package + +@A public fun test(): kotlin.Unit + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.LOCAL_VARIABLE}) public final annotation class A : kotlin.Annotation { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index a86edf4a008..d6c83757e1d 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -828,6 +828,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/annotations/annotationOnParameterInFunctionType.kt"); } + @TestMetadata("annotationRenderingInTypes.kt") + public void testAnnotationRenderingInTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.kt"); + } + @TestMetadata("AnnotationsForClasses.kt") public void testAnnotationsForClasses() throws Exception { runTest("compiler/testData/diagnostics/tests/annotations/AnnotationsForClasses.kt"); @@ -1425,6 +1430,74 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { } } + @TestMetadata("compiler/testData/diagnostics/tests/annotations/rendering") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Rendering extends AbstractDiagnosticsTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInRendering() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/annotations/rendering"), Pattern.compile("^(.*)\\.kts?$"), TargetBackend.ANY, true); + } + + @TestMetadata("cannotOverrideInvisibleMember.kt") + public void testCannotOverrideInvisibleMember() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.kt"); + } + + @TestMetadata("conflictingOverloads.kt") + public void testConflictingOverloads() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.kt"); + } + + @TestMetadata("differentNamesForParameter.kt") + public void testDifferentNamesForParameter() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.kt"); + } + + @TestMetadata("memberProjectedOut.kt") + public void testMemberProjectedOut() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.kt"); + } + + @TestMetadata("multipleInheritedDefaults.kt") + public void testMultipleInheritedDefaults() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.kt"); + } + + @TestMetadata("notImplementedMembers.kt") + public void testNotImplementedMembers() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.kt"); + } + + @TestMetadata("tooManyArguments.kt") + public void testTooManyArguments() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.kt"); + } + + @TestMetadata("typeMismatchDueToTypeProjections.kt") + public void testTypeMismatchDueToTypeProjections() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.kt"); + } + + @TestMetadata("typeMismatchOnOverride.kt") + public void testTypeMismatchOnOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.kt"); + } + + @TestMetadata("typeMismatchOnOverrideJavaNullable.kt") + public void testTypeMismatchOnOverrideJavaNullable() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.kt"); + } + + @TestMetadata("unusedValue.kt") + public void testUnusedValue() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.kt"); + } + } + @TestMetadata("compiler/testData/diagnostics/tests/annotations/withUseSiteTarget") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 4cdc35250f3..0d0effaad90 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -828,6 +828,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/annotations/annotationOnParameterInFunctionType.kt"); } + @TestMetadata("annotationRenderingInTypes.kt") + public void testAnnotationRenderingInTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.kt"); + } + @TestMetadata("AnnotationsForClasses.kt") public void testAnnotationsForClasses() throws Exception { runTest("compiler/testData/diagnostics/tests/annotations/AnnotationsForClasses.kt"); @@ -1420,6 +1425,74 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing } } + @TestMetadata("compiler/testData/diagnostics/tests/annotations/rendering") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Rendering extends AbstractDiagnosticsUsingJavacTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInRendering() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/annotations/rendering"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("cannotOverrideInvisibleMember.kt") + public void testCannotOverrideInvisibleMember() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/cannotOverrideInvisibleMember.kt"); + } + + @TestMetadata("conflictingOverloads.kt") + public void testConflictingOverloads() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/conflictingOverloads.kt"); + } + + @TestMetadata("differentNamesForParameter.kt") + public void testDifferentNamesForParameter() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/differentNamesForParameter.kt"); + } + + @TestMetadata("memberProjectedOut.kt") + public void testMemberProjectedOut() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/memberProjectedOut.kt"); + } + + @TestMetadata("multipleInheritedDefaults.kt") + public void testMultipleInheritedDefaults() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/multipleInheritedDefaults.kt"); + } + + @TestMetadata("notImplementedMembers.kt") + public void testNotImplementedMembers() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.kt"); + } + + @TestMetadata("tooManyArguments.kt") + public void testTooManyArguments() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/tooManyArguments.kt"); + } + + @TestMetadata("typeMismatchDueToTypeProjections.kt") + public void testTypeMismatchDueToTypeProjections() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchDueToTypeProjections.kt"); + } + + @TestMetadata("typeMismatchOnOverride.kt") + public void testTypeMismatchOnOverride() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverride.kt"); + } + + @TestMetadata("typeMismatchOnOverrideJavaNullable.kt") + public void testTypeMismatchOnOverrideJavaNullable() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/typeMismatchOnOverrideJavaNullable.kt"); + } + + @TestMetadata("unusedValue.kt") + public void testUnusedValue() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/rendering/unusedValue.kt"); + } + } + @TestMetadata("compiler/testData/diagnostics/tests/annotations/withUseSiteTarget") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/core/descriptors/src/org/jetbrains/kotlin/platform/PlatformSpecificDiagnosticComponents.kt b/core/descriptors/src/org/jetbrains/kotlin/platform/PlatformSpecificDiagnosticComponents.kt new file mode 100644 index 00000000000..03f2ccfc942 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/kotlin/platform/PlatformSpecificDiagnosticComponents.kt @@ -0,0 +1,26 @@ +/* + * 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.platform + +import org.jetbrains.kotlin.container.DefaultImplementation +import org.jetbrains.kotlin.container.PlatformSpecificExtension +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor + +@DefaultImplementation(impl = PlatformSpecificDiagnosticComponents.Default::class) +interface PlatformSpecificDiagnosticComponents : PlatformSpecificExtension { + fun isNullabilityAnnotation( + annotationDescriptor: AnnotationDescriptor, + containingDeclaration: DeclarationDescriptor + ): Boolean + + object Default : PlatformSpecificDiagnosticComponents { + override fun isNullabilityAnnotation( + annotationDescriptor: AnnotationDescriptor, + containingDeclaration: DeclarationDescriptor + ): Boolean = false + } +} \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index ee78e44e10f..f927f789ca0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -142,6 +142,11 @@ abstract class DescriptorRenderer { @JvmField val FQ_NAMES_IN_TYPES: DescriptorRenderer = withOptions { + modifiers = DescriptorRendererModifier.ALL_EXCEPT_ANNOTATIONS + } + + @JvmField + val FQ_NAMES_IN_TYPES_WITH_ANNOTATIONS: DescriptorRenderer = withOptions { modifiers = DescriptorRendererModifier.ALL } @@ -301,7 +306,7 @@ enum class DescriptorRendererModifier(val includeByDefault: Boolean) { companion object { @JvmField - val DEFAULTS = values().filter { it.includeByDefault }.toSet() + val ALL_EXCEPT_ANNOTATIONS = values().filter { it.includeByDefault }.toSet() @JvmField val ALL = values().toSet() diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt index 8268e8f4056..a225767bf80 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererOptionsImpl.kt @@ -69,7 +69,7 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions { override var classifierNamePolicy: ClassifierNamePolicy by property(ClassifierNamePolicy.SOURCE_CODE_QUALIFIED) override var withDefinedIn by property(true) override var withSourceFileForTopLevel by property(true) - override var modifiers: Set by property(DescriptorRendererModifier.DEFAULTS) + override var modifiers: Set by property(DescriptorRendererModifier.ALL_EXCEPT_ANNOTATIONS) override var startFromName by property(false) override var startFromDeclarationKeyword by property(false) override var debugMode by property(false) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java index aa1eede1bde..c9a694ad342 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeErrorMessages.java @@ -116,7 +116,7 @@ public class IdeErrorMessages { "Parameter:{1}", HTML_RENDER_TYPE, HTML_RENDER_TYPE); MAP.put(RETURN_TYPE_MISMATCH_ON_OVERRIDE, "Return type is ''{0}'', which is not a subtype of overridden
" + - "{1}", HTML_RENDER_RETURN_TYPE, HTML); + "{1}", HTML_RENDER_RETURN_TYPE, HTML_WITH_ANNOTATIONS_WHITELIST); MAP.put(RETURN_TYPE_MISMATCH_ON_INHERITANCE, "Return types of inherited members are incompatible:
{0},
{1}", HTML, HTML); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeMultiplatformDiagnosticRenderingMode.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeMultiplatformDiagnosticRenderingMode.kt index 6eca64b89b5..741025cec08 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeMultiplatformDiagnosticRenderingMode.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeMultiplatformDiagnosticRenderingMode.kt @@ -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)) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt index 550780966ac..df13139940f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/IdeRenderers.kt @@ -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> -> @@ -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() } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeSuperTypeListEntryTypeArgumentFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeSuperTypeListEntryTypeArgumentFix.kt index d373c61fc27..1d64df1813e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeSuperTypeListEntryTypeArgumentFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeSuperTypeListEntryTypeArgumentFix.kt @@ -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 diff --git a/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableList.kt b/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableList.kt index a0c0ca000f3..c2c41cc1e98 100644 --- a/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableList.kt +++ b/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableList.kt @@ -1,5 +1,5 @@ // PROBLEM: none -// ERROR: Assignment operators ambiguity:
public operator fun Collection.plus(element: Int): List defined in kotlin.collections
@InlineOnly public inline operator fun MutableCollection.plusAssign(element: Int): Unit defined in kotlin.collections +// ERROR: Assignment operators ambiguity:
public operator fun Collection.plus(element: Int): List defined in kotlin.collections
public inline operator fun MutableCollection.plusAssign(element: Int): Unit defined in kotlin.collections // WITH_RUNTIME fun test() { var list = mutableListOf(1) diff --git a/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableMap.kt b/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableMap.kt index be3dfd1da1c..4d06e9ad979 100644 --- a/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableMap.kt +++ b/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableMap.kt @@ -1,5 +1,5 @@ // PROBLEM: none -// ERROR: Assignment operators ambiguity:
public operator fun Map.plus(pair: Pair): Map defined in kotlin.collections
@InlineOnly public inline operator fun MutableMap.plusAssign(pair: Pair): Unit defined in kotlin.collections +// ERROR: Assignment operators ambiguity:
public operator fun Map.plus(pair: Pair): Map defined in kotlin.collections
public inline operator fun MutableMap.plusAssign(pair: Pair): Unit defined in kotlin.collections // WITH_RUNTIME fun test() { var map = mutableMapOf(1 to 2) diff --git a/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableSet.kt b/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableSet.kt index 601d370092f..9736296ca45 100644 --- a/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableSet.kt +++ b/idea/testData/inspectionsLocal/suspiciousCollectionReassignment/mutableSet.kt @@ -1,5 +1,5 @@ // PROBLEM: none -// ERROR: Assignment operators ambiguity:
public operator fun Set.plus(element: Int): Set defined in kotlin.collections
@InlineOnly public inline operator fun MutableCollection.plusAssign(element: Int): Unit defined in kotlin.collections +// ERROR: Assignment operators ambiguity:
public operator fun Set.plus(element: Int): Set defined in kotlin.collections
public inline operator fun MutableCollection.plusAssign(element: Int): Unit defined in kotlin.collections // WITH_RUNTIME fun test() { var set = mutableSetOf(1) diff --git a/idea/testData/quickfix/assignOperatorAmbiguity/changeToVal/classVariable.kt b/idea/testData/quickfix/assignOperatorAmbiguity/changeToVal/classVariable.kt index 0d22ef6d1df..8d4fbff5b16 100644 --- a/idea/testData/quickfix/assignOperatorAmbiguity/changeToVal/classVariable.kt +++ b/idea/testData/quickfix/assignOperatorAmbiguity/changeToVal/classVariable.kt @@ -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:
public operator fun Collection.plus(element: Int): List defined in kotlin.collections
@InlineOnly public inline operator fun MutableCollection.plusAssign(element: Int): Unit defined in kotlin.collections +// ERROR: Assignment operators ambiguity:
public operator fun Collection.plus(element: Int): List defined in kotlin.collections
public inline operator fun MutableCollection.plusAssign(element: Int): Unit defined in kotlin.collections // WITH_RUNTIME class Test { diff --git a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt index 448ed164792..f013a623777 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt @@ -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:
@InlineOnly public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin
@InlineOnly public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin
public operator fun Iterable.minus(elements: Array): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Iterable): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Sequence): List defined in kotlin.collections
public operator fun Iterable.minus(element: A): List defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(keys: Array): Map defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(keys: Iterable): Map defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(keys: Sequence): Map defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(key: A): Map defined in kotlin.collections
public operator fun Set.minus(elements: Array): Set defined in kotlin.collections
public operator fun Set.minus(elements: Iterable): Set defined in kotlin.collections
public operator fun Set.minus(elements: Sequence): Set defined in kotlin.collections
public operator fun Set
.minus(element: A): Set defined in kotlin.collections
public operator fun Sequence.minus(elements: Array): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Iterable): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Sequence): Sequence defined in kotlin.sequences
public operator fun Sequence
.minus(element: A): Sequence defined in kotlin.sequences +// ERROR: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin
public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin
public operator fun Iterable.minus(elements: Array): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Iterable): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Sequence): List defined in kotlin.collections
public operator fun Iterable
.minus(element: A): List defined in kotlin.collections
public operator fun Map.minus(keys: Array): Map defined in kotlin.collections
public operator fun Map.minus(keys: Iterable): Map defined in kotlin.collections
public operator fun Map.minus(keys: Sequence): Map defined in kotlin.collections
public operator fun Map.minus(key: A): Map defined in kotlin.collections
public operator fun Set.minus(elements: Array): Set defined in kotlin.collections
public operator fun Set.minus(elements: Iterable): Set defined in kotlin.collections
public operator fun Set.minus(elements: Sequence): Set defined in kotlin.collections
public operator fun Set
.minus(element: A): Set defined in kotlin.collections
public operator fun Sequence.minus(elements: Array): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Iterable): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Sequence): Sequence defined in kotlin.sequences
public operator fun Sequence
.minus(element: A): Sequence defined in kotlin.sequences // COMPILER_ARGUMENTS: -XXLanguage:-NewInference class A diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt index 3c52fb31380..4233f32adac 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt @@ -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:
@InlineOnly public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin
@InlineOnly public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin
public operator fun Iterable.minus(elements: Array): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Iterable): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Sequence): List defined in kotlin.collections
public operator fun Iterable
.minus(element: A): List defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(keys: Array): Map defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(keys: Iterable): Map defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(keys: Sequence): Map defined in kotlin.collections
@SinceKotlin public operator fun Map.minus(key: A): Map defined in kotlin.collections
public operator fun Set.minus(elements: Array): Set defined in kotlin.collections
public operator fun Set.minus(elements: Iterable): Set defined in kotlin.collections
public operator fun Set.minus(elements: Sequence): Set defined in kotlin.collections
public operator fun Set
.minus(element: A): Set defined in kotlin.collections
public operator fun Sequence.minus(elements: Array): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Iterable): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Sequence): Sequence defined in kotlin.sequences
public operator fun Sequence
.minus(element: A): Sequence defined in kotlin.sequences +// ERROR: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public inline operator fun BigDecimal.minus(other: BigDecimal): BigDecimal defined in kotlin
public inline operator fun BigInteger.minus(other: BigInteger): BigInteger defined in kotlin
public operator fun Iterable.minus(elements: Array): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Iterable): List defined in kotlin.collections
public operator fun Iterable.minus(elements: Sequence): List defined in kotlin.collections
public operator fun Iterable
.minus(element: A): List defined in kotlin.collections
public operator fun Map.minus(keys: Array): Map defined in kotlin.collections
public operator fun Map.minus(keys: Iterable): Map defined in kotlin.collections
public operator fun Map.minus(keys: Sequence): Map defined in kotlin.collections
public operator fun Map.minus(key: A): Map defined in kotlin.collections
public operator fun Set.minus(elements: Array): Set defined in kotlin.collections
public operator fun Set.minus(elements: Iterable): Set defined in kotlin.collections
public operator fun Set.minus(elements: Sequence): Set defined in kotlin.collections
public operator fun Set
.minus(element: A): Set defined in kotlin.collections
public operator fun Sequence.minus(elements: Array): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Iterable): Sequence defined in kotlin.sequences
public operator fun Sequence.minus(elements: Sequence): Sequence defined in kotlin.sequences
public operator fun Sequence
.minus(element: A): Sequence defined in kotlin.sequences // COMPILER_ARGUMENTS: -XXLanguage:-NewInference class A diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/callWithError.kt b/idea/testData/quickfix/deprecatedSymbolUsage/callWithError.kt index 1277b293c45..36a0a517d93 100644 --- a/idea/testData/quickfix/deprecatedSymbolUsage/callWithError.kt +++ b/idea/testData/quickfix/deprecatedSymbolUsage/callWithError.kt @@ -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() { diff --git a/idea/testData/scratch/unresolvedMultiline.comp.after b/idea/testData/scratch/unresolvedMultiline.comp.after index 17b85e35611..d26befcff68 100644 --- a/idea/testData/scratch/unresolvedMultiline.comp.after +++ b/idea/testData/scratch/unresolvedMultiline.comp.after @@ -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 Iterable.forEach(action: (TypeVariable(T)) -> Unit): Unit defined in kotlin.collections -@HidesMembers public inline fun Map.forEach(action: (Map.Entry) -> Unit): Unit defined in kotlin.collections */ +public inline fun Iterable.forEach(action: (TypeVariable(T)) -> Unit): Unit defined in kotlin.collections +public inline fun Map.forEach(action: (Map.Entry) -> Unit): Unit defined in kotlin.collections */ /** unresolvedMultiline.kts:7 Unresolved reference: goo */ \ No newline at end of file diff --git a/idea/testData/scratch/unresolvedMultiline.repl.after b/idea/testData/scratch/unresolvedMultiline.repl.after index 826169acb24..9729256d0bf 100644 --- a/idea/testData/scratch/unresolvedMultiline.repl.after +++ b/idea/testData/scratch/unresolvedMultiline.repl.after @@ -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 Iterable.forEach(action: (???) -> Unit): Unit defined in kotlin.collections -@HidesMembers public inline fun Map.forEach(action: (Map.Entry) -> Unit): Unit defined in kotlin.collections +public inline fun Iterable.forEach(action: (???) -> Unit): Unit defined in kotlin.collections +public inline fun Map.forEach(action: (Map.Entry) -> Unit): Unit defined in kotlin.collections foo.forEach { ^ */ /** unresolvedMultiline.kts:7 error: unresolved reference: goo diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/diagnostic/DefaultErrorMessagesAndroid.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/diagnostic/DefaultErrorMessagesAndroid.kt index c58f228badc..93fbb3699d9 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/diagnostic/DefaultErrorMessagesAndroid.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/diagnostic/DefaultErrorMessagesAndroid.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticFactoryToRendererMap import org.jetbrains.kotlin.diagnostics.rendering.Renderers import org.jetbrains.kotlin.diagnostics.rendering.Renderers.RENDER_CLASS_OR_OBJECT import org.jetbrains.kotlin.diagnostics.rendering.Renderers.RENDER_TYPE +import org.jetbrains.kotlin.diagnostics.rendering.Renderers.RENDER_TYPE_WITH_ANNOTATIONS object DefaultErrorMessagesAndroid : DefaultErrorMessages.Extension { private val MAP = DiagnosticFactoryToRendererMap("Android") @@ -89,7 +90,7 @@ object DefaultErrorMessagesAndroid : DefaultErrorMessages.Extension { MAP.put(ErrorsAndroid.PARCELER_TYPE_INCOMPATIBLE, "Parceler type {0} is incompatible with {1}", - RENDER_TYPE, RENDER_TYPE) + RENDER_TYPE_WITH_ANNOTATIONS, RENDER_TYPE_WITH_ANNOTATIONS) MAP.put(ErrorsAndroid.DUPLICATING_TYPE_PARCELERS, "Duplicating ''TypeParceler'' annotations") diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt index 390ea949972..ab71c7e7581 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginErrorsRendering.kt @@ -45,13 +45,13 @@ object SerializationPluginErrorsRendering : DefaultErrorMessages.Extension { SerializationErrors.SERIALIZER_NOT_FOUND, "Serializer has not been found for type ''{0}''. " + "To use context serializer as fallback, explicitly annotate type or property with @ContextualSerialization", - Renderers.RENDER_TYPE + Renderers.RENDER_TYPE_WITH_ANNOTATIONS ) MAP.put( SerializationErrors.SERIALIZER_NULLABILITY_INCOMPATIBLE, "Type ''{1}'' is non-nullable and therefore can not be serialized with serializer for nullable type ''{0}''", - Renderers.RENDER_TYPE, - Renderers.RENDER_TYPE + Renderers.RENDER_TYPE_WITH_ANNOTATIONS, + Renderers.RENDER_TYPE_WITH_ANNOTATIONS ) MAP.put( SerializationErrors.TRANSIENT_MISSING_INITIALIZER,