001 /*
002 * Copyright 2010-2014 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.descriptors.annotations.AnnotationDescriptor;
024 import org.jetbrains.jet.lang.types.JetType;
025 import org.jetbrains.jet.lang.types.TypeProjection;
026
027 import java.util.List;
028
029 public interface DescriptorRenderer extends Renderer<DeclarationDescriptor> {
030 DescriptorRenderer COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder().setWithDefinedIn(false).build();
031
032 DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder()
033 .setNormalizedVisibilities(true)
034 .setWithDefinedIn(false)
035 .setShortNames(false)
036 .setShowInternalKeyword(false)
037 .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE)
038 .setUnitReturnType(false).build();
039
040 DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder()
041 .setNormalizedVisibilities(true)
042 .setWithDefinedIn(false)
043 .setShortNames(true)
044 .setShowInternalKeyword(false)
045 .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE)
046 .setUnitReturnType(false).build();
047
048 DescriptorRenderer COMPACT = new DescriptorRendererBuilder()
049 .setWithDefinedIn(false)
050 .setModifiers().build();
051
052 DescriptorRenderer COMPACT_WITH_SHORT_TYPES = new DescriptorRendererBuilder()
053 .setWithDefinedIn(false)
054 .setModifiers()
055 .setShortNames(true)
056 .setIncludeSynthesizedParameterNames(false).build();
057
058 DescriptorRenderer STARTS_FROM_NAME = new DescriptorRendererBuilder()
059 .setWithDefinedIn(false)
060 .setModifiers()
061 .setStartFromName(true).build();
062
063 DescriptorRenderer ONLY_NAMES_WITH_SHORT_TYPES = new DescriptorRendererBuilder()
064 .setWithDefinedIn(false)
065 .setModifiers()
066 .setShortNames(true)
067 .setWithoutTypeParameters(true)
068 .setWithoutFunctionParameterNames(true)
069 .setReceiverAfterName(true)
070 .setRenderClassObjectName(true)
071 .setWithoutSuperTypes(true)
072 .setStartFromName(true).build();
073
074 DescriptorRenderer FQ_NAMES_IN_TYPES = new DescriptorRendererBuilder().build();
075
076 DescriptorRenderer SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder().setShortNames(true).setIncludeSynthesizedParameterNames(false).build();
077
078 DescriptorRenderer DEBUG_TEXT = new DescriptorRendererBuilder().setDebugMode(true).build();
079
080 DescriptorRenderer HTML_COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder()
081 .setWithDefinedIn(false)
082 .setTextFormat(TextFormat.HTML).build();
083
084 DescriptorRenderer HTML_NAMES_WITH_SHORT_TYPES = new DescriptorRendererBuilder()
085 .setWithDefinedIn(false)
086 .setShortNames(true)
087 .setTextFormat(TextFormat.HTML).build();
088
089 DescriptorRenderer HTML = new DescriptorRendererBuilder().setTextFormat(TextFormat.HTML).build();
090
091 DescriptorRenderer HTML_FOR_UNINFERRED_TYPE_PARAMS = new DescriptorRendererBuilder()
092 .setUninferredTypeParameterAsName(true)
093 .setModifiers()
094 .setShortNames(true)
095 .setTextFormat(TextFormat.HTML).build();
096
097 @NotNull
098 String renderType(@NotNull JetType type);
099
100 @NotNull
101 String renderTypeArguments(@NotNull List<TypeProjection> typeArguments);
102
103 @NotNull
104 String renderAnnotation(@NotNull AnnotationDescriptor annotation);
105
106 @NotNull
107 @Override
108 String render(@NotNull DeclarationDescriptor declarationDescriptor);
109
110 @NotNull
111 String renderFunctionParameters(@NotNull FunctionDescriptor functionDescriptor);
112
113 enum TextFormat {
114 PLAIN, HTML
115 }
116
117 enum OverrideRenderingPolicy {
118 RENDER_OVERRIDE, RENDER_OPEN, RENDER_OPEN_OVERRIDE
119 }
120
121 enum Modifier {
122 VISIBILITY, MODALITY, OVERRIDE, ANNOTATIONS, INNER, MEMBER_KIND
123 }
124
125 /** @see DefaultValueParameterHandler */
126 interface ValueParametersHandler {
127 void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder);
128 void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder);
129
130 void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder);
131 void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder);
132 }
133
134 class DefaultValueParameterHandler implements ValueParametersHandler {
135 @Override
136 public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
137 stringBuilder.append("(");
138 }
139
140 @Override
141 public void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
142 stringBuilder.append(")");
143 }
144
145 @Override
146 public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
147 }
148
149 @Override
150 public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
151 FunctionDescriptor function = (FunctionDescriptor) parameter.getContainingDeclaration();
152 if (parameter.getIndex() != function.getValueParameters().size() - 1) {
153 stringBuilder.append(", ");
154 }
155 }
156 }
157 }