diff --git a/build-tools/build-tools.iml b/build-tools/build-tools.iml
index ee9779446f1..7e88bcace67 100644
--- a/build-tools/build-tools.iml
+++ b/build-tools/build-tools.iml
@@ -22,6 +22,7 @@
+
diff --git a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java
index 2e9678087a6..b753129b86a 100644
--- a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java
+++ b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java
@@ -23,6 +23,7 @@ import org.jetbrains.jet.cli.common.CompilerPlugin;
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
import org.jetbrains.jet.cli.jvm.compiler.*;
import org.jetbrains.jet.cli.common.messages.MessageCollector;
+import org.jetbrains.jet.codegen.BuiltinToJavaTypesMapping;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
@@ -74,7 +75,7 @@ public class BytecodeCompiler {
CompilerSpecialMode.REGULAR);
K2JVMCompileEnvironmentConfiguration
env = new K2JVMCompileEnvironmentConfiguration(environment, MessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR, false,
- BuiltinsScopeExtensionMode.ALL, false);
+ BuiltinsScopeExtensionMode.ALL, false, BuiltinToJavaTypesMapping.ENABLED);
// lets register any compiler plugins
env.getCompilerPlugins().addAll(getCompilerPlugins());
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/BuiltinToJavaTypesMapping.java b/compiler/backend/src/org/jetbrains/jet/codegen/BuiltinToJavaTypesMapping.java
new file mode 100644
index 00000000000..684408b936a
--- /dev/null
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/BuiltinToJavaTypesMapping.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2010-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jetbrains.jet.codegen;
+
+/**
+ * Marks if backend's JetTypeMapper should map built-in types to Java types (e.g., jet.String into java.lang.String).
+ * Disabling is needed for compiling builtins: we want types to be jet.* instead of java.util* to make it possible to load
+ * builtins without JDK.
+ *
+ * @author Evgeny Gerashchenko
+ * @since 7/5/12
+ */
+public enum BuiltinToJavaTypesMapping {
+ ENABLED,
+ DISABLED
+}
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java
index 2d5c4b856ee..94fc1509934 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
-import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.utils.Progress;
@@ -61,11 +60,11 @@ public class GenerationState {
public GenerationState(Project project, ClassBuilderFactory builderFactory, AnalyzeExhaust analyzeExhaust, List files) {
- this(project, builderFactory, Progress.DEAF, analyzeExhaust, files, CompilerSpecialMode.REGULAR);
+ this(project, builderFactory, Progress.DEAF, analyzeExhaust, files, BuiltinToJavaTypesMapping.ENABLED);
}
public GenerationState(Project project, ClassBuilderFactory builderFactory, Progress progress,
- @NotNull AnalyzeExhaust exhaust, @NotNull List files, @NotNull CompilerSpecialMode compilerSpecialMode) {
+ @NotNull AnalyzeExhaust exhaust, @NotNull List files, @NotNull BuiltinToJavaTypesMapping builtinToJavaTypesMapping) {
this.project = project;
this.progress = progress;
this.analyzeExhaust = exhaust;
@@ -73,7 +72,7 @@ public class GenerationState {
this.classBuilderMode = builderFactory.getClassBuilderMode();
this.injector = new InjectorForJvmCodegen(
analyzeExhaust.getBindingContext(),
- this.files, project, compilerSpecialMode, builderFactory.getClassBuilderMode(), this, builderFactory);
+ this.files, project, builtinToJavaTypesMapping, builderFactory.getClassBuilderMode(), this, builderFactory);
}
private void markUsed() {
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
index 9598653883b..bd151bfb576 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
@@ -25,7 +25,10 @@ import org.jetbrains.jet.codegen.signature.JvmMethodParameterKind;
import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
import org.jetbrains.jet.codegen.signature.JvmPropertyAccessorSignature;
import org.jetbrains.jet.lang.descriptors.*;
-import org.jetbrains.jet.lang.psi.*;
+import org.jetbrains.jet.lang.psi.JetClassObject;
+import org.jetbrains.jet.lang.psi.JetClassOrObject;
+import org.jetbrains.jet.lang.psi.JetElement;
+import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
@@ -70,7 +73,7 @@ public class JetTypeMapper {
private JetStandardLibrary standardLibrary1;
public BindingContext bindingContext;
private ClosureAnnotator closureAnnotator;
- private CompilerSpecialMode compilerSpecialMode;
+ private boolean mapBuiltinsToJava;
private ClassBuilderMode classBuilderMode;
@@ -85,8 +88,8 @@ public class JetTypeMapper {
}
@Inject
- public void setCompilerSpecialMode(CompilerSpecialMode compilerSpecialMode) {
- this.compilerSpecialMode = compilerSpecialMode;
+ public void setBuiltinToJavaTypesMapping(BuiltinToJavaTypesMapping builtinToJavaTypesMapping) {
+ mapBuiltinsToJava = builtinToJavaTypesMapping == BuiltinToJavaTypesMapping.ENABLED;
}
@Inject
@@ -404,7 +407,7 @@ public class JetTypeMapper {
Type known = null;
ClassifierDescriptor classifier = jetType.getConstructor().getDeclarationDescriptor();
- if (compilerSpecialMode != CompilerSpecialMode.BUILTINS) {
+ if (mapBuiltinsToJava) {
if (classifier instanceof ClassDescriptor) {
KnownTypeKey key = new KnownTypeKey(DescriptorUtils.getFQName(classifier), jetType.isNullable());
known = knowTypes.get(key);
@@ -422,7 +425,7 @@ public class JetTypeMapper {
throw new IllegalStateException("TRAIT_IMPL is not possible for " + jetType);
}
else if (kind == MapTypeMode.IMPL) {
- if (compilerSpecialMode != CompilerSpecialMode.BUILTINS) {
+ if (mapBuiltinsToJava) {
// TODO: enable and fix tests
//throw new IllegalStateException("must not map known type to IMPL when not compiling builtins: " + jetType);
}
@@ -457,7 +460,7 @@ public class JetTypeMapper {
if (descriptor instanceof ClassDescriptor
&& JetStandardLibraryNames.ARRAY.is((ClassDescriptor) descriptor)
- && compilerSpecialMode != CompilerSpecialMode.BUILTINS) {
+ && mapBuiltinsToJava) {
if (jetType.getArguments().size() != 1) {
throw new UnsupportedOperationException("arrays must have one type argument");
}
@@ -493,7 +496,7 @@ public class JetTypeMapper {
Type asmType;
boolean forceReal;
- if (JetStandardLibraryNames.COMPARABLE.is((ClassDescriptor) descriptor) && compilerSpecialMode != CompilerSpecialMode.BUILTINS) {
+ if (JetStandardLibraryNames.COMPARABLE.is((ClassDescriptor) descriptor) && mapBuiltinsToJava) {
if (jetType.getArguments().size() != 1) {
throw new UnsupportedOperationException("Comparable must have one type argument");
}
@@ -559,7 +562,7 @@ public class JetTypeMapper {
}
private void checkValidType(@NotNull Type type) {
- if (compilerSpecialMode == CompilerSpecialMode.BUILTINS) {
+ if (!mapBuiltinsToJava) {
String descriptor = type.getDescriptor();
if (descriptor.equals("Ljava/lang/Object;")) {
return;
diff --git a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java
index fecfb61c40c..c50776ed0ac 100644
--- a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java
+++ b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java
@@ -21,7 +21,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import java.util.List;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.codegen.JetTypeMapper;
-import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
+import org.jetbrains.jet.codegen.BuiltinToJavaTypesMapping;
import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.ClosureAnnotator;
import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -36,7 +36,7 @@ public class InjectorForJetTypeMapper {
private final BindingContext bindingContext;
private final List listOfJetFile;
private JetTypeMapper jetTypeMapper;
- private CompilerSpecialMode compilerSpecialMode;
+ private BuiltinToJavaTypesMapping builtinToJavaTypesMapping;
private ClassBuilderMode classBuilderMode;
private ClosureAnnotator closureAnnotator;
@@ -47,14 +47,14 @@ public class InjectorForJetTypeMapper {
this.bindingContext = bindingContext;
this.listOfJetFile = listOfJetFile;
this.jetTypeMapper = new JetTypeMapper();
- this.compilerSpecialMode = CompilerSpecialMode.REGULAR;
+ this.builtinToJavaTypesMapping = BuiltinToJavaTypesMapping.ENABLED;
this.classBuilderMode = ClassBuilderMode.FULL;
this.closureAnnotator = new ClosureAnnotator();
this.jetTypeMapper.setBindingContext(bindingContext);
+ this.jetTypeMapper.setBuiltinToJavaTypesMapping(builtinToJavaTypesMapping);
this.jetTypeMapper.setClassBuilderMode(classBuilderMode);
this.jetTypeMapper.setClosureAnnotator(closureAnnotator);
- this.jetTypeMapper.setCompilerSpecialMode(compilerSpecialMode);
closureAnnotator.setBindingContext(bindingContext);
closureAnnotator.setFiles(listOfJetFile);
diff --git a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java
index 63b256b3f80..ece1021f6c3 100644
--- a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java
+++ b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java
@@ -21,7 +21,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import java.util.List;
import org.jetbrains.jet.lang.psi.JetFile;
import com.intellij.openapi.project.Project;
-import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
+import org.jetbrains.jet.codegen.BuiltinToJavaTypesMapping;
import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.GenerationState;
import org.jetbrains.jet.codegen.ClassBuilderFactory;
@@ -36,7 +36,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import java.util.List;
import org.jetbrains.jet.lang.psi.JetFile;
import com.intellij.openapi.project.Project;
-import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
+import org.jetbrains.jet.codegen.BuiltinToJavaTypesMapping;
import org.jetbrains.jet.codegen.ClassBuilderMode;
import org.jetbrains.jet.codegen.GenerationState;
import org.jetbrains.jet.codegen.ClassBuilderFactory;
@@ -49,7 +49,7 @@ public class InjectorForJvmCodegen {
private final BindingContext bindingContext;
private final List listOfJetFile;
private final Project project;
- private final CompilerSpecialMode compilerSpecialMode;
+ private final BuiltinToJavaTypesMapping builtinToJavaTypesMapping;
private final ClassBuilderMode classBuilderMode;
private final GenerationState generationState;
private final ClassBuilderFactory classBuilderFactory;
@@ -65,7 +65,7 @@ public class InjectorForJvmCodegen {
@NotNull BindingContext bindingContext,
@NotNull List listOfJetFile,
@NotNull Project project,
- @NotNull CompilerSpecialMode compilerSpecialMode,
+ @NotNull BuiltinToJavaTypesMapping builtinToJavaTypesMapping,
@NotNull ClassBuilderMode classBuilderMode,
@NotNull GenerationState generationState,
@NotNull ClassBuilderFactory classBuilderFactory
@@ -73,7 +73,7 @@ public class InjectorForJvmCodegen {
this.bindingContext = bindingContext;
this.listOfJetFile = listOfJetFile;
this.project = project;
- this.compilerSpecialMode = compilerSpecialMode;
+ this.builtinToJavaTypesMapping = builtinToJavaTypesMapping;
this.classBuilderMode = classBuilderMode;
this.generationState = generationState;
this.classBuilderFactory = classBuilderFactory;
@@ -86,9 +86,9 @@ public class InjectorForJvmCodegen {
this.closureAnnotator = new ClosureAnnotator();
this.jetTypeMapper.setBindingContext(bindingContext);
+ this.jetTypeMapper.setBuiltinToJavaTypesMapping(builtinToJavaTypesMapping);
this.jetTypeMapper.setClassBuilderMode(classBuilderMode);
this.jetTypeMapper.setClosureAnnotator(closureAnnotator);
- this.jetTypeMapper.setCompilerSpecialMode(compilerSpecialMode);
this.classCodegen.setJetTypeMapper(jetTypeMapper);
this.classCodegen.setState(generationState);
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 545479bb103..cf24dfa5ebb 100644
--- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java
+++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java
@@ -29,6 +29,7 @@ import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.cli.jvm.compiler.K2JVMCompileEnvironmentConfiguration;
import org.jetbrains.jet.cli.jvm.compiler.KotlinToJVMBytecodeCompiler;
import org.jetbrains.jet.cli.jvm.repl.ReplFromTerminal;
+import org.jetbrains.jet.codegen.BuiltinToJavaTypesMapping;
import org.jetbrains.jet.codegen.CompilationException;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
@@ -72,9 +73,10 @@ public class K2JVMCompiler extends CLICompiler plugins = configuration.getCompilerPlugins();
diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java
index 8a815969dc5..115168c0365 100644
--- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java
+++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java
@@ -35,6 +35,7 @@ import org.jetbrains.jet.cli.common.messages.MessageCollector;
import org.jetbrains.jet.cli.common.messages.MessageCollectorToString;
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
+import org.jetbrains.jet.codegen.BuiltinToJavaTypesMapping;
import org.jetbrains.jet.codegen.ClassBuilderFactories;
import org.jetbrains.jet.codegen.CompilationErrorHandler;
import org.jetbrains.jet.codegen.GenerationState;
@@ -239,7 +240,7 @@ public class ReplInterpreter {
GenerationState generationState = new GenerationState(jetCoreEnvironment.getProject(), ClassBuilderFactories.binaries(false), backendProgress,
AnalyzeExhaust.success(trace.getBindingContext()), Collections.singletonList(psiFile),
- jetCoreEnvironment.getCompilerSpecialMode());
+ BuiltinToJavaTypesMapping.ENABLED);
generationState.compileScript(psiFile.getScript(), scriptClassName, earierScripts, CompilationErrorHandler.THROW_EXCEPTION);
for (String file : generationState.getFactory().files()) {
diff --git a/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java b/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java
index 68287701ec9..43add570c2e 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/CompileTextTest.java
@@ -29,7 +29,8 @@ public class CompileTextTest extends CodegenTestCase {
createEnvironmentWithMockJdkAndIdeaAnnotations();
String text = "import org.jetbrains.jet.codegen.CompileTextTest; fun x() = CompileTextTest()";
K2JVMCompileEnvironmentConfiguration configuration = new K2JVMCompileEnvironmentConfiguration(
- myEnvironment, MessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR, false, BuiltinsScopeExtensionMode.ALL, false);
+ myEnvironment, MessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR, false, BuiltinsScopeExtensionMode.ALL, false,
+ BuiltinToJavaTypesMapping.ENABLED);
configuration.getEnvironment().addToClasspathFromClassLoader(getClass().getClassLoader());
ClassLoader classLoader = KotlinToJVMBytecodeCompiler.compileText(configuration, text);
Class> namespace = classLoader.loadClass("namespace");
diff --git a/compiler/tests/org/jetbrains/jet/codegen/TestlibTest.java b/compiler/tests/org/jetbrains/jet/codegen/TestlibTest.java
index 6c018abc32a..ea1dc994fe7 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/TestlibTest.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/TestlibTest.java
@@ -86,7 +86,8 @@ public class TestlibTest extends CodegenTestCase {
GenerationState generationState = KotlinToJVMBytecodeCompiler
.analyzeAndGenerate(new K2JVMCompileEnvironmentConfiguration(myEnvironment, MessageCollector.PLAIN_TEXT_TO_SYSTEM_ERR,
- false, BuiltinsScopeExtensionMode.ALL, false), false);
+ false, BuiltinsScopeExtensionMode.ALL, false,
+ BuiltinToJavaTypesMapping.ENABLED), false);
if (generationState == null) {
throw new RuntimeException("There were compilation errors");
diff --git a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java
index 5cdf657cd5c..fdea14e34e7 100644
--- a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java
+++ b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java
@@ -25,7 +25,10 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
-import org.jetbrains.jet.lang.resolve.java.*;
+import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration;
+import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
+import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
+import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
@@ -167,7 +170,7 @@ public class AllInjectorsGenerator {
generator.addParameter(BindingContext.class);
generator.addParameter(DiType.listOf(JetFile.class));
generator.addParameter(Project.class);
- generator.addParameter(CompilerSpecialMode.class);
+ generator.addParameter(BuiltinToJavaTypesMapping.class);
generator.addParameter(ClassBuilderMode.class);
generator.addPublicParameter(GenerationState.class);
generator.addParameter(ClassBuilderFactory.class);
@@ -186,7 +189,7 @@ public class AllInjectorsGenerator {
generator.addParameter(BindingContext.class);
generator.addParameter(DiType.listOf(JetFile.class));
generator.addPublicField(JetTypeMapper.class);
- generator.addField(CompilerSpecialMode.REGULAR);
+ generator.addField(BuiltinToJavaTypesMapping.ENABLED);
generator.addField(ClassBuilderMode.FULL);
generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJetTypeMapper");
}