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 017package org.jetbrains.jet.renderer; 018 019import org.jetbrains.annotations.NotNull; 020import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; 021import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; 022import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; 023import org.jetbrains.jet.lang.diagnostics.rendering.Renderer; 024import org.jetbrains.jet.lang.types.JetType; 025 026public 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}