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 }