001    /*
002     * Copyright 2010-2016 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.config;
018    
019    import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
020    import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
021    import org.jetbrains.kotlin.modules.Module;
022    import org.jetbrains.kotlin.script.KotlinScriptDefinition;
023    
024    import java.io.File;
025    import java.util.List;
026    
027    public class JVMConfigurationKeys {
028        private JVMConfigurationKeys() {
029        }
030    
031        // roots, including dependencies and own source
032        public static final CompilerConfigurationKey<List<ContentRoot>> CONTENT_ROOTS =
033                CompilerConfigurationKey.create("content roots");
034    
035        public static final CompilerConfigurationKey<File> OUTPUT_DIRECTORY =
036                CompilerConfigurationKey.create("output directory");
037        public static final CompilerConfigurationKey<File> OUTPUT_JAR =
038                CompilerConfigurationKey.create("output .jar");
039        public static final CompilerConfigurationKey<Boolean> INCLUDE_RUNTIME =
040                CompilerConfigurationKey.create("include runtime to the resulting .jar");
041    
042        public static final CompilerConfigurationKey<List<KotlinScriptDefinition>> SCRIPT_DEFINITIONS =
043                CompilerConfigurationKey.create("script definitions");
044    
045        public static final CompilerConfigurationKey<Boolean> RETAIN_OUTPUT_IN_MEMORY =
046                CompilerConfigurationKey.create("retain compiled classes in memory for further use, e.g. when running scripts");
047    
048        public static final CompilerConfigurationKey<Boolean> DISABLE_CALL_ASSERTIONS =
049                CompilerConfigurationKey.create("disable not-null call assertions");
050        public static final CompilerConfigurationKey<Boolean> DISABLE_PARAM_ASSERTIONS =
051                CompilerConfigurationKey.create("disable not-null parameter assertions");
052        public static final CompilerConfigurationKey<Boolean> DISABLE_OPTIMIZATION =
053                CompilerConfigurationKey.create("disable optimization");
054        public static final CompilerConfigurationKey<Boolean> INHERIT_MULTIFILE_PARTS =
055                CompilerConfigurationKey.create("compile multifile classes to a hierarchy of parts and facade");
056        public static final CompilerConfigurationKey<Boolean> USE_TYPE_TABLE =
057                CompilerConfigurationKey.create("use type table in serializer");
058    
059        public static final CompilerConfigurationKey<Boolean> USE_SINGLE_MODULE =
060                CompilerConfigurationKey.create("combine modules for source files and binary dependencies into a single module");
061    
062        /**
063         * Controls whether the module depends on an additional "built-ins" module, which contains binary metadata of built-in definitions.
064         * By default, that metadata is loaded from kotlin-compiler.jar.
065         * However, it can be also loaded directly from the module, see {@link CREATE_BUILT_INS_FROM_MODULE_DEPENDENCIES}
066         */
067        public static final CompilerConfigurationKey<Boolean> ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES =
068                CompilerConfigurationKey.create("add built-ins from the compiler jar to the dependencies of the module being resolved");
069    
070        /**
071         * Controls whether an instance of KotlinBuiltIns which is passed to {@link ModuleDescriptorImpl}'s constructor and ends up being used
072         * everywhere in the compiler front-end is loaded directly from the module (from its sources and/or its binaries), as opposed to
073         * from kotlin-compiler.jar
074         */
075        public static final CompilerConfigurationKey<Boolean> CREATE_BUILT_INS_FROM_MODULE_DEPENDENCIES =
076                CompilerConfigurationKey.create("create built-ins from resources found in the module dependencies");
077    
078        public static final CompilerConfigurationKey<Boolean> SKIP_RUNTIME_VERSION_CHECK =
079                CompilerConfigurationKey.create("do not perform checks on runtime versions consistency");
080    
081        public static final CompilerConfigurationKey<JvmTarget> JVM_TARGET =
082                CompilerConfigurationKey.create("JVM bytecode target version");
083    
084        public static final CompilerConfigurationKey<Boolean> PARAMETERS_METADATA =
085                CompilerConfigurationKey.create("Parameters metadata for java 1.8 reflection");
086    
087        public static final CompilerConfigurationKey<Boolean> INTERFACE_COMPATIBILITY =
088                CompilerConfigurationKey.create("Generate additional 'DefaultImpls' class files for jvm 8 target for compatibility with 6 target interfaces");
089    
090        public static final CompilerConfigurationKey<Boolean> JVM8_TARGET_WITH_DEFAULTS =
091                CompilerConfigurationKey.create("Generate default methods in interfaces");
092    
093        public static final CompilerConfigurationKey<IncrementalCompilationComponents> INCREMENTAL_COMPILATION_COMPONENTS =
094                CompilerConfigurationKey.create("incremental cache provider");
095    
096        public static final CompilerConfigurationKey<File> MODULE_XML_FILE =
097                CompilerConfigurationKey.create("path to module.xml");
098    
099        public static final CompilerConfigurationKey<String> DECLARATIONS_JSON_PATH =
100                CompilerConfigurationKey.create("path to declarations output");
101    
102        public static final CompilerConfigurationKey<List<Module>> MODULES =
103                CompilerConfigurationKey.create("module data");
104    
105        public static final CompilerConfigurationKey<List<String>> FRIEND_PATHS =
106                CompilerConfigurationKey.create("friend module paths");
107    
108        public static final CompilerConfigurationKey<Boolean> IR =
109                CompilerConfigurationKey.create("IR");
110    }