diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java index 76642a3e194..8b059e3b5a9 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/DefaultErrorMessagesJvm.java @@ -20,9 +20,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages; import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticFactoryToRendererMap; +import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticParameterRenderer; import org.jetbrains.kotlin.diagnostics.rendering.Renderers; import org.jetbrains.kotlin.renderer.DescriptorRenderer; -import org.jetbrains.kotlin.renderer.Renderer; import java.util.ArrayList; import java.util.Collections; @@ -30,7 +30,7 @@ import java.util.List; public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension { - private static final Renderer CONFLICTING_JVM_DECLARATIONS_DATA = new Renderer() { + private static final DiagnosticParameterRenderer CONFLICTING_JVM_DECLARATIONS_DATA = new DiagnosticParameterRenderer() { @NotNull @Override public String render(@NotNull ConflictingJvmDeclarationsData data) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/AbstractDiagnosticWithParametersRenderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/AbstractDiagnosticWithParametersRenderer.java deleted file mode 100644 index dda0858a925..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/AbstractDiagnosticWithParametersRenderer.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.diagnostics.rendering; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.diagnostics.Diagnostic; - -import java.text.MessageFormat; - -public abstract class AbstractDiagnosticWithParametersRenderer implements DiagnosticRenderer { - @NotNull private final MessageFormat messageFormat; - - protected AbstractDiagnosticWithParametersRenderer(@NotNull String message) { - messageFormat = new MessageFormat(message); - } - - @NotNull - @Override - public String render(@NotNull D diagnostic) { - return messageFormat.format(renderParameters(diagnostic)); - } - - @NotNull - public abstract Object[] renderParameters(@NotNull D diagnostic); -} 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 b939e22e73a..32f27ead4af 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.diagnostics.rendering; import com.intellij.openapi.extensions.ExtensionPointName; -import kotlin.Unit; import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,8 +29,6 @@ import org.jetbrains.kotlin.psi.KtExpression; import org.jetbrains.kotlin.psi.KtSimpleNameExpression; import org.jetbrains.kotlin.psi.KtTypeConstraint; import org.jetbrains.kotlin.renderer.DescriptorRenderer; -import org.jetbrains.kotlin.renderer.DescriptorRendererOptions; -import org.jetbrains.kotlin.renderer.Renderer; import org.jetbrains.kotlin.resolve.varianceChecker.VarianceChecker.VarianceConflictDiagnosticData; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.util.MappedExtensionProvider; @@ -44,7 +41,6 @@ import java.util.List; import static org.jetbrains.kotlin.diagnostics.Errors.*; import static org.jetbrains.kotlin.diagnostics.rendering.Renderers.*; -import static org.jetbrains.kotlin.renderer.DescriptorRenderer.*; public class DefaultErrorMessages { @@ -95,18 +91,6 @@ public class DefaultErrorMessages { return null; } - public static final DescriptorRenderer DEPRECATION_RENDERER = DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.withOptions( - new Function1() { - @Override - public Unit invoke(DescriptorRendererOptions options) { - options.setWithoutTypeParameters(false); - options.setReceiverAfterName(false); - options.setRenderAccessors(true); - return Unit.INSTANCE; - } - } - ); - static { MAP.put(UNRESOLVED_REFERENCE, "Unresolved reference: {0}", ELEMENT_TEXT); @@ -143,7 +127,7 @@ public class DefaultErrorMessages { } }); - MAP.put(MEMBER_PROJECTED_OUT, "Out-projected type ''{1}'' prohibits the use of ''{0}''", DescriptorRenderer.FQ_NAMES_IN_TYPES, RENDER_TYPE); + MAP.put(MEMBER_PROJECTED_OUT, "Out-projected type ''{1}'' prohibits the use of ''{0}''", FQ_NAMES_IN_TYPES, RENDER_TYPE); MAP.put(INCOMPATIBLE_MODIFIERS, "Modifier ''{0}'' is incompatible with ''{1}''", TO_STRING, TO_STRING); MAP.put(DEPRECATED_MODIFIER_PAIR, "Modifier ''{0}'' is deprecated in presence of ''{1}''", TO_STRING, TO_STRING); MAP.put(REPEATED_MODIFIER, "Repeated ''{0}''", TO_STRING); @@ -188,7 +172,7 @@ public class DefaultErrorMessages { MAP.put(MIXING_NAMED_AND_POSITIONED_ARGUMENTS, "Mixing named and positioned arguments is not allowed"); MAP.put(ARGUMENT_PASSED_TWICE, "An argument is already passed for this parameter"); MAP.put(NAMED_PARAMETER_NOT_FOUND, "Cannot find a parameter with this name: {0}", ELEMENT_TEXT); - MAP.put(NAMED_ARGUMENTS_NOT_ALLOWED, "Named arguments are not allowed for {0}", new Renderer() { + MAP.put(NAMED_ARGUMENTS_NOT_ALLOWED, "Named arguments are not allowed for {0}", new DiagnosticParameterRenderer() { @NotNull @Override public String render(@NotNull BadNamedArgumentsTarget target) { @@ -404,7 +388,7 @@ public class DefaultErrorMessages { MAP.put(IMPLICIT_CAST_TO_ANY, "Conditional branch result of type {0} is implicitly cast to {1}", RENDER_TYPE, RENDER_TYPE); - MAP.put(EXPRESSION_EXPECTED, "{0} is not an expression, and only expressions are allowed here", new Renderer() { + MAP.put(EXPRESSION_EXPECTED, "{0} is not an expression, and only expressions are allowed here", new DiagnosticParameterRenderer() { @NotNull @Override public String render(@NotNull KtExpression expression) { @@ -500,7 +484,7 @@ public class DefaultErrorMessages { MAP.put(UNEXPECTED_SAFE_CALL, "Safe-call is not allowed here"); MAP.put(UNNECESSARY_NOT_NULL_ASSERTION, "Unnecessary non-null assertion (!!) on a non-null receiver of type {0}", RENDER_TYPE); MAP.put(NOT_NULL_ASSERTION_ON_LAMBDA_EXPRESSION, "Non-null assertion (!!) is called on a lambda expression"); - MAP.put(NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER, "{0} does not refer to a type parameter of {1}", new Renderer() { + MAP.put(NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER, "{0} does not refer to a type parameter of {1}", new DiagnosticParameterRenderer() { @NotNull @Override public String render(@NotNull KtTypeConstraint typeConstraint) { @@ -561,7 +545,7 @@ public class DefaultErrorMessages { MAP.put(INCONSISTENT_TYPE_PARAMETER_VALUES, "Type parameter {0} of ''{1}'' has inconsistent values: {2}", NAME, NAME, RENDER_COLLECTION_OF_TYPES); MAP.put(INCONSISTENT_TYPE_PARAMETER_BOUNDS, "Type parameter {0} of ''{1}'' has inconsistent bounds: {2}", NAME, NAME, RENDER_COLLECTION_OF_TYPES); - MAP.put(EQUALITY_NOT_APPLICABLE, "Operator ''{0}'' cannot be applied to ''{1}'' and ''{2}''", new Renderer() { + MAP.put(EQUALITY_NOT_APPLICABLE, "Operator ''{0}'' cannot be applied to ''{1}'' and ''{2}''", new DiagnosticParameterRenderer() { @NotNull @Override public String render(@NotNull KtSimpleNameExpression nameExpression) { @@ -616,7 +600,7 @@ public class DefaultErrorMessages { MAP.put(FUNCTION_EXPECTED, "Expression ''{0}''{1} cannot be invoked as a function. " + "The function '" + OperatorNameConventions.INVOKE.asString() + "()' is not found", - ELEMENT_TEXT, new Renderer() { + ELEMENT_TEXT, new DiagnosticParameterRenderer() { @NotNull @Override public String render(@NotNull KotlinType type) { @@ -624,7 +608,7 @@ public class DefaultErrorMessages { return " of type '" + RENDER_TYPE.render(type) + "'"; } }); - MAP.put(FUNCTION_CALL_EXPECTED, "Function invocation ''{0}({1})'' expected", ELEMENT_TEXT, new Renderer() { + MAP.put(FUNCTION_CALL_EXPECTED, "Function invocation ''{0}({1})'' expected", ELEMENT_TEXT, new DiagnosticParameterRenderer() { @NotNull @Override public String render(@NotNull Boolean hasValueParameters) { @@ -665,7 +649,7 @@ public class DefaultErrorMessages { MAP.put(TYPE_INFERENCE_FAILED_ON_SPECIAL_CONSTRUCT, "Type inference for control flow expression failed. Please specify its type explicitly."); - MAP.put(WRONG_NUMBER_OF_TYPE_ARGUMENTS, "{0,choice,0#No type arguments|1#Type argument|1<{0,number,integer} type arguments} expected", (Renderer) null); + MAP.put(WRONG_NUMBER_OF_TYPE_ARGUMENTS, "{0,choice,0#No type arguments|1#Type argument|1<{0,number,integer} type arguments} expected", (DiagnosticParameterRenderer) null); MAP.put(NO_TYPE_ARGUMENTS_ON_RHS, "{0,choice,0#No type arguments|1#Type argument|1<{0,number,integer} type arguments} expected. " + "Use ''{1}'' if you don''t want to pass type arguments", null, STRING); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticFactoryToRendererMap.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticFactoryToRendererMap.java index 2089c4c0e8d..86c55e78d23 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticFactoryToRendererMap.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticFactoryToRendererMap.java @@ -20,7 +20,6 @@ import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.diagnostics.*; -import org.jetbrains.kotlin.renderer.Renderer; import java.util.HashMap; import java.util.Map; @@ -54,29 +53,29 @@ public final class DiagnosticFactoryToRendererMap { map.put(factory, new SimpleDiagnosticRenderer(message)); } - public void put(@NotNull DiagnosticFactory1 factory, @NotNull String message, @Nullable Renderer rendererA) { + public void put(@NotNull DiagnosticFactory1 factory, @NotNull String message, @Nullable DiagnosticParameterRenderer rendererA) { checkMutability(); map.put(factory, new DiagnosticWithParameters1Renderer(message, rendererA)); } public void put(@NotNull DiagnosticFactory1 factory, @NotNull String message, @NotNull MultiRenderer rendererA) { checkMutability(); - map.put(factory, new DiagnosticWithMultiParametersRenderer(message, rendererA)); + map.put(factory, new DiagnosticWithParametersMultiRenderer(message, rendererA)); } public void put(@NotNull DiagnosticFactory2 factory, @NotNull String message, - @Nullable Renderer rendererA, - @Nullable Renderer rendererB) { + @Nullable DiagnosticParameterRenderer rendererA, + @Nullable DiagnosticParameterRenderer rendererB) { checkMutability(); map.put(factory, new DiagnosticWithParameters2Renderer(message, rendererA, rendererB)); } public void put(@NotNull DiagnosticFactory3 factory, @NotNull String message, - @Nullable Renderer rendererA, - @Nullable Renderer rendererB, - @Nullable Renderer rendererC) { + @Nullable DiagnosticParameterRenderer rendererA, + @Nullable DiagnosticParameterRenderer rendererB, + @Nullable DiagnosticParameterRenderer rendererC) { checkMutability(); map.put(factory, new DiagnosticWithParameters3Renderer(message, rendererA, rendererB, rendererC)); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/Renderer.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt similarity index 74% rename from core/descriptors/src/org/jetbrains/kotlin/renderer/Renderer.kt rename to compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt index 92f056bab3a..5efb23fcc28 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/Renderer.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticParameterRenderer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,12 @@ * limitations under the License. */ -package org.jetbrains.kotlin.renderer +package org.jetbrains.kotlin.diagnostics.rendering -interface Renderer { +interface DiagnosticParameterRenderer { fun render(obj: O): String } -fun Renderer(block: (O) -> String) = object : Renderer { +fun Renderer(block: (O) -> String) = object : DiagnosticParameterRenderer { override fun render(obj: O) = block(obj) -} +} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRenderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRenderer.java index ce38a60cb49..5471c87dae6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRenderer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRenderer.java @@ -18,10 +18,8 @@ package org.jetbrains.kotlin.diagnostics.rendering; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.diagnostics.Diagnostic; -import org.jetbrains.kotlin.renderer.Renderer; -public interface DiagnosticRenderer extends Renderer { +public interface DiagnosticRenderer { @NotNull - @Override String render(@NotNull D diagnostic); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt index 43301f77f2b..644df659948 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticRendererUtil.kt @@ -18,9 +18,8 @@ package org.jetbrains.kotlin.diagnostics.rendering import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.renderer.DescriptorRenderer -import org.jetbrains.kotlin.renderer.Renderer -fun

renderParameter(parameter: P, renderer: Renderer

?): Any = renderer?.render(parameter) ?: parameter +fun

renderParameter(parameter: P, renderer: DiagnosticParameterRenderer

?): Any = renderer?.render(parameter) ?: parameter fun ClassDescriptor.renderKindWithName(): String = DescriptorRenderer.getClassKindPrefix(this) + " '" + name + "'" diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithMultiParametersRenderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithMultiParametersRenderer.java deleted file mode 100644 index b0f0f7820e0..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithMultiParametersRenderer.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.diagnostics.rendering; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters1; - -public class DiagnosticWithMultiParametersRenderer extends AbstractDiagnosticWithParametersRenderer> { - @NotNull private final MultiRenderer renderersForA; - - public DiagnosticWithMultiParametersRenderer(@NotNull String message, @NotNull MultiRenderer renderersForA) { - super(message); - this.renderersForA = renderersForA; - } - - @NotNull - @Override - public Object[] renderParameters(@NotNull DiagnosticWithParameters1 diagnostic) { - return renderersForA.render(diagnostic.getA()); - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters1Renderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters1Renderer.java deleted file mode 100644 index de90a13a4db..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters1Renderer.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.diagnostics.rendering; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters1; -import org.jetbrains.kotlin.renderer.Renderer; - -public class DiagnosticWithParameters1Renderer extends AbstractDiagnosticWithParametersRenderer> { - private final Renderer rendererForA; - - public DiagnosticWithParameters1Renderer(@NotNull String message, @Nullable Renderer rendererForA) { - super(message); - this.rendererForA = rendererForA; - } - - @NotNull - @Override - public Object[] renderParameters(@NotNull DiagnosticWithParameters1 diagnostic) { - return new Object[]{DiagnosticRendererUtilKt.renderParameter(diagnostic.getA(), rendererForA)}; - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters2Renderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters2Renderer.java deleted file mode 100644 index 6dbfdb20d52..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters2Renderer.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.diagnostics.rendering; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters2; -import org.jetbrains.kotlin.renderer.Renderer; - -public class DiagnosticWithParameters2Renderer extends AbstractDiagnosticWithParametersRenderer> { - private final Renderer rendererForA; - private final Renderer rendererForB; - - public DiagnosticWithParameters2Renderer(@NotNull String message, @Nullable Renderer rendererForA, @Nullable Renderer rendererForB) { - super(message); - this.rendererForA = rendererForA; - this.rendererForB = rendererForB; - } - - @NotNull - @Override - public Object[] renderParameters(@NotNull DiagnosticWithParameters2 diagnostic) { - return new Object[]{ - DiagnosticRendererUtilKt.renderParameter(diagnostic.getA(), rendererForA), - DiagnosticRendererUtilKt.renderParameter(diagnostic.getB(), rendererForB)}; - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters3Renderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters3Renderer.java deleted file mode 100644 index 2e2f547d1e7..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DiagnosticWithParameters3Renderer.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.diagnostics.rendering; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters3; -import org.jetbrains.kotlin.renderer.Renderer; - -public class DiagnosticWithParameters3Renderer extends AbstractDiagnosticWithParametersRenderer> { - private final Renderer rendererForA; - private final Renderer rendererForB; - private final Renderer rendererForC; - - public DiagnosticWithParameters3Renderer(@NotNull String message, - @Nullable Renderer rendererForA, - @Nullable Renderer rendererForB, - @Nullable Renderer rendererForC) { - super(message); - this.rendererForA = rendererForA; - this.rendererForB = rendererForB; - this.rendererForC = rendererForC; - } - - @NotNull - @Override - public Object[] renderParameters(@NotNull DiagnosticWithParameters3 diagnostic) { - return new Object[]{ - DiagnosticRendererUtilKt.renderParameter(diagnostic.getA(), rendererForA), - DiagnosticRendererUtilKt.renderParameter(diagnostic.getB(), rendererForB), - DiagnosticRendererUtilKt.renderParameter(diagnostic.getC(), rendererForC)}; - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/MultiRenderer.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/MultiRenderer.java deleted file mode 100644 index 162ae4c59d9..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/MultiRenderer.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.diagnostics.rendering; - -import org.jetbrains.annotations.NotNull; - -public interface MultiRenderer { - @NotNull - String[] render(@NotNull O object); -} 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 88a73f25d79..1703a62e537 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/Renderers.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.renderer.DescriptorRenderer -import org.jetbrains.kotlin.renderer.Renderer import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.MemberComparator import org.jetbrains.kotlin.resolve.calls.inference.* @@ -56,7 +55,7 @@ object Renderers { private val LOG = Logger.getInstance(Renderers::class.java) - @JvmField val TO_STRING: Renderer = Renderer { + @JvmField val TO_STRING = Renderer { element -> if (element is DeclarationDescriptor) { LOG.warn("Diagnostic renderer TO_STRING was used to render an instance of DeclarationDescriptor.\n" @@ -66,17 +65,17 @@ object Renderers { element.toString() } - @JvmField val STRING: Renderer = Renderer { it } + @JvmField val STRING = Renderer { it } - @JvmField val THROWABLE: Renderer = Renderer { + @JvmField val THROWABLE = Renderer { val writer = StringWriter() it.printStackTrace(PrintWriter(writer)) StringUtil.first(writer.toString(), 2048, true) } - @JvmField val NAME: Renderer = Renderer { it.name.asString() } + @JvmField val NAME = Renderer { it.name.asString() } - @JvmField val DECLARATION_NAME_WITH_KIND: Renderer = Renderer { + @JvmField val DECLARATION_NAME_WITH_KIND = Renderer { val declarationKindWithSpace = when (it) { is PackageFragmentDescriptor -> "package " is ClassDescriptor -> "${it.renderKind()} " @@ -89,7 +88,7 @@ object Renderers { "$declarationKindWithSpace'${it.name.asString()}'" } - @JvmField val NAME_OF_PARENT_OR_FILE: Renderer = Renderer { + @JvmField val NAME_OF_PARENT_OR_FILE = Renderer { if (DescriptorUtils.isTopLevelDeclaration(it) && it is DeclarationDescriptorWithVisibility && it.visibility == Visibilities.PRIVATE) { "file" } @@ -98,21 +97,21 @@ object Renderers { } } - @JvmField val ELEMENT_TEXT: Renderer = Renderer { it.text } + @JvmField val ELEMENT_TEXT = Renderer { it.text } - @JvmField val DECLARATION_NAME: Renderer = Renderer { it.nameAsSafeName.asString() } + @JvmField val DECLARATION_NAME = Renderer { it.nameAsSafeName.asString() } - @JvmField val RENDER_CLASS_OR_OBJECT: Renderer = Renderer { + @JvmField val RENDER_CLASS_OR_OBJECT = Renderer { classOrObject: KtClassOrObject -> val name = if (classOrObject.getName() != null) " '" + classOrObject.getName() + "'" else "" if (classOrObject is KtClass) "Class" + name else "Object" + name } - @JvmField val RENDER_CLASS_OR_OBJECT_NAME: Renderer = Renderer { it.renderKindWithName() } + @JvmField val RENDER_CLASS_OR_OBJECT_NAME = Renderer { it.renderKindWithName() } - @JvmField val RENDER_TYPE: Renderer = Renderer { DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(it) } + @JvmField val RENDER_TYPE = Renderer { DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(it) } - @JvmField val RENDER_POSITION_VARIANCE: Renderer = Renderer { + @JvmField val RENDER_POSITION_VARIANCE = Renderer { variance: Variance -> when (variance) { Variance.INVARIANT -> "invariant" @@ -121,7 +120,7 @@ object Renderers { } } - @JvmField val AMBIGUOUS_CALLS: Renderer>> = Renderer { + @JvmField val AMBIGUOUS_CALLS = Renderer { calls: Collection> -> calls .map { it.resultingDescriptor } @@ -129,7 +128,7 @@ object Renderers { .joinToString(separator = "\n", prefix = "\n") { DescriptorRenderer.FQ_NAMES_IN_TYPES.render(it) } } - @JvmStatic fun commaSeparated(itemRenderer: Renderer): Renderer> = Renderer { + @JvmStatic fun commaSeparated(itemRenderer: DiagnosticParameterRenderer) = Renderer> { collection -> buildString { val iterator = collection.iterator() @@ -143,23 +142,23 @@ object Renderers { } } - @JvmField val TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS_RENDERER: Renderer = Renderer { + @JvmField val TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS_RENDERER = Renderer { renderConflictingSubstitutionsInferenceError(it, TabledDescriptorRenderer.create()).toString() } - @JvmField val TYPE_INFERENCE_PARAMETER_CONSTRAINT_ERROR_RENDERER: Renderer = Renderer { + @JvmField val TYPE_INFERENCE_PARAMETER_CONSTRAINT_ERROR_RENDERER = Renderer { renderParameterConstraintError(it, TabledDescriptorRenderer.create()).toString() } - @JvmField val TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER_RENDERER: Renderer = Renderer { + @JvmField val TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER_RENDERER = Renderer { renderNoInformationForParameterError(it, TabledDescriptorRenderer.create()).toString() } - @JvmField val TYPE_INFERENCE_UPPER_BOUND_VIOLATED_RENDERER: Renderer = Renderer { + @JvmField val TYPE_INFERENCE_UPPER_BOUND_VIOLATED_RENDERER = Renderer { renderUpperBoundViolatedInferenceError(it, TabledDescriptorRenderer.create()).toString() } - @JvmField val TYPE_INFERENCE_CANNOT_CAPTURE_TYPES_RENDERER: Renderer = Renderer { + @JvmField val TYPE_INFERENCE_CANNOT_CAPTURE_TYPES_RENDERER = Renderer { renderCannotCaptureTypeParameterError(it, TabledDescriptorRenderer.create()).toString() } @@ -349,7 +348,7 @@ object Renderers { return result } - @JvmField val CLASSES_OR_SEPARATED: Renderer> = Renderer { + @JvmField val CLASSES_OR_SEPARATED = Renderer> { descriptors -> buildString { var index = 0 @@ -368,9 +367,9 @@ object Renderers { private fun renderTypes(types: Collection) = StringUtil.join(types, { RENDER_TYPE.render(it) }, ", ") - @JvmField val RENDER_COLLECTION_OF_TYPES: Renderer> = Renderer { renderTypes(it) } + @JvmField val RENDER_COLLECTION_OF_TYPES = Renderer> { renderTypes(it) } - private fun renderConstraintSystem(constraintSystem: ConstraintSystem, renderTypeBounds: Renderer): String { + private fun renderConstraintSystem(constraintSystem: ConstraintSystem, renderTypeBounds: DiagnosticParameterRenderer): String { val typeBounds = linkedSetOf() for (variable in constraintSystem.typeVariables) { typeBounds.add(constraintSystem.getTypeBounds(variable)) @@ -380,9 +379,9 @@ object Renderers { ConstraintsUtil.getDebugMessageForStatus(constraintSystem.status) } - @JvmField val RENDER_CONSTRAINT_SYSTEM: Renderer = Renderer { renderConstraintSystem(it, RENDER_TYPE_BOUNDS) } + @JvmField val RENDER_CONSTRAINT_SYSTEM = Renderer { renderConstraintSystem(it, RENDER_TYPE_BOUNDS) } - @JvmField val RENDER_CONSTRAINT_SYSTEM_SHORT: Renderer = Renderer { renderConstraintSystem(it, RENDER_TYPE_BOUNDS_SHORT) } + @JvmField val RENDER_CONSTRAINT_SYSTEM_SHORT = Renderer { renderConstraintSystem(it, RENDER_TYPE_BOUNDS_SHORT) } private fun renderTypeBounds(typeBounds: TypeBounds, short: Boolean): String { val renderBound = { bound: Bound -> @@ -399,9 +398,9 @@ object Renderers { "$typeVariableName ${StringUtil.join(typeBounds.bounds, renderBound, ", ")}" } - @JvmField val RENDER_TYPE_BOUNDS: Renderer = Renderer { renderTypeBounds(it, short = false) } + @JvmField val RENDER_TYPE_BOUNDS = Renderer { renderTypeBounds(it, short = false) } - @JvmField val RENDER_TYPE_BOUNDS_SHORT: Renderer = Renderer { renderTypeBounds(it, short = true) } + @JvmField val RENDER_TYPE_BOUNDS_SHORT = Renderer { renderTypeBounds(it, short = true) } private fun renderDebugMessage(message: String, inferenceErrorData: InferenceErrorData) = buildString { append(message) @@ -425,7 +424,7 @@ object Renderers { private val WHEN_MISSING_LIMIT = 7 - @JvmField val RENDER_WHEN_MISSING_CASES: Renderer> = Renderer { + @JvmField val RENDER_WHEN_MISSING_CASES = Renderer> { if (!it.hasUnknown) { val list = it.joinToString(", ", limit = WHEN_MISSING_LIMIT) { "'$it'" } val branches = if (it.size > 1) "branches" else "branch" @@ -435,4 +434,18 @@ object Renderers { "'else' branch" } } + + @JvmField val FQ_NAMES_IN_TYPES = DescriptorRenderer.FQ_NAMES_IN_TYPES.asRenderer() + @JvmField val COMPACT = DescriptorRenderer.COMPACT.asRenderer() + @JvmField val SHORT_NAMES_IN_TYPES = DescriptorRenderer.SHORT_NAMES_IN_TYPES.asRenderer() + @JvmField val COMPACT_WITH_MODIFIERS = DescriptorRenderer.COMPACT_WITH_MODIFIERS.asRenderer() + @JvmField val DEPRECATION_RENDERER = DescriptorRenderer.ONLY_NAMES_WITH_SHORT_TYPES.withOptions { + withoutTypeParameters = false + receiverAfterName = false + renderAccessors = true + }.asRenderer() } + +fun DescriptorRenderer.asRenderer() = Renderer { + render(it) +} \ No newline at end of file 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 431dee923fa..f9677583991 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/TabledDescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/TabledDescriptorRenderer.java @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.Table import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.TableRow; import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TextRenderer.TextElement; import org.jetbrains.kotlin.renderer.DescriptorRenderer; -import org.jetbrains.kotlin.renderer.Renderer; import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPosition; import org.jetbrains.kotlin.types.KotlinType; @@ -156,7 +155,7 @@ public class TabledDescriptorRenderer { } @NotNull - public Renderer getTypeRenderer() { + public DiagnosticParameterRenderer getTypeRenderer() { return Renderers.RENDER_TYPE; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/diagnosticsWithParameterRenderers.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/diagnosticsWithParameterRenderers.kt new file mode 100644 index 00000000000..42b567ed62c --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/diagnosticsWithParameterRenderers.kt @@ -0,0 +1,93 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.diagnostics.rendering + +import org.jetbrains.kotlin.diagnostics.* +import java.text.MessageFormat + + +abstract class AbstractDiagnosticWithParametersRenderer protected constructor(message: String) : DiagnosticRenderer { + private val messageFormat: MessageFormat + + init { + messageFormat = MessageFormat(message) + } + + override fun render(obj: D): String { + return messageFormat.format(renderParameters(obj)) + } + + abstract fun renderParameters(diagnostic: D): Array + +} + + +class DiagnosticWithParameters1Renderer( + message: String, + private val rendererForA: DiagnosticParameterRenderer? +) : AbstractDiagnosticWithParametersRenderer>(message) { + + override fun renderParameters(diagnostic: DiagnosticWithParameters1<*, A>): Array { + return arrayOf(renderParameter(diagnostic.a, rendererForA)) + } + + +} + +class DiagnosticWithParameters2Renderer( + message: String, + private val rendererForA: DiagnosticParameterRenderer?, + private val rendererForB: DiagnosticParameterRenderer? +) : AbstractDiagnosticWithParametersRenderer>(message) { + + override fun renderParameters(diagnostic: DiagnosticWithParameters2<*, A, B>): Array { + return arrayOf( + renderParameter(diagnostic.a, rendererForA), + renderParameter(diagnostic.b, rendererForB) + ) + } +} + +class DiagnosticWithParameters3Renderer( + message: String, + private val rendererForA: DiagnosticParameterRenderer?, + private val rendererForB: DiagnosticParameterRenderer?, + private val rendererForC: DiagnosticParameterRenderer? +) : AbstractDiagnosticWithParametersRenderer>(message) { + + override fun renderParameters(diagnostic: DiagnosticWithParameters3<*, A, B, C>): Array { + return arrayOf( + renderParameter(diagnostic.a, rendererForA), + renderParameter(diagnostic.b, rendererForB), + renderParameter(diagnostic.c, rendererForC) + ) + } +} + +class DiagnosticWithParametersMultiRenderer( + message: String, + private val renderer: MultiRenderer +) : AbstractDiagnosticWithParametersRenderer>(message) { + + override fun renderParameters(diagnostic: DiagnosticWithParameters1<*, A>): Array { + return renderer.render(diagnostic.a) + } +} + +interface MultiRenderer { + fun render(a: A): Array +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt index c3b56b33ccc..a9c9c9c380c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRenderer.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeConstructor import org.jetbrains.kotlin.types.TypeProjection -abstract class DescriptorRenderer : Renderer { +abstract class DescriptorRenderer { fun withOptions(changeOptions: DescriptorRendererOptions.() -> Unit): DescriptorRenderer { val options = (this as DescriptorRendererImpl).options.copy() options.changeOptions() @@ -48,7 +48,7 @@ abstract class DescriptorRenderer : Renderer { abstract fun renderAnnotation(annotation: AnnotationDescriptor, target: AnnotationUseSiteTarget? = null): String - override abstract fun render(declarationDescriptor: DeclarationDescriptor): String + abstract fun render(declarationDescriptor: DeclarationDescriptor): String abstract fun renderValueParameters(parameters: Collection, synthesizedParameterNames: Boolean): String diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/HtmlTabledDescriptorRenderer.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/HtmlTabledDescriptorRenderer.java index 8b90e923ec5..1681670d7e1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/HtmlTabledDescriptorRenderer.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/HtmlTabledDescriptorRenderer.java @@ -22,12 +22,16 @@ import kotlin.jvm.functions.Function1; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor; +import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticParameterRenderer; import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer; import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.DescriptorRow; import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.FunctionArgumentsRow; import org.jetbrains.kotlin.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.TableRow; import org.jetbrains.kotlin.idea.highlighter.renderersUtil.RenderersUtilKt; -import org.jetbrains.kotlin.renderer.*; +import org.jetbrains.kotlin.renderer.DescriptorRenderer; +import org.jetbrains.kotlin.renderer.DescriptorRendererModifier; +import org.jetbrains.kotlin.renderer.DescriptorRendererOptions; +import org.jetbrains.kotlin.renderer.RenderingFormat; import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPosition; import org.jetbrains.kotlin.types.KotlinType; @@ -43,7 +47,7 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer { @NotNull @Override - public Renderer getTypeRenderer() { + public DiagnosticParameterRenderer getTypeRenderer() { return IdeRenderers.HTML_RENDER_TYPE; } 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 03fe6560531..941e062eba6 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 @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.diagnostics.TypeMismatchDueToTypeProjectionsData; import org.jetbrains.kotlin.diagnostics.rendering.*; import org.jetbrains.kotlin.js.resolve.diagnostics.ErrorsJs; import org.jetbrains.kotlin.js.resolve.diagnostics.JsCallDataHtmlRenderer; -import org.jetbrains.kotlin.renderer.DescriptorRenderer; import java.net.URL; @@ -76,7 +75,7 @@ public class IdeErrorMessages { HTML_RENDER_TYPE.render(object.getExpectedType()), HTML_RENDER_TYPE.render(object.getExpressionType()), HTML_RENDER_TYPE.render(object.getReceiverType()), - DescriptorRenderer.HTML.render(object.getCallableDescriptor()) + HTML.render(object.getCallableDescriptor()) }; } }); @@ -110,30 +109,30 @@ 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, DescriptorRenderer.HTML); + "{1}", HTML_RENDER_RETURN_TYPE, HTML); MAP.put(RETURN_TYPE_MISMATCH_ON_INHERITANCE, "Return types of inherited members are incompatible:
{0},
{1}", - DescriptorRenderer.HTML, DescriptorRenderer.HTML); + HTML, HTML); MAP.put(PROPERTY_TYPE_MISMATCH_ON_OVERRIDE, "Property type is ''{0}'', which is not a subtype type of overridden
" + - "{1}", HTML_RENDER_RETURN_TYPE, DescriptorRenderer.HTML); + "{1}", HTML_RENDER_RETURN_TYPE, HTML); MAP.put(VAR_TYPE_MISMATCH_ON_OVERRIDE, "Var-property type is ''{0}'', which is not a type of overridden
" + - "{1}", HTML_RENDER_RETURN_TYPE, DescriptorRenderer.HTML); + "{1}", HTML_RENDER_RETURN_TYPE, HTML); MAP.put(PROPERTY_TYPE_MISMATCH_ON_INHERITANCE, "Types of inherited properties are incompatible:
{0},
{1}", - DescriptorRenderer.HTML, DescriptorRenderer.HTML); + HTML, HTML); MAP.put(VAR_TYPE_MISMATCH_ON_INHERITANCE, "Types of inherited var-properties do not match:
{0},
{1}", - DescriptorRenderer.HTML, DescriptorRenderer.HTML); + HTML, HTML); MAP.put(VAR_OVERRIDDEN_BY_VAL, "Val-property cannot override var-property
" + - "{1}", DescriptorRenderer.HTML, DescriptorRenderer.HTML); + "{1}", HTML, HTML); MAP.put(VAR_OVERRIDDEN_BY_VAL_BY_DELEGATION, "Val-property cannot override var-property
" + - "{1}", DescriptorRenderer.HTML, DescriptorRenderer.HTML); + "{1}", HTML, HTML); MAP.put(ABSTRACT_MEMBER_NOT_IMPLEMENTED, "{0} must be declared abstract or implement abstract member
" + "{1}", RENDER_CLASS_OR_OBJECT, - DescriptorRenderer.HTML); + HTML); MAP.put(MANY_IMPL_MEMBER_NOT_IMPLEMENTED, "{0} must override {1}
because it inherits many implementations of it", - RENDER_CLASS_OR_OBJECT, DescriptorRenderer.HTML); + RENDER_CLASS_OR_OBJECT, HTML); MAP.put(CONFLICTING_OVERLOADS, "''{0}''
conflicts with another declaration in {1}", IdeRenderers.HTML_COMPACT_WITH_MODIFIERS, Renderers.DECLARATION_NAME_WITH_KIND); 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 6ecd5dde134..b21f0747335 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 @@ -17,10 +17,11 @@ package org.jetbrains.kotlin.idea.highlighter import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.diagnostics.rendering.Renderer import org.jetbrains.kotlin.diagnostics.rendering.Renderers +import org.jetbrains.kotlin.diagnostics.rendering.asRenderer import org.jetbrains.kotlin.idea.highlighter.renderersUtil.renderResolvedCall import org.jetbrains.kotlin.renderer.DescriptorRenderer -import org.jetbrains.kotlin.renderer.Renderer import org.jetbrains.kotlin.resolve.MemberComparator import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall @@ -30,7 +31,7 @@ import kotlin.comparisons.compareBy object IdeRenderers { - @JvmField val HTML_AMBIGUOUS_CALLS: Renderer>> = Renderer { + @JvmField val HTML_AMBIGUOUS_CALLS = Renderer { calls: Collection> -> calls .map { it.resultingDescriptor } @@ -38,11 +39,11 @@ object IdeRenderers { .joinToString("") { "

  • ${DescriptorRenderer.HTML.render(it)}
  • " } } - @JvmField val HTML_RENDER_TYPE: Renderer = Renderer { + @JvmField val HTML_RENDER_TYPE = Renderer { DescriptorRenderer.HTML.renderType(it) } - @JvmField val HTML_NONE_APPLICABLE_CALLS: Renderer>> = Renderer { + @JvmField val HTML_NONE_APPLICABLE_CALLS= Renderer { calls: Collection> -> val comparator = compareBy(MemberComparator.INSTANCE) { c: ResolvedCall<*> -> c.resultingDescriptor } calls @@ -50,32 +51,32 @@ object IdeRenderers { .joinToString("") { "
  • ${renderResolvedCall(it)}
  • " } } - @JvmField val HTML_TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS_RENDERER: Renderer = Renderer { + @JvmField val HTML_TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS_RENDERER = Renderer { Renderers.renderConflictingSubstitutionsInferenceError(it, HtmlTabledDescriptorRenderer.create()).toString() } - @JvmField val HTML_TYPE_INFERENCE_PARAMETER_CONSTRAINT_ERROR_RENDERER: Renderer = Renderer { + @JvmField val HTML_TYPE_INFERENCE_PARAMETER_CONSTRAINT_ERROR_RENDERER = Renderer { Renderers.renderParameterConstraintError(it, HtmlTabledDescriptorRenderer.create()).toString() } - @JvmField val HTML_TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER_RENDERER: Renderer = Renderer { + @JvmField val HTML_TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER_RENDERER = Renderer { Renderers.renderNoInformationForParameterError(it, HtmlTabledDescriptorRenderer.create()).toString() } - @JvmField val HTML_TYPE_INFERENCE_UPPER_BOUND_VIOLATED_RENDERER: Renderer = Renderer { + @JvmField val HTML_TYPE_INFERENCE_UPPER_BOUND_VIOLATED_RENDERER = Renderer { Renderers.renderUpperBoundViolatedInferenceError(it, HtmlTabledDescriptorRenderer.create()).toString() } - @JvmField val HTML_RENDER_RETURN_TYPE: Renderer = Renderer { + @JvmField val HTML_RENDER_RETURN_TYPE = Renderer { val returnType = it.returnType!! DescriptorRenderer.HTML.renderType(returnType) } - @JvmField val HTML_COMPACT_WITH_MODIFIERS: DescriptorRenderer = DescriptorRenderer.HTML.withOptions { + @JvmField val HTML_COMPACT_WITH_MODIFIERS = DescriptorRenderer.HTML.withOptions { withDefinedIn = false - } + }.asRenderer() - @JvmField val HTML_CONFLICTING_JVM_DECLARATIONS_DATA: Renderer = Renderer { + @JvmField val HTML_CONFLICTING_JVM_DECLARATIONS_DATA = Renderer { data: ConflictingJvmDeclarationsData -> val conflicts = data.signatureOrigins @@ -86,7 +87,9 @@ object IdeRenderers { "The following declarations have the same JVM signature (${data.signature.name}${data.signature.desc}):
    \n
      \n$conflicts
    " } - @JvmField val HTML_THROWABLE: Renderer = Renderer { + @JvmField val HTML_THROWABLE = Renderer { Renderers.THROWABLE.render(it).replace("\n", "
    ") } + + @JvmField val HTML = DescriptorRenderer.HTML.asRenderer() } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/jsRenderers.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/jsRenderers.kt index e9fc615aa59..66a5984a21b 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/jsRenderers.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/jsRenderers.kt @@ -18,9 +18,9 @@ package org.jetbrains.kotlin.js.resolve.diagnostics import com.google.gwt.dev.js.rhino.Utils.isEndOfLine import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.renderer.Renderer +import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticParameterRenderer -object RenderFirstLineOfElementText : Renderer { +object RenderFirstLineOfElementText : DiagnosticParameterRenderer { override fun render(element: PsiElement): String { val text = element.text val index = text.indexOf('\n') @@ -28,7 +28,7 @@ object RenderFirstLineOfElementText : Renderer { } } -abstract class JsCallDataRenderer : Renderer { +abstract class JsCallDataRenderer : DiagnosticParameterRenderer { protected abstract fun format(data: JsCallDataWithCode): String override fun render(data: JsCallData): String =