From 02647820bcca0c1f0e514825c8a604d1b64ca333 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Thu, 24 Apr 2014 17:38:30 +0400 Subject: [PATCH] Rewrote rendering a resolved call to kotlin --- .../jet/plugin/highlighter/IdeRenderers.java | 49 ++----------- .../jet/plugin/highlighter/renderersUtil.kt | 69 +++++++++++++++++++ 2 files changed, 76 insertions(+), 42 deletions(-) create mode 100644 idea/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java index 9f5f2239227..164b03111b5 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java @@ -17,13 +17,9 @@ package org.jetbrains.jet.plugin.highlighter; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.ValueArgument; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.resolve.calls.inference.InferenceErrorData; -import org.jetbrains.jet.lang.resolve.calls.model.*; -import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; +import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.Renderer; @@ -31,21 +27,23 @@ import org.jetbrains.jet.renderer.Renderer; import java.util.Collection; import static org.jetbrains.jet.lang.diagnostics.rendering.Renderers.*; -import static org.jetbrains.jet.lang.resolve.calls.util.UtilPackage.hasErrorOnParameter; -import static org.jetbrains.jet.lang.resolve.calls.util.UtilPackage.hasUnmappedArguments; +import static org.jetbrains.jet.plugin.highlighter.renderersUtil.RenderersUtilPackage.renderResolvedCall; public class IdeRenderers { private static final String RED_TEMPLATE = "%s"; private static final String STRONG_TEMPLATE = "%s"; + @NotNull public static String strong(Object o) { return String.format(STRONG_TEMPLATE, o); } + @NotNull public static String error(Object o) { return String.format(RED_TEMPLATE, o); } + @NotNull public static String strong(Object o, boolean error) { return String.format(error ? RED_TEMPLATE : STRONG_TEMPLATE, o); } @@ -82,40 +80,7 @@ public class IdeRenderers { StringBuilder stringBuilder = new StringBuilder(""); for (ResolvedCall resolvedCall : calls) { stringBuilder.append("
  • "); - CallableDescriptor funDescriptor = resolvedCall.getResultingDescriptor(); - - DescriptorRenderer htmlRenderer = DescriptorRenderer.HTML; - ReceiverParameterDescriptor receiverParameter = funDescriptor.getReceiverParameter(); - if (receiverParameter != null) { - stringBuilder.append(htmlRenderer.renderType(receiverParameter.getType())).append("."); - } - stringBuilder.append(funDescriptor.getName()).append("("); - boolean first = true; - for (ValueParameterDescriptor parameter : funDescriptor.getValueParameters()) { - if (!first) { - stringBuilder.append(", "); - } - JetType type = parameter.getType(); - JetType varargElementType = parameter.getVarargElementType(); - if (varargElementType != null) { - type = varargElementType; - } - String paramString = (varargElementType != null ? "vararg " : "") + htmlRenderer.renderType(type); - if (parameter.hasDefaultValue()) { - paramString += " = ..."; - } - if (hasErrorOnParameter(resolvedCall, parameter)) { - paramString = String.format(RED_TEMPLATE, paramString); - } - stringBuilder.append(paramString); - - first = false; - } - stringBuilder.append(hasUnmappedArguments(resolvedCall) ? String.format(RED_TEMPLATE, ")") : ")"); - stringBuilder.append(" defined in "); - DeclarationDescriptor containingDeclaration = funDescriptor.getContainingDeclaration(); - FqNameUnsafe fqName = DescriptorUtils.getFqName(containingDeclaration); - stringBuilder.append(FqName.ROOT.equalsTo(fqName) ? "root package" : fqName.asString()); + stringBuilder.append(renderResolvedCall(resolvedCall)); stringBuilder.append("
  • "); } return stringBuilder.toString(); diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt b/idea/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt new file mode 100644 index 00000000000..dcc41b5a073 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/renderersUtil.kt @@ -0,0 +1,69 @@ +/* + * Copyright 2010-2014 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.jet.plugin.highlighter.renderersUtil + +import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall +import org.jetbrains.jet.lang.descriptors.CallableDescriptor +import org.jetbrains.jet.renderer.DescriptorRenderer +import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor +import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor +import org.jetbrains.jet.lang.types.JetType +import org.jetbrains.jet.lang.resolve.calls.util.* +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe +import org.jetbrains.jet.lang.resolve.DescriptorUtils +import org.jetbrains.jet.lang.resolve.name.FqName +import org.jetbrains.jet.plugin.highlighter.IdeRenderers + +fun renderResolvedCall(resolvedCall: ResolvedCall): String { + val stringBuilder = StringBuilder("") + val funDescriptor = resolvedCall.getResultingDescriptor() + + val htmlRenderer = DescriptorRenderer.HTML + val receiverParameter = funDescriptor.getReceiverParameter() + if (receiverParameter != null) { + stringBuilder.append(htmlRenderer.renderType(receiverParameter.getType())).append(".") + } + stringBuilder.append(funDescriptor.getName()).append("(") + var first = true + for (parameter in funDescriptor.getValueParameters()) { + if (!first) { + stringBuilder.append(", ") + } + var parameterType = parameter.getType() + val varargElementType = parameter.getVarargElementType() + if (varargElementType != null) { + parameterType = varargElementType + } + var paramString: String = (if (varargElementType != null) "vararg " else "") + htmlRenderer.renderType(parameterType) + if (parameter.hasDefaultValue()) { + paramString += " = ..." + } + if (resolvedCall.hasErrorOnParameter(parameter)) { + paramString = IdeRenderers.error(paramString) + } + stringBuilder.append(paramString) + + first = false + } + stringBuilder.append(if (resolvedCall.hasUnmappedArguments()) IdeRenderers.error(")") else ")") + stringBuilder.append(" defined in ") + val containingDeclaration = funDescriptor.getContainingDeclaration() + val fqName = DescriptorUtils.getFqName(containingDeclaration) + stringBuilder.append(if (FqName.ROOT.equalsTo(fqName)) "root package" else fqName.asString()) + return stringBuilder.toString() +} \ No newline at end of file