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
024 private ClassBuilderMode(boolean generateBodies, boolean generateMetadata, boolean generateSourceRetentionAnnotations) {
025 this.generateBodies = generateBodies;
026 this.generateMetadata = generateMetadata;
027 this.generateSourceRetentionAnnotations = generateSourceRetentionAnnotations;
028 }
029
030 public static ClassBuilderMode full(boolean generateSourceRetentionAnnotations) {
031 return generateSourceRetentionAnnotations ? KAPT2 : FULL;
032 }
033
034 /**
035 * Full function bodies
036 */
037 private final static ClassBuilderMode FULL = new ClassBuilderMode(
038 /* bodies = */ true,
039 /* metadata = */ true,
040 /* sourceRetention = */ false);
041
042 /**
043 * Full function bodies, write annotations with the "source" retention.
044 */
045 private final static ClassBuilderMode KAPT2 = new ClassBuilderMode(
046 /* bodies = */ true,
047 /* metadata = */ true,
048 /* sourceRetention = */ true);
049
050 /**
051 * Generating light classes: Only function signatures
052 */
053 public final static ClassBuilderMode LIGHT_CLASSES = new ClassBuilderMode(
054 /* bodies = */ false,
055 /* metadata = */ false,
056 /* sourceRetention = */ true);
057
058 /**
059 * Function signatures + metadata (to support incremental compilation with kapt)
060 */
061 public final static ClassBuilderMode KAPT = new ClassBuilderMode(
062 /* bodies = */ false,
063 /* metadata = */ true,
064 /* sourceRetention = */ true);
065 }