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.types.JetType;
024
025 public interface DescriptorRenderer extends Renderer<DeclarationDescriptor> {
026 DescriptorRenderer COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder().setWithDefinedIn(false).build();
027
028 DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder()
029 .setNormalizedVisibilities(true)
030 .setWithDefinedIn(false)
031 .setShortNames(false)
032 .setShowInternalKeyword(false)
033 .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE)
034 .setUnitReturnType(false).build();
035
036 DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder()
037 .setNormalizedVisibilities(true)
038 .setWithDefinedIn(false)
039 .setShortNames(true)
040 .setShowInternalKeyword(false)
041 .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE)
042 .setUnitReturnType(false).build();
043
044 DescriptorRenderer COMPACT = new DescriptorRendererBuilder()
045 .setWithDefinedIn(false)
046 .setModifiers().build();
047
048 DescriptorRenderer STARTS_FROM_NAME = new DescriptorRendererBuilder()
049 .setWithDefinedIn(false)
050 .setModifiers()
051 .setStartFromName(true).build();
052
053 DescriptorRenderer TEXT = new DescriptorRendererBuilder().build();
054
055 DescriptorRenderer SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder().setShortNames(true).build();
056
057 DescriptorRenderer DEBUG_TEXT = new DescriptorRendererBuilder().setDebugMode(true).build();
058
059 DescriptorRenderer HTML = new DescriptorRendererBuilder().setTextFormat(TextFormat.HTML).build();
060
061 @NotNull
062 String renderType(@NotNull JetType type);
063
064 @NotNull
065 @Override
066 String render(@NotNull DeclarationDescriptor declarationDescriptor);
067
068 @NotNull
069 String renderFunctionParameters(@NotNull FunctionDescriptor functionDescriptor);
070
071 enum TextFormat {
072 PLAIN, HTML
073 }
074
075 enum OverrideRenderingPolicy {
076 RENDER_OVERRIDE, RENDER_OPEN, RENDER_OPEN_OVERRIDE
077 }
078
079 enum Modifier {
080 VISIBILITY, MODALITY, OVERRIDE, ANNOTATIONS, INNER, MEMBER_KIND
081 }
082
083 /** @see DefaultValueParameterHandler */
084 interface ValueParametersHandler {
085 void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder);
086 void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder);
087
088 void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder);
089 void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder);
090 }
091
092 class DefaultValueParameterHandler implements ValueParametersHandler {
093 @Override
094 public void appendBeforeValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
095 stringBuilder.append("(");
096 }
097
098 @Override
099 public void appendAfterValueParameters(@NotNull FunctionDescriptor function, @NotNull StringBuilder stringBuilder) {
100 stringBuilder.append(")");
101 }
102
103 @Override
104 public void appendBeforeValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
105 }
106
107 @Override
108 public void appendAfterValueParameter(@NotNull ValueParameterDescriptor parameter, @NotNull StringBuilder stringBuilder) {
109 FunctionDescriptor function = (FunctionDescriptor) parameter.getContainingDeclaration();
110 if (parameter.getIndex() != function.getValueParameters().size() - 1) {
111 stringBuilder.append(", ");
112 }
113 }
114 }
115 }