Deterministic order of setter calls
This commit is contained in:
@@ -17,16 +17,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.di;
|
package org.jetbrains.jet.di;
|
||||||
|
|
||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
|
||||||
import com.intellij.openapi.project.Project;
|
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.DescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
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.CallResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
||||||
import com.intellij.openapi.project.Project;
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
|
|
||||||
/* This file is generated by org.jetbrains.jet.di.InjectorGenerator. DO NOT EDIT! */
|
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
||||||
public class InjectorForMacros {
|
public class InjectorForMacros {
|
||||||
|
|
||||||
private ExpressionTypingServices expressionTypingServices;
|
private ExpressionTypingServices expressionTypingServices;
|
||||||
@@ -37,31 +36,31 @@ public class InjectorForMacros {
|
|||||||
) {
|
) {
|
||||||
this.expressionTypingServices = new ExpressionTypingServices();
|
this.expressionTypingServices = new ExpressionTypingServices();
|
||||||
this.project = project;
|
this.project = project;
|
||||||
DescriptorResolver descriptorResolver = new DescriptorResolver();
|
|
||||||
TypeResolver typeResolver = new TypeResolver();
|
|
||||||
AnnotationResolver annotationResolver = new AnnotationResolver();
|
|
||||||
CallResolver callResolver = new CallResolver();
|
CallResolver callResolver = new CallResolver();
|
||||||
|
DescriptorResolver descriptorResolver = new DescriptorResolver();
|
||||||
|
AnnotationResolver annotationResolver = new AnnotationResolver();
|
||||||
|
TypeResolver typeResolver = new TypeResolver();
|
||||||
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
||||||
|
|
||||||
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
|
||||||
this.expressionTypingServices.setCallResolver(callResolver);
|
this.expressionTypingServices.setCallResolver(callResolver);
|
||||||
this.expressionTypingServices.setTypeResolver(typeResolver);
|
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
||||||
this.expressionTypingServices.setProject(project);
|
this.expressionTypingServices.setProject(project);
|
||||||
|
this.expressionTypingServices.setTypeResolver(typeResolver);
|
||||||
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.setDescriptorResolver(descriptorResolver);
|
||||||
callResolver.setExpressionTypingServices(expressionTypingServices);
|
callResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
callResolver.setTypeResolver(typeResolver);
|
|
||||||
callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
||||||
|
callResolver.setTypeResolver(typeResolver);
|
||||||
|
|
||||||
|
descriptorResolver.setAnnotationResolver(annotationResolver);
|
||||||
|
descriptorResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
descriptorResolver.setTypeResolver(typeResolver);
|
||||||
|
|
||||||
|
annotationResolver.setCallResolver(callResolver);
|
||||||
|
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
typeResolver.setAnnotationResolver(annotationResolver);
|
||||||
|
typeResolver.setDescriptorResolver(descriptorResolver);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,15 +17,32 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.di;
|
package org.jetbrains.jet.di;
|
||||||
|
|
||||||
|
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BodyResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||||
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
|
import org.jetbrains.jet.lang.resolve.TopDownAnalysisContext;
|
||||||
import org.jetbrains.jet.lang.ModuleConfiguration;
|
import org.jetbrains.jet.lang.ModuleConfiguration;
|
||||||
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
||||||
import org.jetbrains.jet.lang.resolve.*;
|
import org.jetbrains.jet.lang.resolve.DeclarationResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
import org.jetbrains.jet.lang.resolve.TypeResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.DelegationResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.OverloadResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
|
import org.jetbrains.jet.lang.resolve.TopDownAnalysisContext;
|
||||||
|
import org.jetbrains.jet.lang.ModuleConfiguration;
|
||||||
|
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
||||||
|
|
||||||
/* This file is generated by org.jetbrains.jet.di.InjectorGenerator. DO NOT EDIT! */
|
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
||||||
public class InjectorForTopDownAnalyzer {
|
public class InjectorForTopDownAnalyzer {
|
||||||
|
|
||||||
private TopDownAnalyzer topDownAnalyzer;
|
private TopDownAnalyzer topDownAnalyzer;
|
||||||
@@ -53,68 +70,68 @@ public class InjectorForTopDownAnalyzer {
|
|||||||
DeclarationResolver declarationResolver = new DeclarationResolver();
|
DeclarationResolver declarationResolver = new DeclarationResolver();
|
||||||
AnnotationResolver annotationResolver = new AnnotationResolver();
|
AnnotationResolver annotationResolver = new AnnotationResolver();
|
||||||
CallResolver callResolver = new CallResolver();
|
CallResolver callResolver = new CallResolver();
|
||||||
TypeResolver typeResolver = new TypeResolver();
|
|
||||||
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
||||||
|
TypeResolver typeResolver = new TypeResolver();
|
||||||
ImportsResolver importsResolver = new ImportsResolver();
|
ImportsResolver importsResolver = new ImportsResolver();
|
||||||
TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver();
|
|
||||||
DelegationResolver delegationResolver = new DelegationResolver();
|
DelegationResolver delegationResolver = new DelegationResolver();
|
||||||
OverrideResolver overrideResolver = new OverrideResolver();
|
|
||||||
OverloadResolver overloadResolver = new OverloadResolver();
|
OverloadResolver overloadResolver = new OverloadResolver();
|
||||||
|
OverrideResolver overrideResolver = new OverrideResolver();
|
||||||
|
TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver();
|
||||||
|
|
||||||
this.topDownAnalyzer.setDeclarationResolver(declarationResolver);
|
this.topDownAnalyzer.setDeclarationResolver(declarationResolver);
|
||||||
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
|
|
||||||
this.topDownAnalyzer.setDelegationResolver(delegationResolver);
|
this.topDownAnalyzer.setDelegationResolver(delegationResolver);
|
||||||
this.topDownAnalyzer.setOverrideResolver(overrideResolver);
|
|
||||||
this.topDownAnalyzer.setOverloadResolver(overloadResolver);
|
this.topDownAnalyzer.setOverloadResolver(overloadResolver);
|
||||||
|
this.topDownAnalyzer.setOverrideResolver(overrideResolver);
|
||||||
|
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
|
||||||
|
|
||||||
|
this.bodyResolver.setCallResolver(callResolver);
|
||||||
this.bodyResolver.setContext(topDownAnalysisContext);
|
this.bodyResolver.setContext(topDownAnalysisContext);
|
||||||
this.bodyResolver.setDescriptorResolver(descriptorResolver);
|
this.bodyResolver.setDescriptorResolver(descriptorResolver);
|
||||||
this.bodyResolver.setExpressionTypingServices(expressionTypingServices);
|
this.bodyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
this.bodyResolver.setCallResolver(callResolver);
|
|
||||||
|
|
||||||
this.controlFlowAnalyzer.setContext(topDownAnalysisContext);
|
this.controlFlowAnalyzer.setContext(topDownAnalysisContext);
|
||||||
this.controlFlowAnalyzer.setFlowDataTraceFactory(jetControlFlowDataTraceFactory);
|
this.controlFlowAnalyzer.setFlowDataTraceFactory(jetControlFlowDataTraceFactory);
|
||||||
|
|
||||||
this.declarationsChecker.setContext(topDownAnalysisContext);
|
this.declarationsChecker.setContext(topDownAnalysisContext);
|
||||||
|
|
||||||
|
this.descriptorResolver.setAnnotationResolver(annotationResolver);
|
||||||
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
|
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
this.descriptorResolver.setTypeResolver(typeResolver);
|
this.descriptorResolver.setTypeResolver(typeResolver);
|
||||||
this.descriptorResolver.setAnnotationResolver(annotationResolver);
|
|
||||||
|
|
||||||
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
|
||||||
this.expressionTypingServices.setCallResolver(callResolver);
|
this.expressionTypingServices.setCallResolver(callResolver);
|
||||||
this.expressionTypingServices.setTypeResolver(typeResolver);
|
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
||||||
this.expressionTypingServices.setProject(project);
|
this.expressionTypingServices.setProject(project);
|
||||||
|
this.expressionTypingServices.setTypeResolver(typeResolver);
|
||||||
|
|
||||||
|
declarationResolver.setAnnotationResolver(annotationResolver);
|
||||||
declarationResolver.setContext(topDownAnalysisContext);
|
declarationResolver.setContext(topDownAnalysisContext);
|
||||||
declarationResolver.setDescriptorResolver(descriptorResolver);
|
declarationResolver.setDescriptorResolver(descriptorResolver);
|
||||||
declarationResolver.setAnnotationResolver(annotationResolver);
|
|
||||||
declarationResolver.setImportsResolver(importsResolver);
|
declarationResolver.setImportsResolver(importsResolver);
|
||||||
|
|
||||||
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
|
||||||
annotationResolver.setCallResolver(callResolver);
|
annotationResolver.setCallResolver(callResolver);
|
||||||
|
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
callResolver.setDescriptorResolver(descriptorResolver);
|
callResolver.setDescriptorResolver(descriptorResolver);
|
||||||
callResolver.setExpressionTypingServices(expressionTypingServices);
|
callResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
callResolver.setTypeResolver(typeResolver);
|
|
||||||
callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
||||||
|
callResolver.setTypeResolver(typeResolver);
|
||||||
|
|
||||||
typeResolver.setDescriptorResolver(descriptorResolver);
|
|
||||||
typeResolver.setAnnotationResolver(annotationResolver);
|
typeResolver.setAnnotationResolver(annotationResolver);
|
||||||
|
typeResolver.setDescriptorResolver(descriptorResolver);
|
||||||
|
|
||||||
importsResolver.setContext(topDownAnalysisContext);
|
|
||||||
importsResolver.setConfiguration(moduleConfiguration);
|
importsResolver.setConfiguration(moduleConfiguration);
|
||||||
|
importsResolver.setContext(topDownAnalysisContext);
|
||||||
typeHierarchyResolver.setContext(topDownAnalysisContext);
|
|
||||||
typeHierarchyResolver.setDescriptorResolver(descriptorResolver);
|
|
||||||
typeHierarchyResolver.setImportsResolver(importsResolver);
|
|
||||||
typeHierarchyResolver.setConfiguration(moduleConfiguration);
|
|
||||||
|
|
||||||
delegationResolver.setContext(topDownAnalysisContext);
|
delegationResolver.setContext(topDownAnalysisContext);
|
||||||
|
|
||||||
|
overloadResolver.setContext(topDownAnalysisContext);
|
||||||
|
|
||||||
overrideResolver.setContext(topDownAnalysisContext);
|
overrideResolver.setContext(topDownAnalysisContext);
|
||||||
|
|
||||||
overloadResolver.setContext(topDownAnalysisContext);
|
typeHierarchyResolver.setConfiguration(moduleConfiguration);
|
||||||
|
typeHierarchyResolver.setContext(topDownAnalysisContext);
|
||||||
|
typeHierarchyResolver.setDescriptorResolver(descriptorResolver);
|
||||||
|
typeHierarchyResolver.setImportsResolver(importsResolver);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver;
|
|||||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||||
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
|
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
|
||||||
|
|
||||||
/* This file is generated by org.jetbrains.jet.di.InjectorGenerator. DO NOT EDIT! */
|
/* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */
|
||||||
public class InjectorForTests {
|
public class InjectorForTests {
|
||||||
|
|
||||||
private DescriptorResolver descriptorResolver;
|
private DescriptorResolver descriptorResolver;
|
||||||
@@ -48,25 +48,25 @@ public class InjectorForTests {
|
|||||||
AnnotationResolver annotationResolver = new AnnotationResolver();
|
AnnotationResolver annotationResolver = new AnnotationResolver();
|
||||||
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
||||||
|
|
||||||
|
this.descriptorResolver.setAnnotationResolver(annotationResolver);
|
||||||
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
|
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
this.descriptorResolver.setTypeResolver(typeResolver);
|
this.descriptorResolver.setTypeResolver(typeResolver);
|
||||||
this.descriptorResolver.setAnnotationResolver(annotationResolver);
|
|
||||||
|
|
||||||
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
|
||||||
this.expressionTypingServices.setCallResolver(callResolver);
|
this.expressionTypingServices.setCallResolver(callResolver);
|
||||||
this.expressionTypingServices.setTypeResolver(typeResolver);
|
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
||||||
this.expressionTypingServices.setProject(project);
|
this.expressionTypingServices.setProject(project);
|
||||||
|
this.expressionTypingServices.setTypeResolver(typeResolver);
|
||||||
|
|
||||||
this.typeResolver.setDescriptorResolver(descriptorResolver);
|
|
||||||
this.typeResolver.setAnnotationResolver(annotationResolver);
|
this.typeResolver.setAnnotationResolver(annotationResolver);
|
||||||
|
this.typeResolver.setDescriptorResolver(descriptorResolver);
|
||||||
|
|
||||||
this.callResolver.setDescriptorResolver(descriptorResolver);
|
this.callResolver.setDescriptorResolver(descriptorResolver);
|
||||||
this.callResolver.setExpressionTypingServices(expressionTypingServices);
|
this.callResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
this.callResolver.setTypeResolver(typeResolver);
|
|
||||||
this.callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
this.callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
||||||
|
this.callResolver.setTypeResolver(typeResolver);
|
||||||
|
|
||||||
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
|
||||||
annotationResolver.setCallResolver(callResolver);
|
annotationResolver.setCallResolver(callResolver);
|
||||||
|
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,7 @@ import java.io.PrintStream;
|
|||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
@@ -279,7 +277,15 @@ public class DependencyInjectorGenerator {
|
|||||||
initializeByConstructorCall(field, neededFor);
|
initializeByConstructorCall(field, neededFor);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Method method : field.getType().getDeclaredMethods()) {
|
// Sort setters in order to get deterministic behavior
|
||||||
|
List<Method> declaredMethods = Lists.newArrayList(field.getType().getDeclaredMethods());
|
||||||
|
Collections.sort(declaredMethods, new Comparator<Method>() {
|
||||||
|
@Override
|
||||||
|
public int compare(Method o1, Method o2) {
|
||||||
|
return o1.getName().compareTo(o2.getName());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
for (Method method : declaredMethods) {
|
||||||
if (method.getAnnotation(javax.inject.Inject.class) == null
|
if (method.getAnnotation(javax.inject.Inject.class) == null
|
||||||
|| !method.getName().startsWith("set")
|
|| !method.getName().startsWith("set")
|
||||||
|| method.getParameterTypes().length != 1) continue;
|
|| method.getParameterTypes().length != 1) continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user