diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java index 8ef4e9be8a1..e59e0889427 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java @@ -68,14 +68,20 @@ public class GenerationState { @NotNull private final JetTypeMapper typeMapper; + private final boolean generateNotNullAssertions; + public GenerationState(Project project, ClassBuilderFactory builderFactory, AnalyzeExhaust analyzeExhaust, List files) { - this(project, builderFactory, Progress.DEAF, analyzeExhaust, files, BuiltinToJavaTypesMapping.ENABLED); + this(project, builderFactory, Progress.DEAF, analyzeExhaust, files, BuiltinToJavaTypesMapping.ENABLED, true); } public GenerationState( @NotNull Project project, - ClassBuilderFactory builderFactory, Progress progress, - @NotNull AnalyzeExhaust exhaust, @NotNull List files, @NotNull BuiltinToJavaTypesMapping builtinToJavaTypesMapping + ClassBuilderFactory builderFactory, + @NotNull Progress progress, + @NotNull AnalyzeExhaust exhaust, + @NotNull List files, + @NotNull BuiltinToJavaTypesMapping builtinToJavaTypesMapping, + boolean generateNotNullAssertions ) { this.project = project; this.progress = progress; @@ -94,6 +100,8 @@ public class GenerationState { this.scriptCodegen = injector.getScriptCodegen(); this.intrinsics = injector.getIntrinsics(); this.classFileFactory = injector.getClassFileFactory(); + + this.generateNotNullAssertions = generateNotNullAssertions; } @NotNull @@ -146,6 +154,10 @@ public class GenerationState { return intrinsics; } + public boolean isGenerateNotNullAssertions() { + return generateNotNullAssertions; + } + public void beforeCompile() { markUsed(); diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/JVMConfigurationKeys.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/JVMConfigurationKeys.java index 66e4b534ce9..ba15c94c306 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/JVMConfigurationKeys.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/JVMConfigurationKeys.java @@ -41,4 +41,7 @@ public class JVMConfigurationKeys { public static final CompilerConfigurationKey STUBS = CompilerConfigurationKey.create("stubs"); public static final CompilerConfigurationKey BUILTIN_TO_JAVA_TYPES_MAPPING_KEY = CompilerConfigurationKey.create("builtin to java types mapping"); + + public static final CompilerConfigurationKey GENERATE_NOT_NULL_ASSERTIONS = + CompilerConfigurationKey.create("generate not-null assertions"); } diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java index 262a52b6241..28bb27324b8 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java @@ -110,6 +110,8 @@ public class K2JVMCompiler extends CLICompiler { configuration.put(JVMConfigurationKeys.BUILTIN_TO_JAVA_TYPES_MAPPING_KEY, builtins ? BuiltinToJavaTypesMapping.DISABLED : BuiltinToJavaTypesMapping.ENABLED); + configuration.put(JVMConfigurationKeys.GENERATE_NOT_NULL_ASSERTIONS, arguments.notNullAssertions); + configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector); messageCollector.report(CompilerMessageSeverity.LOGGING, "Configuring the compilation environment", diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompilerArguments.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompilerArguments.java index d116a849b41..c5544b4aed7 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompilerArguments.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompilerArguments.java @@ -25,6 +25,7 @@ import java.util.List; /** * Command line arguments for the {@link K2JVMCompiler} */ +@SuppressWarnings("UnusedDeclaration") public class K2JVMCompilerArguments extends CompilerArguments { @@ -63,6 +64,9 @@ public class K2JVMCompilerArguments extends CompilerArguments { @Argument(value = "noJdkAnnotations", description = "don't include JDK external annotations into classpath") public boolean noJdkAnnotations; + @Argument(value = "notNullAssertions", description = "generate not-null assertion after each invokation of method returning not-null") + public boolean notNullAssertions; + @Argument(value = "builtins", description = "compile builtin classes (internal)") public boolean builtins; diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index 1574c27b4f6..6c3b03a5568 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -341,11 +341,11 @@ public class KotlinToJVMBytecodeCompiler { environment.getConfiguration().get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report(CompilerMessageSeverity.LOGGING, message, CompilerMessageLocation.NO_LOCATION); } }; - GenerationState generationState = new GenerationState(project, ClassBuilderFactories.binaries(stubs), backendProgress, - exhaust, environment.getSourceFiles(), - environment.getConfiguration().get( - JVMConfigurationKeys.BUILTIN_TO_JAVA_TYPES_MAPPING_KEY, - BuiltinToJavaTypesMapping.ENABLED)); + GenerationState generationState = new GenerationState( + project, ClassBuilderFactories.binaries(stubs), backendProgress, exhaust, environment.getSourceFiles(), + environment.getConfiguration().get(JVMConfigurationKeys.BUILTIN_TO_JAVA_TYPES_MAPPING_KEY, BuiltinToJavaTypesMapping.ENABLED), + environment.getConfiguration().get(JVMConfigurationKeys.GENERATE_NOT_NULL_ASSERTIONS, false) + ); GenerationStrategy.STANDARD.compileCorrectFiles(generationState, CompilationErrorHandler.THROW_EXCEPTION); CompilerPluginContext context = new CompilerPluginContext(project, exhaust.getBindingContext(), environment.getSourceFiles()); diff --git a/compiler/testData/cli/help.out b/compiler/testData/cli/help.out index 84fd7fd6d21..eed5e8d9df8 100644 --- a/compiler/testData/cli/help.out +++ b/compiler/testData/cli/help.out @@ -7,6 +7,7 @@ Usage: org.jetbrains.jet.cli.jvm.K2JVMCompilerArguments -noJdk [flag] don't include Java runtime into classpath -noStdlib [flag] don't include Kotlin runtime into classpath -noJdkAnnotations [flag] don't include JDK external annotations into classpath + -notNullAssertions [flag] generate not-null assertion after each invokation of method returning not-null -builtins [flag] compile builtin classes (internal) -output [String] output directory -module [String] module to compile diff --git a/compiler/testData/cli/wrongArgument.out b/compiler/testData/cli/wrongArgument.out index 5435afc50af..b722b4033e5 100644 --- a/compiler/testData/cli/wrongArgument.out +++ b/compiler/testData/cli/wrongArgument.out @@ -8,6 +8,7 @@ Usage: org.jetbrains.jet.cli.jvm.K2JVMCompilerArguments -noJdk [flag] don't include Java runtime into classpath -noStdlib [flag] don't include Kotlin runtime into classpath -noJdkAnnotations [flag] don't include JDK external annotations into classpath + -notNullAssertions [flag] generate not-null assertion after each invokation of method returning not-null -builtins [flag] compile builtin classes (internal) -output [String] output directory -module [String] module to compile