001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.renderer;
018
019 import org.jetbrains.annotations.NotNull;
020 import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
021 import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
022 import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
023 import org.jetbrains.jet.lang.diagnostics.rendering.Renderer;
024 import org.jetbrains.jet.lang.types.JetType;
025
026 public interface DescriptorRenderer extends Renderer<DeclarationDescriptor> {
027 DescriptorRenderer COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder().setWithDefinedIn(false).build();
028
029 DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder()
030 .setNormalizedVisibilities(true)
031 .setWithDefinedIn(false)
032 .setShortNames(false)
033 .setShowInternalKeyword(false)
034 .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE)
035 .setUnitReturnType(false).build();
036
037 DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder()
038 .setNormalizedVisibilities(true)
039 .setWithDefinedIn(false)
040 .setShortNames(true)
041 .setShowInternalKeyword(false)
042 .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE)
043 .setUnitReturnType(false).build();
044
045 DescriptorRenderer COMPACT = new DescriptorRendererBuilder()
046 .setWithDefinedIn(false)
047 .setModifiers(false).build();
048
049 DescriptorRenderer STARTS_FROM_NAME = new DescriptorRendererBuilder()
050 .setWithDefinedIn(false)
051 .setModifiers(false)
052 .setStartFromName(true).build();
053
054 DescriptorRenderer TEXT = new DescriptorRendererBuilder().build();
055
056 DescriptorRenderer SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder().setShortNames(true).build();
057
058 DescriptorRenderer DEBUG_TEXT = new DescriptorRendererBuilder().setDebugMode(true).build();
059
060 DescriptorRenderer HTML = new DescriptorRendererBuilder().setTextFormat(TextFormat.HTML).build();
061
062 @NotNull
063 String renderType(@NotNull JetType type);
064
065 @NotNull
066 @Override
067 String render(@NotNull DeclarationDescriptor declarationDescriptor);
068
069 @NotNull
070 String renderFunctionParameters(@NotNull FunctionDescriptor functionDescriptor);
071
072 enum TextFormat {
073 PLAIN, HTML
074 }
075
076 enum OverrideRenderingPolicy {
077 RENDER_OVERRIDE, RENDER_OPEN, RENDER_OPEN_OVERRIDE
078 }
079
080 /** @see DefaultValueParameterHandler */
081 interface ValueParametersHandler {
082 void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder);
083 void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder);
084
085 void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder);
086 void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder);
087 }
088
089 class DefaultValueParameterHandler implements ValueParametersHandler {
090 @Override
091 public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
092 stringBuilder.append("(");
093 }
094
095 @Override
096 public void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
097 stringBuilder.append(")");
098 }
099
100 @Override
101 public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
102 }
103
104 @Override
105 public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
106 FunctionDescriptor function = (FunctionDescriptor) parameter.getContainingDeclaration();
107 if (parameter.getIndex() != function.getValueParameters().size() - 1) {
108 stringBuilder.append(", ");
109 }
110 }
111 }
112 }