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 }