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 com.google.common.collect.ImmutableSet;
020 import org.jetbrains.annotations.NotNull;
021 import org.jetbrains.jet.lang.resolve.name.FqName;
022
023 import java.util.Collection;
024 import java.util.Collections;
025 import java.util.Set;
026
027 public class DescriptorRendererBuilder {
028 private boolean shortNames = false;
029 private boolean withDefinedIn = true;
030 private Set<DescriptorRenderer.Modifier> modifiers = ImmutableSet.copyOf(DescriptorRenderer.Modifier.values());
031 private boolean startFromName = false;
032 private boolean debugMode = false;
033 private boolean classWithPrimaryConstructor = false;
034 private boolean verbose = false;
035 private boolean unitReturnType = true;
036 private boolean normalizedVisibilities = false;
037 private boolean showInternalKeyword = true;
038 private boolean prettyFunctionTypes = true;
039 private boolean uninferredTypeParameterAsName = false;
040 private boolean includePropertyConstant = false;
041 private boolean includeSynthesizedParameterNames = true;
042 @NotNull
043 private DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy = DescriptorRenderer.OverrideRenderingPolicy.RENDER_OPEN;
044 @NotNull
045 private DescriptorRenderer.ValueParametersHandler valueParametersHandler = new DescriptorRenderer.DefaultValueParameterHandler();
046 @NotNull
047 private DescriptorRenderer.TextFormat textFormat = DescriptorRenderer.TextFormat.PLAIN;
048 @NotNull
049 private Collection<FqName> excludedAnnotationClasses = Collections.emptyList();
050
051 public DescriptorRendererBuilder() {
052 }
053
054 @NotNull
055 public DescriptorRendererBuilder setShortNames(boolean shortNames) {
056 this.shortNames = shortNames;
057 return this;
058 }
059
060 @NotNull
061 public DescriptorRendererBuilder setWithDefinedIn(boolean withDefinedIn) {
062 this.withDefinedIn = withDefinedIn;
063 return this;
064 }
065
066 @NotNull
067 public DescriptorRendererBuilder setModifiers(Set<DescriptorRenderer.Modifier> modifiers) {
068 this.modifiers = modifiers;
069 return this;
070 }
071
072 @NotNull
073 public DescriptorRendererBuilder setModifiers(DescriptorRenderer.Modifier... modifiers) {
074 return setModifiers(ImmutableSet.copyOf(modifiers));
075 }
076
077 @NotNull
078 public DescriptorRendererBuilder setStartFromName(boolean startFromName) {
079 this.startFromName = startFromName;
080 return this;
081 }
082
083 @NotNull
084 public DescriptorRendererBuilder setDebugMode(boolean debugMode) {
085 this.debugMode = debugMode;
086 return this;
087 }
088
089 @NotNull
090 public DescriptorRendererBuilder setClassWithPrimaryConstructor(boolean classWithPrimaryConstructor) {
091 this.classWithPrimaryConstructor = classWithPrimaryConstructor;
092 return this;
093 }
094
095 @NotNull
096 public DescriptorRendererBuilder setVerbose(boolean verbose) {
097 this.verbose = verbose;
098 return this;
099 }
100
101 @NotNull
102 public DescriptorRendererBuilder setUnitReturnType(boolean unitReturnType) {
103 this.unitReturnType = unitReturnType;
104 return this;
105 }
106
107 @NotNull
108 public DescriptorRendererBuilder setNormalizedVisibilities(boolean normalizedVisibilities) {
109 this.normalizedVisibilities = normalizedVisibilities;
110 return this;
111 }
112
113 @NotNull
114 public DescriptorRendererBuilder setShowInternalKeyword(boolean showInternalKeyword) {
115 this.showInternalKeyword = showInternalKeyword;
116 return this;
117 }
118
119 @NotNull
120 public DescriptorRendererBuilder setOverrideRenderingPolicy(@NotNull DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy) {
121 this.overrideRenderingPolicy = overrideRenderingPolicy;
122 return this;
123 }
124
125 @NotNull
126 public DescriptorRendererBuilder setValueParametersHandler(@NotNull DescriptorRenderer.ValueParametersHandler valueParametersHandler) {
127 this.valueParametersHandler = valueParametersHandler;
128 return this;
129 }
130
131 @NotNull
132 public DescriptorRendererBuilder setTextFormat(@NotNull DescriptorRenderer.TextFormat textFormat) {
133 this.textFormat = textFormat;
134 return this;
135 }
136
137 @NotNull
138 public DescriptorRendererBuilder setExcludedAnnotationClasses(@NotNull Collection<FqName> excludedAnnotationClasses) {
139 this.excludedAnnotationClasses = excludedAnnotationClasses;
140 return this;
141 }
142
143 @NotNull
144 public DescriptorRendererBuilder setPrettyFunctionTypes(boolean prettyFunctionTypes) {
145 this.prettyFunctionTypes = prettyFunctionTypes;
146 return this;
147 }
148
149 @NotNull
150 public DescriptorRendererBuilder setUninferredTypeParameterAsName(boolean uninferredTypeParameterAsName) {
151 this.uninferredTypeParameterAsName = uninferredTypeParameterAsName;
152 return this;
153 }
154
155 public DescriptorRendererBuilder setIncludePropertyConstant(boolean includePropertyConstant) {
156 this.includePropertyConstant = includePropertyConstant;
157 return this;
158 }
159
160 public DescriptorRendererBuilder setIncludeSynthesizedParameterNames(boolean includeSynthesizedParameterNames) {
161 this.includeSynthesizedParameterNames = includeSynthesizedParameterNames;
162 return this;
163 }
164
165 @NotNull
166 public DescriptorRenderer build() {
167 return new DescriptorRendererImpl(
168 shortNames, withDefinedIn, modifiers, startFromName, debugMode, classWithPrimaryConstructor, verbose, unitReturnType,
169 normalizedVisibilities, showInternalKeyword, prettyFunctionTypes, uninferredTypeParameterAsName,
170 overrideRenderingPolicy, valueParametersHandler, textFormat, excludedAnnotationClasses, includePropertyConstant,
171 includeSynthesizedParameterNames);
172 }
173
174 }