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 }