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    }