diff --git a/.idea/artifacts/KotlinPlugin.xml b/.idea/artifacts/KotlinPlugin.xml
index 7955ac2d7a5..3626e8552d8 100644
--- a/.idea/artifacts/KotlinPlugin.xml
+++ b/.idea/artifacts/KotlinPlugin.xml
@@ -20,7 +20,7 @@
-
+
diff --git a/.idea/libraries/guice_3_0.xml b/.idea/libraries/guice_3_0.xml
deleted file mode 100644
index 1bcbd091a52..00000000000
--- a/.idea/libraries/guice_3_0.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/javax_inject.xml b/.idea/libraries/javax_inject.xml
new file mode 100644
index 00000000000..19231028824
--- /dev/null
+++ b/.idea/libraries/javax_inject.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index c4b1ed5b609..94213936f8b 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -12,6 +12,7 @@
+
diff --git a/compiler/frontend/frontend.iml b/compiler/frontend/frontend.iml
index 101a5d558b7..8d22f8caf8f 100644
--- a/compiler/frontend/frontend.iml
+++ b/compiler/frontend/frontend.iml
@@ -8,7 +8,7 @@
-
+
diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java
new file mode 100644
index 00000000000..986a6ffb77a
--- /dev/null
+++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2000-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.di;
+
+import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
+import com.intellij.openapi.project.Project;
+import org.jetbrains.jet.lang.resolve.DescriptorResolver;
+import org.jetbrains.jet.lang.resolve.TypeResolver;
+import org.jetbrains.jet.lang.resolve.AnnotationResolver;
+import org.jetbrains.jet.lang.resolve.calls.CallResolver;
+import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
+import com.intellij.openapi.project.Project;
+
+/* This file is generated by org.jetbrains.jet.di.InjectorGenerator. DO NOT EDIT! */
+public class InjectorForMacros {
+
+ private ExpressionTypingServices expressionTypingServices;
+ private final Project project;
+
+ public InjectorForMacros(
+ Project project
+ ) {
+ this.expressionTypingServices = new ExpressionTypingServices();
+ this.project = project;
+ DescriptorResolver descriptorResolver = new DescriptorResolver();
+ TypeResolver typeResolver = new TypeResolver();
+ AnnotationResolver annotationResolver = new AnnotationResolver();
+ CallResolver callResolver = new CallResolver();
+ OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
+
+ this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
+ this.expressionTypingServices.setCallResolver(callResolver);
+ this.expressionTypingServices.setTypeResolver(typeResolver);
+ this.expressionTypingServices.setProject(project);
+
+ descriptorResolver.setExpressionTypingServices(expressionTypingServices);
+ descriptorResolver.setTypeResolver(typeResolver);
+ descriptorResolver.setAnnotationResolver(annotationResolver);
+
+ typeResolver.setDescriptorResolver(descriptorResolver);
+ typeResolver.setAnnotationResolver(annotationResolver);
+
+ annotationResolver.setExpressionTypingServices(expressionTypingServices);
+ annotationResolver.setCallResolver(callResolver);
+
+ callResolver.setDescriptorResolver(descriptorResolver);
+ callResolver.setExpressionTypingServices(expressionTypingServices);
+ callResolver.setTypeResolver(typeResolver);
+ callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
+
+ }
+
+ public ExpressionTypingServices getExpressionTypingServices() {
+ return this.expressionTypingServices;
+ }
+
+ public Project getProject() {
+ return this.project;
+ }
+
+}
diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzer.java
new file mode 100644
index 00000000000..d6eb48dc820
--- /dev/null
+++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzer.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2000-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.di;
+
+import com.intellij.openapi.project.Project;
+import org.jetbrains.jet.lang.ModuleConfiguration;
+import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
+import org.jetbrains.jet.lang.resolve.*;
+import org.jetbrains.jet.lang.resolve.calls.CallResolver;
+import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
+import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
+
+/* This file is generated by org.jetbrains.jet.di.InjectorGenerator. DO NOT EDIT! */
+public class InjectorForTopDownAnalyzer {
+
+ private TopDownAnalyzer topDownAnalyzer;
+ private BodyResolver bodyResolver;
+ private ControlFlowAnalyzer controlFlowAnalyzer;
+ private DeclarationsChecker declarationsChecker;
+ private DescriptorResolver descriptorResolver;
+ private ExpressionTypingServices expressionTypingServices;
+ private final Project project;
+
+ public InjectorForTopDownAnalyzer(
+ Project project,
+ TopDownAnalysisContext topDownAnalysisContext,
+ ModuleConfiguration moduleConfiguration,
+ JetControlFlowDataTraceFactory jetControlFlowDataTraceFactory,
+ boolean analyzingBootstrapLibrary
+ ) {
+ this.topDownAnalyzer = new TopDownAnalyzer();
+ this.bodyResolver = new BodyResolver();
+ this.controlFlowAnalyzer = new ControlFlowAnalyzer();
+ this.declarationsChecker = new DeclarationsChecker();
+ this.descriptorResolver = new DescriptorResolver();
+ this.expressionTypingServices = new ExpressionTypingServices();
+ this.project = project;
+ DeclarationResolver declarationResolver = new DeclarationResolver();
+ AnnotationResolver annotationResolver = new AnnotationResolver();
+ CallResolver callResolver = new CallResolver();
+ TypeResolver typeResolver = new TypeResolver();
+ OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
+ ImportsResolver importsResolver = new ImportsResolver();
+ TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver();
+ DelegationResolver delegationResolver = new DelegationResolver();
+ OverrideResolver overrideResolver = new OverrideResolver();
+ OverloadResolver overloadResolver = new OverloadResolver();
+
+ this.topDownAnalyzer.setDeclarationResolver(declarationResolver);
+ this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
+ this.topDownAnalyzer.setDelegationResolver(delegationResolver);
+ this.topDownAnalyzer.setOverrideResolver(overrideResolver);
+ this.topDownAnalyzer.setOverloadResolver(overloadResolver);
+
+ this.bodyResolver.setContext(topDownAnalysisContext);
+ this.bodyResolver.setDescriptorResolver(descriptorResolver);
+ this.bodyResolver.setExpressionTypingServices(expressionTypingServices);
+ this.bodyResolver.setCallResolver(callResolver);
+
+ this.controlFlowAnalyzer.setContext(topDownAnalysisContext);
+ this.controlFlowAnalyzer.setFlowDataTraceFactory(jetControlFlowDataTraceFactory);
+
+ this.declarationsChecker.setContext(topDownAnalysisContext);
+
+ this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
+ this.descriptorResolver.setTypeResolver(typeResolver);
+ this.descriptorResolver.setAnnotationResolver(annotationResolver);
+
+ this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
+ this.expressionTypingServices.setCallResolver(callResolver);
+ this.expressionTypingServices.setTypeResolver(typeResolver);
+ this.expressionTypingServices.setProject(project);
+
+ declarationResolver.setContext(topDownAnalysisContext);
+ declarationResolver.setDescriptorResolver(descriptorResolver);
+ declarationResolver.setAnnotationResolver(annotationResolver);
+ declarationResolver.setImportsResolver(importsResolver);
+
+ annotationResolver.setExpressionTypingServices(expressionTypingServices);
+ annotationResolver.setCallResolver(callResolver);
+
+ callResolver.setDescriptorResolver(descriptorResolver);
+ callResolver.setExpressionTypingServices(expressionTypingServices);
+ callResolver.setTypeResolver(typeResolver);
+ callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
+
+ typeResolver.setDescriptorResolver(descriptorResolver);
+ typeResolver.setAnnotationResolver(annotationResolver);
+
+ importsResolver.setContext(topDownAnalysisContext);
+ importsResolver.setConfiguration(moduleConfiguration);
+
+ typeHierarchyResolver.setContext(topDownAnalysisContext);
+ typeHierarchyResolver.setDescriptorResolver(descriptorResolver);
+ typeHierarchyResolver.setImportsResolver(importsResolver);
+ typeHierarchyResolver.setConfiguration(moduleConfiguration);
+
+ delegationResolver.setContext(topDownAnalysisContext);
+
+ overrideResolver.setContext(topDownAnalysisContext);
+
+ overloadResolver.setContext(topDownAnalysisContext);
+
+ }
+
+ public TopDownAnalyzer getTopDownAnalyzer() {
+ return this.topDownAnalyzer;
+ }
+
+ public BodyResolver getBodyResolver() {
+ return this.bodyResolver;
+ }
+
+ public ControlFlowAnalyzer getControlFlowAnalyzer() {
+ return this.controlFlowAnalyzer;
+ }
+
+ public DeclarationsChecker getDeclarationsChecker() {
+ return this.declarationsChecker;
+ }
+
+ public DescriptorResolver getDescriptorResolver() {
+ return this.descriptorResolver;
+ }
+
+ public ExpressionTypingServices getExpressionTypingServices() {
+ return this.expressionTypingServices;
+ }
+
+ public Project getProject() {
+ return this.project;
+ }
+
+}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java
index a4f9d2d8f37..13e57d32bb8 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java
@@ -18,45 +18,11 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import com.google.inject.Inject;
import com.intellij.psi.PsiElement;
import com.intellij.util.containers.Queue;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
-import org.jetbrains.jet.lang.descriptors.ClassKind;
-import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
-import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
-import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
-import org.jetbrains.jet.lang.descriptors.FunctionDescriptorUtil;
-import org.jetbrains.jet.lang.descriptors.MutableClassDescriptor;
-import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
-import org.jetbrains.jet.lang.descriptors.PropertyGetterDescriptor;
-import org.jetbrains.jet.lang.descriptors.PropertySetterDescriptor;
-import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
-import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
-import org.jetbrains.jet.lang.psi.JetClass;
-import org.jetbrains.jet.lang.psi.JetClassInitializer;
-import org.jetbrains.jet.lang.psi.JetClassOrObject;
-import org.jetbrains.jet.lang.psi.JetDeclarationWithBody;
-import org.jetbrains.jet.lang.psi.JetDelegationSpecifier;
-import org.jetbrains.jet.lang.psi.JetDelegatorByExpressionSpecifier;
-import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall;
-import org.jetbrains.jet.lang.psi.JetDelegatorToSuperClass;
-import org.jetbrains.jet.lang.psi.JetDelegatorToThisCall;
-import org.jetbrains.jet.lang.psi.JetElement;
-import org.jetbrains.jet.lang.psi.JetEnumEntry;
-import org.jetbrains.jet.lang.psi.JetExpression;
-import org.jetbrains.jet.lang.psi.JetNamedFunction;
-import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
-import org.jetbrains.jet.lang.psi.JetParameter;
-import org.jetbrains.jet.lang.psi.JetProperty;
-import org.jetbrains.jet.lang.psi.JetPropertyAccessor;
-import org.jetbrains.jet.lang.psi.JetReferenceExpression;
-import org.jetbrains.jet.lang.psi.JetSecondaryConstructor;
-import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
-import org.jetbrains.jet.lang.psi.JetTypeReference;
-import org.jetbrains.jet.lang.psi.JetValueArgumentList;
-import org.jetbrains.jet.lang.psi.JetVisitorVoid;
+import org.jetbrains.jet.lang.descriptors.*;
+import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.calls.CallMaker;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.OverloadResolutionResults;
@@ -65,11 +31,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
-import org.jetbrains.jet.lang.types.DeferredType;
-import org.jetbrains.jet.lang.types.ErrorUtils;
-import org.jetbrains.jet.lang.types.JetType;
-import org.jetbrains.jet.lang.types.TypeConstructor;
-import org.jetbrains.jet.lang.types.TypeUtils;
+import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
@@ -78,29 +40,10 @@ import org.jetbrains.jet.util.Box;
import org.jetbrains.jet.util.lazy.ReenteringLazyValueComputationException;
import org.jetbrains.jet.util.slicedmap.WritableSlice;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import javax.inject.Inject;
+import java.util.*;
-import static org.jetbrains.jet.lang.diagnostics.Errors.ANONYMOUS_INITIALIZER_WITHOUT_CONSTRUCTOR;
-import static org.jetbrains.jet.lang.diagnostics.Errors.BY_IN_SECONDARY_CONSTRUCTOR;
-import static org.jetbrains.jet.lang.diagnostics.Errors.CONSTRUCTOR_IN_TRAIT;
-import static org.jetbrains.jet.lang.diagnostics.Errors.DELEGATION_IN_TRAIT;
-import static org.jetbrains.jet.lang.diagnostics.Errors.DELEGATION_NOT_TO_TRAIT;
-import static org.jetbrains.jet.lang.diagnostics.Errors.FINAL_SUPERTYPE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.INITIALIZER_WITH_NO_ARGUMENTS;
-import static org.jetbrains.jet.lang.diagnostics.Errors.MANY_CALLS_TO_THIS;
-import static org.jetbrains.jet.lang.diagnostics.Errors.MANY_CLASSES_IN_SUPERTYPE_LIST;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SECONDARY_CONSTRUCTOR_BUT_NO_PRIMARY;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SECONDARY_CONSTRUCTOR_NO_INITIALIZER_LIST;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SUPERTYPE_APPEARS_TWICE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SUPERTYPE_INITIALIZED_IN_TRAIT;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SUPERTYPE_NOT_A_CLASS_OR_TRAIT;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SUPERTYPE_NOT_INITIALIZED;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SUPERTYPE_NOT_INITIALIZED_DEFAULT;
-import static org.jetbrains.jet.lang.diagnostics.Errors.TYPE_MISMATCH;
+import static org.jetbrains.jet.lang.diagnostics.Errors.*;
import static org.jetbrains.jet.lang.resolve.BindingContext.DEFERRED_TYPE;
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java
index 26734c16bef..02f4992869a 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ControlFlowAnalyzer.java
@@ -16,17 +16,17 @@
package org.jetbrains.jet.lang.resolve;
-import com.google.inject.Inject;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.cfg.JetFlowInformationProvider;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
-import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyAccessorDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
+import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
import org.jetbrains.jet.lang.psi.*;
-import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lang.types.JetType;
+import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
+import javax.inject.Inject;
import java.util.Map;
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java
index bc9dd996319..9ea55496591 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java
@@ -16,31 +16,13 @@
package org.jetbrains.jet.lang.resolve;
-import com.google.inject.Inject;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.jet.lang.descriptors.ClassKind;
-import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
-import org.jetbrains.jet.lang.descriptors.MutableClassDescriptor;
-import org.jetbrains.jet.lang.descriptors.MutableClassDescriptorLite;
-import org.jetbrains.jet.lang.descriptors.NamespaceLike;
-import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
-import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
-import org.jetbrains.jet.lang.psi.JetClass;
-import org.jetbrains.jet.lang.psi.JetClassOrObject;
-import org.jetbrains.jet.lang.psi.JetDeclaration;
-import org.jetbrains.jet.lang.psi.JetEnumEntry;
-import org.jetbrains.jet.lang.psi.JetFile;
-import org.jetbrains.jet.lang.psi.JetModifierList;
-import org.jetbrains.jet.lang.psi.JetNamedFunction;
-import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
-import org.jetbrains.jet.lang.psi.JetParameter;
-import org.jetbrains.jet.lang.psi.JetParameterList;
-import org.jetbrains.jet.lang.psi.JetProperty;
-import org.jetbrains.jet.lang.psi.JetSecondaryConstructor;
-import org.jetbrains.jet.lang.psi.JetVisitorVoid;
+import org.jetbrains.jet.lang.descriptors.*;
+import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
+import javax.inject.Inject;
import java.util.List;
import java.util.Map;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java
index 780bc2abeea..b9dbd071704 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java
@@ -19,12 +19,12 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import com.google.inject.Inject;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import javax.inject.Inject;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.*;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java
index a5629951103..730b80bd1cd 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegationResolver.java
@@ -16,12 +16,12 @@
package org.jetbrains.jet.lang.resolve;
-import com.google.inject.Inject;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.types.JetType;
+import javax.inject.Inject;
import java.util.Map;
import static org.jetbrains.jet.lang.resolve.BindingContext.DELEGATED;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java
index b38c0682612..a31c7ec8511 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java
@@ -18,73 +18,22 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import com.google.inject.Inject;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
-import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
-import org.jetbrains.jet.lang.descriptors.ClassKind;
-import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
-import org.jetbrains.jet.lang.descriptors.ConstructorDescriptorImpl;
-import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
-import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
-import org.jetbrains.jet.lang.descriptors.LocalVariableDescriptor;
-import org.jetbrains.jet.lang.descriptors.Modality;
-import org.jetbrains.jet.lang.descriptors.MutableClassDescriptor;
-import org.jetbrains.jet.lang.descriptors.MutableValueParameterDescriptor;
-import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
-import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
-import org.jetbrains.jet.lang.descriptors.PropertyGetterDescriptor;
-import org.jetbrains.jet.lang.descriptors.PropertySetterDescriptor;
-import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
-import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptorImpl;
-import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
-import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
-import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptorImpl;
-import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
-import org.jetbrains.jet.lang.descriptors.VariableDescriptorImpl;
-import org.jetbrains.jet.lang.descriptors.Visibility;
+import javax.inject.Inject;
+import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
-import org.jetbrains.jet.lang.psi.JetClass;
-import org.jetbrains.jet.lang.psi.JetClassOrObject;
-import org.jetbrains.jet.lang.psi.JetDeclaration;
-import org.jetbrains.jet.lang.psi.JetDelegationSpecifier;
-import org.jetbrains.jet.lang.psi.JetEnumEntry;
-import org.jetbrains.jet.lang.psi.JetExpression;
-import org.jetbrains.jet.lang.psi.JetModifierList;
-import org.jetbrains.jet.lang.psi.JetNamedFunction;
-import org.jetbrains.jet.lang.psi.JetNullableType;
-import org.jetbrains.jet.lang.psi.JetObjectDeclarationName;
-import org.jetbrains.jet.lang.psi.JetParameter;
-import org.jetbrains.jet.lang.psi.JetProjectionKind;
-import org.jetbrains.jet.lang.psi.JetProperty;
-import org.jetbrains.jet.lang.psi.JetPropertyAccessor;
-import org.jetbrains.jet.lang.psi.JetPsiUtil;
-import org.jetbrains.jet.lang.psi.JetSecondaryConstructor;
-import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
-import org.jetbrains.jet.lang.psi.JetTypeConstraint;
-import org.jetbrains.jet.lang.psi.JetTypeElement;
-import org.jetbrains.jet.lang.psi.JetTypeParameter;
-import org.jetbrains.jet.lang.psi.JetTypeParameterListOwner;
-import org.jetbrains.jet.lang.psi.JetTypeProjection;
-import org.jetbrains.jet.lang.psi.JetTypeReference;
-import org.jetbrains.jet.lang.psi.JetUserType;
+import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExtensionReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
-import org.jetbrains.jet.lang.types.DeferredType;
-import org.jetbrains.jet.lang.types.ErrorUtils;
-import org.jetbrains.jet.lang.types.JetType;
-import org.jetbrains.jet.lang.types.TypeProjection;
-import org.jetbrains.jet.lang.types.TypeSubstitutor;
-import org.jetbrains.jet.lang.types.TypeUtils;
-import org.jetbrains.jet.lang.types.Variance;
+import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
@@ -93,29 +42,9 @@ import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.util.lazy.LazyValue;
import org.jetbrains.jet.util.lazy.LazyValueWithDefault;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
-import static org.jetbrains.jet.lang.diagnostics.Errors.ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS;
-import static org.jetbrains.jet.lang.diagnostics.Errors.CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS;
-import static org.jetbrains.jet.lang.diagnostics.Errors.CONFLICTING_UPPER_BOUNDS;
-import static org.jetbrains.jet.lang.diagnostics.Errors.FINAL_CLASS_OBJECT_UPPER_BOUND;
-import static org.jetbrains.jet.lang.diagnostics.Errors.FINAL_UPPER_BOUND;
-import static org.jetbrains.jet.lang.diagnostics.Errors.NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER;
-import static org.jetbrains.jet.lang.diagnostics.Errors.NO_GENERICS_IN_SUPERTYPE_SPECIFIER;
-import static org.jetbrains.jet.lang.diagnostics.Errors.NULLABLE_SUPERTYPE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.PROPERTY_WITH_NO_TYPE_NO_INITIALIZER;
-import static org.jetbrains.jet.lang.diagnostics.Errors.SETTER_PARAMETER_WITH_DEFAULT_VALUE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.UNRESOLVED_REFERENCE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.UPPER_BOUND_VIOLATED;
-import static org.jetbrains.jet.lang.diagnostics.Errors.VALUE_PARAMETER_WITH_NO_TYPE_ANNOTATION;
-import static org.jetbrains.jet.lang.diagnostics.Errors.VAL_WITH_SETTER;
-import static org.jetbrains.jet.lang.diagnostics.Errors.WRONG_GETTER_RETURN_TYPE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.WRONG_SETTER_PARAMETER_TYPE;
+import static org.jetbrains.jet.lang.diagnostics.Errors.*;
/**
* @author abreslav
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java
index 6d5501dbfcd..fb95ad6ac39 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java
@@ -20,9 +20,9 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import com.google.inject.Inject;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import javax.inject.Inject;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java
index 3d42fb34cbe..b38f5a6eff7 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java
@@ -16,10 +16,10 @@
package org.jetbrains.jet.lang.resolve;
-import com.google.inject.Inject;
import com.intellij.openapi.util.Pair;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
+import javax.inject.Inject;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.JetClass;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java
index d85736c36b4..ee65768f7f6 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java
@@ -19,11 +19,12 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
-import com.google.inject.Inject;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
+import com.intellij.util.containers.LinkedMultiMap;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
+import javax.inject.Inject;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.*;
@@ -32,7 +33,6 @@ import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.util.CommonSuppliers;
-import com.intellij.util.containers.LinkedMultiMap;
import java.util.*;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java
index 2a55ea20dd4..f6bb8c62eb0 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisContext.java
@@ -19,27 +19,16 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.base.Predicate;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.jet.di.InjectorForTopDownAnalyzer;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
-import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
-import org.jetbrains.jet.lang.descriptors.MutableClassDescriptor;
-import org.jetbrains.jet.lang.descriptors.NamespaceDescriptorImpl;
-import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
-import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
-import org.jetbrains.jet.lang.psi.JetClass;
-import org.jetbrains.jet.lang.psi.JetDeclaration;
-import org.jetbrains.jet.lang.psi.JetFile;
-import org.jetbrains.jet.lang.psi.JetNamedFunction;
-import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
-import org.jetbrains.jet.lang.psi.JetProperty;
-import org.jetbrains.jet.lang.psi.JetSecondaryConstructor;
+import org.jetbrains.jet.lang.descriptors.*;
+import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
@@ -71,7 +60,7 @@ public class TopDownAnalysisContext {
private final boolean analyzingBootstrapLibrary;
private boolean declaredLocally;
- private final Injector injector;
+ private final InjectorForTopDownAnalyzer injector;
public TopDownAnalysisContext(
final Project project,
@@ -87,16 +76,7 @@ public class TopDownAnalysisContext {
"jetControlFlowDataTraceFactory must not be passed when analyzingBootstrapLibrary and vice versa");
}
- injector = Guice.createInjector(new TopDownAnalysisModule(project, analyzingBootstrapLibrary) {
- @Override
- protected void configureAfter() {
- bind(TopDownAnalysisContext.class).toInstance(TopDownAnalysisContext.this);
- bind(ModuleConfiguration.class).toInstance(configuration);
- if (jetControlFlowDataTraceFactory != null) {
- bind(JetControlFlowDataTraceFactory.class).toInstance(jetControlFlowDataTraceFactory);
- }
- }
- });
+ this.injector = new InjectorForTopDownAnalyzer(project, this, configuration, jetControlFlowDataTraceFactory, analyzingBootstrapLibrary);
this.trace = new ObservableBindingTrace(trace);
this.analyzeCompletely = analyzeCompletely;
@@ -104,7 +84,7 @@ public class TopDownAnalysisContext {
this.analyzingBootstrapLibrary = analyzingBootstrapLibrary;
}
- public Injector getInjector() {
+ public InjectorForTopDownAnalyzer getInjector() {
return injector;
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisModule.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisModule.java
deleted file mode 100644
index 6c8bfecc7f1..00000000000
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalysisModule.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2000-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.lang.resolve;
-
-import com.google.inject.AbstractModule;
-import com.intellij.openapi.project.Project;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
-
-/**
- * @author Stepan Koltsov
- */
-public abstract class TopDownAnalysisModule extends AbstractModule {
-
- @NotNull
- private final Project project;
- private final boolean analyzingStdlib;
-
- protected TopDownAnalysisModule(@NotNull Project project, boolean analyzingStdlib) {
- this.project = project;
- this.analyzingStdlib = analyzingStdlib;
- }
-
- @Override
- protected final void configure() {
- binder().disableCircularProxies();
-
- bind(Project.class).toInstance(project);
-
- if (!analyzingStdlib) {
- // TODO: move outside
- JetStandardLibrary.initialize(project);
- bind(JetStandardLibrary.class).toInstance(JetStandardLibrary.getInstance());
- }
-
- configureAfter();
- }
-
- protected abstract void configureAfter();
-}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
index ac3a4b22d9e..029f6d2edf5 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
@@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
-import com.google.inject.Inject;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -32,6 +31,7 @@ import org.jetbrains.jet.lang.psi.JetObjectDeclaration;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
+import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -104,7 +104,7 @@ public class TopDownAnalyzer {
@NotNull ModuleConfiguration configuration,
boolean declaredLocally) {
TopDownAnalysisContext context = new TopDownAnalysisContext(project, trace, analyzeCompletely, configuration, declaredLocally, false, flowDataTraceFactory);
- context.getInjector().getInstance(TopDownAnalyzer.class).doProcess(context, outerScope, owner, declarations);
+ context.getInjector().getTopDownAnalyzer().doProcess(context, outerScope, owner, declarations);
}
@@ -125,9 +125,9 @@ public class TopDownAnalyzer {
overloadResolver.process();
if (!context.analyzingBootstrapLibrary()) {
- context.getInjector().getInstance(BodyResolver.class).resolveBehaviorDeclarationBodies();
- context.getInjector().getInstance(ControlFlowAnalyzer.class).process();
- context.getInjector().getInstance(DeclarationsChecker.class).process();
+ context.getInjector().getBodyResolver().resolveBehaviorDeclarationBodies();
+ context.getInjector().getControlFlowAnalyzer().process();
+ context.getInjector().getDeclarationsChecker().process();
}
context.debug("Exit");
@@ -153,7 +153,7 @@ public class TopDownAnalyzer {
@NotNull WritableScope outerScope,
@NotNull NamespaceDescriptorImpl standardLibraryNamespace,
@NotNull List files) {
- TopDownAnalysisContext context = new TopDownAnalysisContext(project, trace, Predicates.alwaysTrue(), ModuleConfiguration.EMPTY, false, true, null);
+ TopDownAnalysisContext context = new TopDownAnalysisContext(project, trace, Predicates.alwaysFalse(), ModuleConfiguration.EMPTY, false, true, null);
ArrayList toAnalyze = new ArrayList();
for(JetFile file : files) {
context.getNamespaceDescriptors().put(file, standardLibraryNamespace);
@@ -162,7 +162,7 @@ public class TopDownAnalyzer {
}
// context.getDeclaringScopes().put(file, outerScope);
- context.getInjector().getInstance(TopDownAnalyzer.class).doProcess(context, outerScope, standardLibraryNamespace, toAnalyze);
+ context.getInjector().getTopDownAnalyzer().doProcess(context, outerScope, standardLibraryNamespace, toAnalyze);
}
public static void processObject(
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java
index 5c8e51724b4..26785bb3372 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java
@@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
-import com.google.inject.Inject;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNameIdentifierOwner;
import org.jetbrains.annotations.NotNull;
@@ -39,6 +38,7 @@ import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lexer.JetTokens;
+import javax.inject.Inject;
import java.util.*;
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
@@ -57,11 +57,9 @@ public class TypeHierarchyResolver {
@NotNull
private ModuleConfiguration configuration;
-
// state
private LinkedList topologicalOrder;
-
@Inject
public void setContext(@NotNull TopDownAnalysisContext context) {
this.context = context;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java
index 509a8be4424..2ba8a78f746 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java
@@ -23,28 +23,10 @@ import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
-import org.jetbrains.jet.lang.psi.JetElement;
-import org.jetbrains.jet.lang.psi.JetFunctionType;
-import org.jetbrains.jet.lang.psi.JetNullableType;
-import org.jetbrains.jet.lang.psi.JetParameter;
-import org.jetbrains.jet.lang.psi.JetProjectionKind;
-import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
-import org.jetbrains.jet.lang.psi.JetTupleType;
-import org.jetbrains.jet.lang.psi.JetTypeElement;
-import org.jetbrains.jet.lang.psi.JetTypeProjection;
-import org.jetbrains.jet.lang.psi.JetTypeReference;
-import org.jetbrains.jet.lang.psi.JetUserType;
-import org.jetbrains.jet.lang.psi.JetVisitorVoid;
+import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.LazyScopeAdapter;
-import org.jetbrains.jet.lang.types.ErrorUtils;
-import org.jetbrains.jet.lang.types.JetType;
-import org.jetbrains.jet.lang.types.JetTypeImpl;
-import org.jetbrains.jet.lang.types.TypeConstructor;
-import org.jetbrains.jet.lang.types.TypeProjection;
-import org.jetbrains.jet.lang.types.TypeSubstitutor;
-import org.jetbrains.jet.lang.types.TypeUtils;
-import org.jetbrains.jet.lang.types.Variance;
+import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.util.lazy.LazyValue;
@@ -53,9 +35,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import static org.jetbrains.jet.lang.diagnostics.Errors.UNRESOLVED_REFERENCE;
-import static org.jetbrains.jet.lang.diagnostics.Errors.UNSUPPORTED;
-import static org.jetbrains.jet.lang.diagnostics.Errors.WRONG_NUMBER_OF_TYPE_ARGUMENTS;
+import static org.jetbrains.jet.lang.diagnostics.Errors.*;
import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
/**
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java
index 6b7f413523c..c695c320db3 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java
@@ -19,10 +19,10 @@ package org.jetbrains.jet.lang.resolve.calls;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import com.google.inject.Inject;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
+import javax.inject.Inject;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.*;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadingConflictResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadingConflictResolver.java
index e04f4559e8d..c04474dac30 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadingConflictResolver.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadingConflictResolver.java
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.TypeUtils;
-import javax.inject.Inject;
import java.util.List;
import java.util.Set;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java
index 82e08041e09..904fb305eb7 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java
@@ -17,7 +17,6 @@
package org.jetbrains.jet.lang.types.expressions;
import com.google.common.collect.Lists;
-import com.google.inject.Inject;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
@@ -37,11 +36,11 @@ import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import org.jetbrains.jet.lang.types.CommonSupertypes;
import org.jetbrains.jet.lang.types.ErrorUtils;
-import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lang.types.JetType;
-import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
+import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lexer.JetTokens;
+import javax.inject.Inject;
import java.util.*;
import static org.jetbrains.jet.lang.diagnostics.Errors.TYPE_MISMATCH;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardLibrary.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardLibrary.java
index 8888d1a0510..4f57f231574 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardLibrary.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardLibrary.java
@@ -70,7 +70,8 @@ public class JetStandardLibrary {
initializing = true;
try {
instance = new JetStandardLibrary(project);
- } catch (Throwable e) {
+ }
+ catch (Throwable e) {
initializationFailed = e;
throw new RuntimeException("builtin library initialization failed: " + e, e);
}
diff --git a/compiler/tests/compiler-tests.iml b/compiler/tests/compiler-tests.iml
index b63d81d0c6a..d3c95e7a65d 100644
--- a/compiler/tests/compiler-tests.iml
+++ b/compiler/tests/compiler-tests.iml
@@ -14,7 +14,6 @@
-
diff --git a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java
new file mode 100644
index 00000000000..3fbc60670b7
--- /dev/null
+++ b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2000-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.di;
+
+import com.intellij.openapi.project.Project;
+import org.jetbrains.jet.lang.resolve.AnnotationResolver;
+import org.jetbrains.jet.lang.resolve.DescriptorResolver;
+import org.jetbrains.jet.lang.resolve.TypeResolver;
+import org.jetbrains.jet.lang.resolve.calls.CallResolver;
+import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
+import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
+import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
+
+/* This file is generated by org.jetbrains.jet.di.InjectorGenerator. DO NOT EDIT! */
+public class InjectorForTests {
+
+ private DescriptorResolver descriptorResolver;
+ private ExpressionTypingServices expressionTypingServices;
+ private TypeResolver typeResolver;
+ private CallResolver callResolver;
+ private JetStandardLibrary jetStandardLibrary;
+ private final Project project;
+
+ public InjectorForTests(
+ Project project
+ ) {
+ this.descriptorResolver = new DescriptorResolver();
+ this.expressionTypingServices = new ExpressionTypingServices();
+ this.typeResolver = new TypeResolver();
+ this.callResolver = new CallResolver();
+ this.jetStandardLibrary = JetStandardLibrary.getInstance();
+ this.project = project;
+ AnnotationResolver annotationResolver = new AnnotationResolver();
+ OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
+
+ this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
+ this.descriptorResolver.setTypeResolver(typeResolver);
+ this.descriptorResolver.setAnnotationResolver(annotationResolver);
+
+ this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
+ this.expressionTypingServices.setCallResolver(callResolver);
+ this.expressionTypingServices.setTypeResolver(typeResolver);
+ this.expressionTypingServices.setProject(project);
+
+ this.typeResolver.setDescriptorResolver(descriptorResolver);
+ this.typeResolver.setAnnotationResolver(annotationResolver);
+
+ this.callResolver.setDescriptorResolver(descriptorResolver);
+ this.callResolver.setExpressionTypingServices(expressionTypingServices);
+ this.callResolver.setTypeResolver(typeResolver);
+ this.callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
+
+ annotationResolver.setExpressionTypingServices(expressionTypingServices);
+ annotationResolver.setCallResolver(callResolver);
+
+ }
+
+ public DescriptorResolver getDescriptorResolver() {
+ return this.descriptorResolver;
+ }
+
+ public ExpressionTypingServices getExpressionTypingServices() {
+ return this.expressionTypingServices;
+ }
+
+ public TypeResolver getTypeResolver() {
+ return this.typeResolver;
+ }
+
+ public CallResolver getCallResolver() {
+ return this.callResolver;
+ }
+
+ public JetStandardLibrary getJetStandardLibrary() {
+ return this.jetStandardLibrary;
+ }
+
+ public Project getProject() {
+ return this.project;
+ }
+
+}
diff --git a/compiler/tests/org/jetbrains/jet/resolve/JetResolveTest.java b/compiler/tests/org/jetbrains/jet/resolve/JetResolveTest.java
index 528246b6b22..b6aed150017 100644
--- a/compiler/tests/org/jetbrains/jet/resolve/JetResolveTest.java
+++ b/compiler/tests/org/jetbrains/jet/resolve/JetResolveTest.java
@@ -16,7 +16,6 @@
package org.jetbrains.jet.resolve;
-import com.google.inject.Guice;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.JavaPsiFacade;
@@ -26,21 +25,21 @@ import com.intellij.psi.PsiMethod;
import junit.framework.Test;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetTestCaseBuilder;
+import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
-import org.jetbrains.jet.lang.resolve.TopDownAnalysisModule;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.OverloadResolutionResults;
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
-import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.TypeProjection;
+import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import org.jetbrains.jet.parsing.JetParsingTest;
import java.io.File;
@@ -134,12 +133,8 @@ public class JetResolveTest extends ExtensibleResolveTestCase {
List parameterTypeList = Arrays.asList(parameterType);
// JetTypeInferrer.Services typeInferrerServices = JetSemanticServices.createSemanticServices(getProject()).getTypeInferrerServices(new BindingTraceContext());
- CallResolver callResolver = Guice.createInjector(new TopDownAnalysisModule(getProject(), false) {
- @Override
- protected void configureAfter() {
- }
- }).getInstance(CallResolver.class);
+ CallResolver callResolver = new InjectorForTests(getProject()).getCallResolver();
OverloadResolutionResults functions = callResolver.resolveExactSignature(
classDescriptor.getMemberScope(typeArguments), ReceiverDescriptor.NO_RECEIVER, name, parameterTypeList);
for (ResolvedCall extends FunctionDescriptor> resolvedCall : functions.getResultingCalls()) {
diff --git a/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java b/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java
index 9f0992c4b09..e74607ea3b3 100644
--- a/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java
+++ b/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java
@@ -16,15 +16,13 @@
package org.jetbrains.jet.types;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import org.jetbrains.jet.JetLiteFixture;
import org.jetbrains.jet.JetTestUtils;
+import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
-import org.jetbrains.jet.lang.resolve.TopDownAnalysisModule;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
@@ -52,13 +50,9 @@ public class JetDefaultModalityModifiersTest extends JetLiteFixture {
private JetScope scope;
public void setUp() throws Exception {
- Injector injector = Guice.createInjector(new TopDownAnalysisModule(getProject(), false) {
- @Override
- protected void configureAfter() {
- }
- });
- JetStandardLibrary library = injector.getInstance(JetStandardLibrary.class);
- descriptorResolver = injector.getInstance(DescriptorResolver.class);
+ InjectorForTests injector = new InjectorForTests(getProject());
+ JetStandardLibrary library = injector.getJetStandardLibrary();
+ descriptorResolver = injector.getDescriptorResolver();
scope = createScope(library.getLibraryScope());
}
diff --git a/compiler/tests/org/jetbrains/jet/types/JetOverloadTest.java b/compiler/tests/org/jetbrains/jet/types/JetOverloadTest.java
index 816c90250b6..104a46b7f2c 100644
--- a/compiler/tests/org/jetbrains/jet/types/JetOverloadTest.java
+++ b/compiler/tests/org/jetbrains/jet/types/JetOverloadTest.java
@@ -16,18 +16,16 @@
package org.jetbrains.jet.types;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import org.jetbrains.jet.JetLiteFixture;
import org.jetbrains.jet.JetTestCaseBuilder;
import org.jetbrains.jet.JetTestUtils;
+import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetNamedFunction;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.OverloadUtil;
-import org.jetbrains.jet.lang.resolve.TopDownAnalysisModule;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
/**
@@ -42,13 +40,9 @@ public class JetOverloadTest extends JetLiteFixture {
@Override
public void setUp() throws Exception {
super.setUp();
- Injector injector = Guice.createInjector(new TopDownAnalysisModule(getProject(), false) {
- @Override
- protected void configureAfter() {
- }
- });
- library = injector.getInstance(JetStandardLibrary.class);
- descriptorResolver = injector.getInstance(DescriptorResolver.class);
+ InjectorForTests injector = new InjectorForTests(getProject());
+ library = injector.getJetStandardLibrary();
+ descriptorResolver = injector.getDescriptorResolver();
}
@Override
diff --git a/compiler/tests/org/jetbrains/jet/types/JetOverridingTest.java b/compiler/tests/org/jetbrains/jet/types/JetOverridingTest.java
index 5fc840dcd5f..d672650459e 100644
--- a/compiler/tests/org/jetbrains/jet/types/JetOverridingTest.java
+++ b/compiler/tests/org/jetbrains/jet/types/JetOverridingTest.java
@@ -16,18 +16,16 @@
package org.jetbrains.jet.types;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import org.jetbrains.jet.JetLiteFixture;
import org.jetbrains.jet.JetTestCaseBuilder;
import org.jetbrains.jet.JetTestUtils;
+import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetNamedFunction;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.OverridingUtil;
-import org.jetbrains.jet.lang.resolve.TopDownAnalysisModule;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
/**
@@ -42,13 +40,9 @@ public class JetOverridingTest extends JetLiteFixture {
@Override
public void setUp() throws Exception {
super.setUp();
- Injector injector = Guice.createInjector(new TopDownAnalysisModule(getProject(), false) {
- @Override
- protected void configureAfter() {
- }
- });
- library = injector.getInstance(JetStandardLibrary.class);
- descriptorResolver = injector.getInstance(DescriptorResolver.class);
+ InjectorForTests injector = new InjectorForTests(getProject());
+ library = injector.getJetStandardLibrary();
+ descriptorResolver = injector.getDescriptorResolver();
}
@Override
diff --git a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java
index 81fedd44e30..99272589fe1 100644
--- a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java
+++ b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java
@@ -17,14 +17,13 @@
package org.jetbrains.jet.types;
import com.google.common.collect.Sets;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetLiteFixture;
import org.jetbrains.jet.JetTestCaseBuilder;
import org.jetbrains.jet.JetTestUtils;
+import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.psi.*;
@@ -36,7 +35,10 @@ import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.scopes.*;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
-import org.jetbrains.jet.lang.types.*;
+import org.jetbrains.jet.lang.types.CommonSupertypes;
+import org.jetbrains.jet.lang.types.ErrorUtils;
+import org.jetbrains.jet.lang.types.JetType;
+import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
@@ -68,15 +70,10 @@ public class JetTypeCheckerTest extends JetLiteFixture {
library = JetStandardLibrary.getInstance();
classDefinitions = new ClassDefinitions();
- Injector injector = Guice.createInjector(new TopDownAnalysisModule(getProject(), false) {
- @Override
- protected void configureAfter() {
- }
- });
- descriptorResolver = injector.getInstance(DescriptorResolver.class);
- descriptorResolver = injector.getInstance(DescriptorResolver.class);
- typeResolver = injector.getInstance(TypeResolver.class);
- expressionTypingServices = injector.getInstance(ExpressionTypingServices.class);
+ InjectorForTests injector = new InjectorForTests(getProject());
+ descriptorResolver = injector.getDescriptorResolver();
+ typeResolver = injector.getTypeResolver();
+ expressionTypingServices = injector.getExpressionTypingServices();
scopeWithImports = addImports(classDefinitions.BASIC_SCOPE);
}
diff --git a/idea/idea.iml b/idea/idea.iml
index a91c6c948a6..99b26f27f32 100644
--- a/idea/idea.iml
+++ b/idea/idea.iml
@@ -27,7 +27,6 @@
-
diff --git a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java
index 9e61c79909e..6979f9188b5 100644
--- a/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java
+++ b/idea/src/org/jetbrains/jet/plugin/liveTemplates/macro/BaseJetVariableMacro.java
@@ -16,7 +16,6 @@
package org.jetbrains.jet.plugin.liveTemplates.macro;
-import com.google.inject.Guice;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.codeInsight.template.Expression;
@@ -31,13 +30,12 @@ import com.intellij.psi.PsiNamedElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.compiler.TipsManager;
+import org.jetbrains.jet.di.InjectorForMacros;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
-import org.jetbrains.jet.lang.resolve.TopDownAnalysisModule;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
-import org.jetbrains.jet.lang.types.expressions.ExpressionTypingContext;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
@@ -70,11 +68,7 @@ public abstract class BaseJetVariableMacro extends Macro {
return null;
}
- ExpressionTypingServices callResolverContext = Guice.createInjector(new TopDownAnalysisModule(project, false) {
- @Override
- protected void configureAfter() {
- }
- }).getInstance(ExpressionTypingServices.class);
+ ExpressionTypingServices callResolverContext = new InjectorForMacros(project).getExpressionTypingServices();
List filteredDescriptors = new ArrayList();
for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) {
diff --git a/injector-generator/copyright.txt b/injector-generator/copyright.txt
new file mode 100644
index 00000000000..427de9e378c
--- /dev/null
+++ b/injector-generator/copyright.txt
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2000-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.
+ */
diff --git a/injector-generator/injector-generator.iml b/injector-generator/injector-generator.iml
new file mode 100644
index 00000000000..715c25f3864
--- /dev/null
+++ b/injector-generator/injector-generator.iml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java
new file mode 100644
index 00000000000..bfc174ce111
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2000-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.di;
+
+import com.intellij.openapi.project.Project;
+import org.jetbrains.jet.lang.ModuleConfiguration;
+import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
+import org.jetbrains.jet.lang.resolve.*;
+import org.jetbrains.jet.lang.resolve.calls.CallResolver;
+import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
+import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
+
+import java.io.IOException;
+
+/**
+* @author abreslav
+*/
+public class AllInjectorsGenerator {
+
+ public static void main(String[] args) throws IOException {
+ generateProductionInjector();
+ generateMacroInjector();
+ generateTestInjector();
+ }
+
+ private static void generateProductionInjector() throws IOException {
+ DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
+
+ // Fields
+ generator.addPublicField(TopDownAnalyzer.class);
+ generator.addPublicField(BodyResolver.class);
+ generator.addPublicField(ControlFlowAnalyzer.class);
+ generator.addPublicField(DeclarationsChecker.class);
+ generator.addPublicField(DescriptorResolver.class);
+ generator.addPublicField(ExpressionTypingServices.class);
+
+ // Parameters
+ generator.addPublicParameter(Project.class);
+ generator.addParameter(TopDownAnalysisContext.class);
+ generator.addParameter(ModuleConfiguration.class);
+ generator.addParameter(JetControlFlowDataTraceFactory.class);
+ generator.addParameter(false, boolean.class, "analyzingBootstrapLibrary");
+
+ generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzer");
+ }
+
+ private static void generateMacroInjector() throws IOException {
+ DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
+
+ // Fields
+ generator.addPublicField(ExpressionTypingServices.class);
+
+ // Parameters
+ generator.addPublicParameter(Project.class);
+
+ generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForMacros");
+ }
+
+ private static void generateTestInjector() throws IOException {
+ DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
+
+ // Fields
+ generator.addPublicField(DescriptorResolver.class);
+ generator.addPublicField(ExpressionTypingServices.class);
+ generator.addPublicField(TypeResolver.class);
+ generator.addPublicField(CallResolver.class);
+ generator.addField(true, JetStandardLibrary.class, null, new GivenExpression("JetStandardLibrary.getInstance()"));
+
+ // Parameters
+ generator.addPublicParameter(Project.class);
+
+ generator.generate("compiler/tests", "org.jetbrains.jet.di", "InjectorForTests");
+ }
+
+}
diff --git a/injector-generator/src/org/jetbrains/jet/di/ConstructorCall.java b/injector-generator/src/org/jetbrains/jet/di/ConstructorCall.java
new file mode 100644
index 00000000000..e411f038df9
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/ConstructorCall.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2000-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.di;
+
+import com.google.common.collect.Lists;
+
+import java.lang.reflect.Constructor;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+* @author abreslav
+*/
+class ConstructorCall implements Expression {
+ private final Constructor> constructor;
+ private final List constructorArguments = Lists.newArrayList();
+
+ ConstructorCall(Constructor> constructor) {
+ this.constructor = constructor;
+ }
+
+ public List getConstructorArguments() {
+ return constructorArguments;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder("new " + constructor.getDeclaringClass().getSimpleName() + "(");
+ for (Iterator iterator = constructorArguments.iterator(); iterator.hasNext(); ) {
+ Field argument = iterator.next();
+ builder.append(argument.getGetterName() + "()");
+ if (iterator.hasNext()) {
+ builder.append(", ");
+ }
+ }
+ builder.append(")");
+ return builder.toString();
+ }
+}
diff --git a/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java b/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java
new file mode 100644
index 00000000000..39971df7656
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java
@@ -0,0 +1,350 @@
+/*
+ * Copyright 2000-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.di;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
+import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.util.text.StringUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+* @author abreslav
+*/
+public class DependencyInjectorGenerator {
+
+ public static final String INDENT_STEP = " ";
+ private static final String LOCK_NAME = "__lock__";
+
+ private final boolean lazy;
+ private final Multimap, Field> typeToField = HashMultimap.create();
+ private final Set satisfied = Sets.newHashSet();
+ private final Set fields = Sets.newLinkedHashSet();
+ private final Set parameters = Sets.newLinkedHashSet();
+
+ private final Set backsParameter = Sets.newHashSet();
+
+ public DependencyInjectorGenerator(boolean lazy) {
+ this.lazy = lazy;
+ }
+
+ public void generate(String targetSourceRoot, String injectorPackageName, String injectorClassName) throws IOException {
+ String outputFileName = targetSourceRoot + "/" + injectorPackageName.replace(".", "/") + "/" + injectorClassName + ".java";
+
+ File file = new File(outputFileName);
+ File parentFile = file.getParentFile();
+ if (!parentFile.exists()) {
+ if (parentFile.mkdirs()) {
+ System.out.println("Directory created: " + parentFile.getAbsolutePath());
+ }
+ else {
+ throw new IllegalStateException("Cannot create directory: " + parentFile);
+ }
+ }
+
+ FileOutputStream fileOutputStream = new FileOutputStream(file);
+ System.out.println("File opened: " + file.getAbsolutePath());
+
+ PrintStream out = new PrintStream(fileOutputStream);
+ try {
+ for (Field field : Lists.newArrayList(fields)) {
+ satisfyDependenciesFor(field, field);
+ }
+
+ String copyright = "injector-generator/copyright.txt";
+ out.println(FileUtil.loadFile(new File(copyright)));
+ out.println();
+
+ out.println("package " + injectorPackageName + ";");
+ out.println();
+
+ generateImports(out, injectorPackageName);
+ out.println();
+
+ out.println("/* This file is generated by " + AllInjectorsGenerator.class.getName() + ". DO NOT EDIT! */");
+ out.println("public class " + injectorClassName + " {");
+// Needed for double-checked locking
+// out.println();
+// out.println(" private static final Object " + LOCK_NAME + " = new Object();");
+ out.println();
+ generateFields(out);
+ out.println();
+ generateConstructor(injectorClassName, out);
+ out.println();
+ generateGetters(out);
+// Needed to fix double-checked locking
+// out.println();
+// generateMakeFunction(out);
+ out.println("}"); // class
+ }
+ finally {
+ fileOutputStream.close();
+ System.out.println("File closed");
+ }
+ }
+
+ public void addPublicParameter(Class> type) {
+ addParameter(true, type, var(type));
+ }
+
+ public void addParameter(Class> type) {
+ addParameter(false, type, var(type));
+ }
+
+ public void addParameter(boolean reexport, @NotNull Class> type, @Nullable String name) {
+ Field field = addField(reexport, type, name, null);
+ Parameter parameter = new Parameter(type, name, field);
+ parameters.add(parameter);
+ field.setInitialization(new ParameterExpression(parameter));
+ backsParameter.add(field);
+ typeToField.put(type, field);
+ }
+
+ public Field addPublicField(Class> type) {
+ return addField(true, type, null, null);
+ }
+
+ public Field addField(Class> type) {
+ return addField(false, type, null, null);
+ }
+
+ public Field addField(boolean isPublic, Class> type, @Nullable String name, @Nullable Expression init) {
+ Field field = Field.create(isPublic, type, name == null ? var(type) : name, init);
+ fields.add(field);
+ typeToField.put(type, field);
+ return field;
+ }
+
+ private void generateImports(PrintStream out, String injectorPackageName) {
+ for (Field field : fields) {
+ generateImportDirective(out, field.getType(), injectorPackageName);
+ }
+ for (Parameter parameter : parameters) {
+ generateImportDirective(out, parameter.getType(), injectorPackageName);
+ }
+ }
+
+ private void generateImportDirective(PrintStream out, Class> type, String injectorPackageName) {
+ if (type.isPrimitive()) return;
+ String importedPackageName = type.getPackage().getName();
+ if ("java.lang".equals(importedPackageName)
+ || injectorPackageName.equals(importedPackageName)) {
+ return;
+ }
+ out.println("import " + type.getCanonicalName() + ";");
+ }
+
+ private void generateFields(PrintStream out) {
+ for (Field field : fields) {
+ if (lazy || field.isPublic()) {
+ String _final = backsParameter.contains(field) ? "final " : "";
+ out.println(" private " + _final + field.getType().getSimpleName() + " " + field.getName() + ";");
+ }
+ }
+ }
+
+ private void generateConstructor(String injectorClassName, PrintStream out) {
+ String indent = " ";
+
+ // Constructor parameters
+ if (parameters.isEmpty()) {
+ out.println(" public " + injectorClassName + "() {");
+ }
+ else {
+ out.println(" public " + injectorClassName + "(");
+ for (Iterator iterator = parameters.iterator(); iterator.hasNext(); ) {
+ Parameter parameter = iterator.next();
+ out.print(indent + parameter.getType().getSimpleName() + " " + parameter.getName());
+ if (iterator.hasNext()) {
+ out.println(",");
+ }
+ }
+ out.println("\n ) {");
+ }
+
+ if (lazy) {
+ // Remember parameters
+ for (Parameter parameter : parameters) {
+ out.println(indent + "this." + parameter.getField().getName() + " = " + parameter.getName() + ";");
+ }
+ }
+ else {
+ // Initialize fields
+ for (Field field : fields) {
+ if (!backsParameter.contains(field) || field.isPublic()) {
+ String prefix = field.isPublic() ? "this." : field.getTypeName() + " ";
+ out.println(indent + prefix + field.getName() + " = " + field.getInitialization() + ";");
+ }
+ }
+ out.println();
+
+ // Call setters
+ for (Field field : fields) {
+ for (SetterDependency dependency : field.getDependencies()) {
+ String prefix = field.isPublic() ? "this." : "";
+ out.println(indent + prefix + dependency.getDependent().getName() + "." + dependency.getSetterName() + "(" + dependency.getDependency().getName() + ");");
+ }
+ if (!field.getDependencies().isEmpty()) {
+ out.println();
+ }
+ }
+ }
+
+ out.println(" }");
+ }
+
+ private void generateGetters(PrintStream out) {
+ String indent0 = " ";
+ String indent1 = indent0 + INDENT_STEP;
+ String indent2 = indent1 + INDENT_STEP;
+ String indent3 = indent2 + INDENT_STEP;
+ String indent4 = indent3 + INDENT_STEP;
+ for (Field field : fields) {
+ if (!lazy && !field.isPublic()) continue;
+ String visibility = field.isPublic() ? "public" : "private";
+ out.println(indent0 + visibility + " " + field.getTypeName() + " " + field.getGetterName() + "() {");
+
+ if (lazy && !backsParameter.contains(field)) {
+ Expression initialization = field.getInitialization();
+ assert initialization != null : field;
+
+ // Double-checked locking
+ out.println(indent1 + "if (this." + field.getName() + " == null) {");
+
+ out.println(indent2 + "this." + field.getName() + " = " + initialization + ";");
+ // Invoke setters
+ for (SetterDependency dependency : field.getDependencies()) {
+ out.println(indent2 + "this." + field.getName() + "." + dependency.getSetterName() + "(" + dependency.getDependency().getGetterName() + "());");
+ }
+
+ out.println(indent1 + "}"); // Outer if
+
+ /*
+ // Double-checked locking
+ out.println(indent1 + "if (this." + field.getName() + " == null) {");
+ out.println(indent2 + "synchronized (" + LOCK_NAME + ") {");
+ out.println(indent3 + "if (this." + field.getName() + " == null) {");
+
+ out.println(indent4 + "this." + field.getName() + " = " + initialization + ";");
+ // Invoke setters
+ for (SetterDependency dependency : field.getDependencies()) {
+ out.println(indent4 + "this." + field.getName() + "." + dependency.getSetterName() + "(" + dependency.getDependency().getGetterName() + "());");
+ }
+
+ out.println(indent3 + "}"); // Inner if
+ out.println(indent2 + "}"); // synchronized
+ out.println(indent1 + "}"); // Outer if
+ */
+ }
+
+ out.println(indent1 + "return this." + field.getName() + ";");
+ out.println(indent0 + "}");
+ out.println();
+ }
+ }
+
+ private void satisfyDependenciesFor(Field field, Field neededFor) {
+ if (!satisfied.add(field)) return;
+ if (backsParameter.contains(field)) return;
+
+ if (field.getInitialization() == null) {
+ initializeByConstructorCall(field, neededFor);
+ }
+
+ for (Method method : field.getType().getDeclaredMethods()) {
+ if (method.getAnnotation(javax.inject.Inject.class) == null
+ || !method.getName().startsWith("set")
+ || method.getParameterTypes().length != 1) continue;
+
+ Class> parameterType = method.getParameterTypes()[0];
+
+
+ Field dependency = findDependencyOfType(parameterType, field + ": " + method + ": " + fields, field);
+
+ field.getDependencies().add(new SetterDependency(field, method.getName(), dependency));
+ }
+ }
+
+ private Field findDependencyOfType(Class> parameterType, String errorMessage, Field neededFor) {
+ Collection fields = typeToField.get(parameterType);
+ Field dependency;
+ if (fields.isEmpty()) {
+ dependency = addField(parameterType);
+ satisfyDependenciesFor(dependency, neededFor);
+ }
+ else if (fields.size() == 1) {
+ dependency = fields.iterator().next();
+ }
+ else {
+ throw new IllegalArgumentException("Ambiguous dependency: " + errorMessage);
+ }
+ return dependency;
+ }
+
+ private void initializeByConstructorCall(Field field, Field neededFor) {
+ Class> type = field.getType();
+
+ // Look for constructor
+ Constructor>[] constructors = type.getConstructors();
+ if (constructors.length == 0 || !Modifier.isPublic(constructors[0].getModifiers())) {
+ throw new IllegalArgumentException("No constructor: " + type.getName() + " needed for " + neededFor);
+ }
+ Constructor> constructor = constructors[0];
+
+ // Find arguments
+ ConstructorCall dependency = new ConstructorCall(constructor);
+ Class>[] parameterTypes = constructor.getParameterTypes();
+ for (Class> parameterType : parameterTypes) {
+ Field fieldForParameter = findDependencyOfType(parameterType, "constructor: " + constructor + ", parameter: " + parameterType, field);
+ dependency.getConstructorArguments().add(fieldForParameter);
+ }
+
+ field.setInitialization(dependency);
+ }
+
+ private String var(Class> theClass) {
+ return StringUtil.decapitalize(theClass.getSimpleName());
+ }
+
+ private void generateMakeFunction(PrintStream out) {
+ out.println(" private static T make(Class theClass) {");
+ out.println(" try { ");
+ out.println(" return theClass.newInstance(); ");
+ out.println(" } ");
+ out.println(" catch (InstantiationException e) { ");
+ out.println(" throw new IllegalStateException(e); ");
+ out.println(" } ");
+ out.println(" catch (IllegalAccessException e) { ");
+ out.println(" throw new IllegalStateException(e); ");
+ out.println(" } ");
+ out.println(" } ");
+ }
+}
diff --git a/injector-generator/src/org/jetbrains/jet/di/Expression.java b/injector-generator/src/org/jetbrains/jet/di/Expression.java
new file mode 100644
index 00000000000..48bd454dc01
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/Expression.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2000-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.di;
+
+/**
+* @author abreslav
+*/
+interface Expression {}
diff --git a/injector-generator/src/org/jetbrains/jet/di/Field.java b/injector-generator/src/org/jetbrains/jet/di/Field.java
new file mode 100644
index 00000000000..2ac994757ae
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/Field.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2000-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.di;
+
+import com.google.common.collect.Lists;
+import com.intellij.openapi.util.text.StringUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+* @author abreslav
+*/
+class Field {
+
+ public static Field create(boolean isPublic, Class> type, String name, @Nullable Expression init) {
+ Field field = new Field(isPublic, type, name);
+ field.initialization = init;
+ return field;
+ }
+
+ private final Class> type;
+ private final String name;
+ private final boolean isPublic;
+
+ @Nullable
+ private Expression initialization;
+
+ private final List dependencies = Lists.newArrayList();
+
+ Field(boolean isPublic, Class> type, String name) {
+ this.isPublic = isPublic;
+ this.type = type;
+ this.name = name;
+ }
+
+ public Class> getType() {
+ return type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getTypeName() {
+ return type.getSimpleName();
+ }
+
+ public String getGetterName() {
+ String prefix;
+ if (getType() == boolean.class || getType() == Boolean.class) {
+ prefix = "is";
+ }
+ else {
+ prefix = "get";
+ }
+ return prefix + StringUtil.capitalize(getName());
+ }
+
+ @Nullable
+ public Expression getInitialization() {
+ return initialization;
+ }
+
+ public void setInitialization(@NotNull Expression initialization) {
+ this.initialization = initialization;
+ }
+
+ public List getDependencies() {
+ return dependencies;
+ }
+
+ public boolean isPublic() {
+ return isPublic;
+ }
+
+ @Override
+ public String toString() {
+ return getTypeName() + " " + getName();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Field field = (Field) o;
+
+ if (!name.equals(field.name)) return false;
+ if (!type.equals(field.type)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = type.hashCode();
+ result = 31 * result + name.hashCode();
+ return result;
+ }
+}
diff --git a/injector-generator/src/org/jetbrains/jet/di/GivenExpression.java b/injector-generator/src/org/jetbrains/jet/di/GivenExpression.java
new file mode 100644
index 00000000000..93441936299
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/GivenExpression.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2000-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.di;
+
+/**
+* @author abreslav
+*/
+class GivenExpression implements Expression {
+ private final String expression;
+
+ GivenExpression(String expression) {
+ this.expression = expression;
+ }
+
+ public String getExpression() {
+ return expression;
+ }
+
+ @Override
+ public String toString() {
+ return expression;
+ }
+}
diff --git a/injector-generator/src/org/jetbrains/jet/di/Parameter.java b/injector-generator/src/org/jetbrains/jet/di/Parameter.java
new file mode 100644
index 00000000000..de211006346
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/Parameter.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2000-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.di;
+
+/**
+* @author abreslav
+*/
+class Parameter {
+ private final Class> type;
+ private final String name;
+ private final Field field;
+
+ Parameter(Class> type, String name, Field field) {
+ this.type = type;
+ this.name = name;
+ this.field = field;
+ }
+
+ public Class> getType() {
+ return type;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Field getField() {
+ return field;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Parameter parameter = (Parameter) o;
+
+ if (name != null ? !name.equals(parameter.name) : parameter.name != null) return false;
+ if (type != null ? !type.equals(parameter.type) : parameter.type != null) return false;
+
+ return true;
+ }
+ @Override
+ public int hashCode() {
+ int result = type != null ? type.hashCode() : 0;
+ result = 31 * result + (name != null ? name.hashCode() : 0);
+ return result;
+ }
+
+
+}
diff --git a/injector-generator/src/org/jetbrains/jet/di/ParameterExpression.java b/injector-generator/src/org/jetbrains/jet/di/ParameterExpression.java
new file mode 100644
index 00000000000..d46b9f32500
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/ParameterExpression.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2000-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.di;
+
+/**
+ * @author abreslav
+ */
+public class ParameterExpression implements Expression {
+ private final Parameter parameter;
+
+ public ParameterExpression(Parameter parameter) {
+ this.parameter = parameter;
+ }
+
+ public Parameter getParameter() {
+ return parameter;
+ }
+
+ @Override
+ public String toString() {
+ return parameter.getName();
+ }
+}
diff --git a/injector-generator/src/org/jetbrains/jet/di/SetterDependency.java b/injector-generator/src/org/jetbrains/jet/di/SetterDependency.java
new file mode 100644
index 00000000000..2268728d62f
--- /dev/null
+++ b/injector-generator/src/org/jetbrains/jet/di/SetterDependency.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2000-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.di;
+
+/**
+* @author abreslav
+*/
+class SetterDependency {
+ private final Field dependent;
+ private final String setterName;
+ private final Field dependency;
+
+ SetterDependency(Field dependent, String setterName, Field dependency) {
+ this.dependent = dependent;
+ this.setterName = setterName;
+ this.dependency = dependency;
+ }
+
+ public Field getDependent() {
+ return dependent;
+ }
+
+ public String getSetterName() {
+ return setterName;
+ }
+
+ public Field getDependency() {
+ return dependency;
+ }
+
+ @Override
+ public String toString() {
+ return dependent.getName() + "." + setterName + "(" + dependency.getName() + ")";
+ }
+}
diff --git a/lib/guice-3.0-no_aop.jar b/lib/guice-3.0-no_aop.jar
deleted file mode 100644
index ef3a55b0c58..00000000000
Binary files a/lib/guice-3.0-no_aop.jar and /dev/null differ
diff --git a/lib/guice-3.0-src.zip b/lib/guice-3.0-src.zip
deleted file mode 100644
index 5ad6d4a02e6..00000000000
Binary files a/lib/guice-3.0-src.zip and /dev/null differ
diff --git a/lib/javax.inject-src.zip b/lib/javax.inject-src.zip
new file mode 100755
index 00000000000..cce5b3bb2eb
Binary files /dev/null and b/lib/javax.inject-src.zip differ
diff --git a/lib/guice-javax.inject.jar b/lib/javax.inject.jar
old mode 100644
new mode 100755
similarity index 62%
rename from lib/guice-javax.inject.jar
rename to lib/javax.inject.jar
index a9dfb86d27a..1ff61ceecf0
Binary files a/lib/guice-javax.inject.jar and b/lib/javax.inject.jar differ