001    /*
002     * Copyright 2010-2015 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.kotlin.codegen;
018    
019    public class ClassBuilderMode {
020        public final boolean generateBodies;
021        public final boolean generateMetadata;
022        public final boolean generateSourceRetentionAnnotations;
023        public final boolean generateMethodParameters;
024        public final boolean generateMultiFileFacadePartClasses;
025    
026        private ClassBuilderMode(
027                boolean generateBodies,
028                boolean generateMetadata,
029                boolean generateSourceRetentionAnnotations,
030                boolean generateMethodParameters,
031                boolean generateMultiFileFacadePartClasses
032        ) {
033            this.generateBodies = generateBodies;
034            this.generateMetadata = generateMetadata;
035            this.generateSourceRetentionAnnotations = generateSourceRetentionAnnotations;
036            this.generateMethodParameters = generateMethodParameters;
037            this.generateMultiFileFacadePartClasses = generateMultiFileFacadePartClasses;
038        }
039        
040        public static ClassBuilderMode full(boolean generateSourceRetentionAnnotations) {
041            return generateSourceRetentionAnnotations ? KAPT : FULL;
042        }
043    
044        /**
045         * Full function bodies
046         */
047        private final static ClassBuilderMode FULL = new ClassBuilderMode(
048                /* bodies = */ true, 
049                /* metadata = */ true,
050                /* sourceRetention = */ false,
051                /* generateMethodParameters = */ false,
052                /* generateMultiFileFacadePartClasses = */ true);
053    
054        /**
055         * Generating light classes: Only function signatures
056         */
057        public final static ClassBuilderMode LIGHT_CLASSES = new ClassBuilderMode(
058                /* bodies = */ false,
059                /* metadata = */ false,
060                /* sourceRetention = */ true,
061                /* generateMethodParameters = */ false,
062                /* generateMultiFileFacadePartClasses = */ false);
063        
064        /**
065         * Function signatures + metadata (to support incremental compilation with kapt)
066         */
067        public final static ClassBuilderMode KAPT = new ClassBuilderMode(
068                /* bodies = */ false,
069                /* metadata = */ true,
070                /* sourceRetention = */ true,
071                /* generateMethodParameters = */ false,
072                /* generateMultiFileFacadePartClasses = */ false);
073    
074        /**
075         * Function signatures + metadata (to support incremental compilation with kapt)
076         */
077        public final static ClassBuilderMode KAPT3 = new ClassBuilderMode(
078                /* bodies = */ false,
079                /* metadata = */ true,
080                /* sourceRetention = */ true,
081                /* generateMethodParameters = */ true,
082                /* generateMultiFileFacadePartClasses = */ true);
083    }