Deterministic order of setter calls
This commit is contained in:
@@ -17,16 +17,15 @@
|
||||
|
||||
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.AnnotationResolver;
|
||||
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;
|
||||
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 {
|
||||
|
||||
private ExpressionTypingServices expressionTypingServices;
|
||||
@@ -37,31 +36,31 @@ public class InjectorForMacros {
|
||||
) {
|
||||
this.expressionTypingServices = new ExpressionTypingServices();
|
||||
this.project = project;
|
||||
DescriptorResolver descriptorResolver = new DescriptorResolver();
|
||||
TypeResolver typeResolver = new TypeResolver();
|
||||
AnnotationResolver annotationResolver = new AnnotationResolver();
|
||||
CallResolver callResolver = new CallResolver();
|
||||
DescriptorResolver descriptorResolver = new DescriptorResolver();
|
||||
AnnotationResolver annotationResolver = new AnnotationResolver();
|
||||
TypeResolver typeResolver = new TypeResolver();
|
||||
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
||||
|
||||
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
||||
this.expressionTypingServices.setCallResolver(callResolver);
|
||||
this.expressionTypingServices.setTypeResolver(typeResolver);
|
||||
this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
||||
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);
|
||||
this.expressionTypingServices.setTypeResolver(typeResolver);
|
||||
|
||||
callResolver.setDescriptorResolver(descriptorResolver);
|
||||
callResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
callResolver.setTypeResolver(typeResolver);
|
||||
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;
|
||||
|
||||
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 org.jetbrains.jet.lang.resolve.TopDownAnalysisContext;
|
||||
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.DeclarationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||
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.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 {
|
||||
|
||||
private TopDownAnalyzer topDownAnalyzer;
|
||||
@@ -53,68 +70,68 @@ public class InjectorForTopDownAnalyzer {
|
||||
DeclarationResolver declarationResolver = new DeclarationResolver();
|
||||
AnnotationResolver annotationResolver = new AnnotationResolver();
|
||||
CallResolver callResolver = new CallResolver();
|
||||
TypeResolver typeResolver = new TypeResolver();
|
||||
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
||||
TypeResolver typeResolver = new TypeResolver();
|
||||
ImportsResolver importsResolver = new ImportsResolver();
|
||||
TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver();
|
||||
DelegationResolver delegationResolver = new DelegationResolver();
|
||||
OverrideResolver overrideResolver = new OverrideResolver();
|
||||
OverloadResolver overloadResolver = new OverloadResolver();
|
||||
OverrideResolver overrideResolver = new OverrideResolver();
|
||||
TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver();
|
||||
|
||||
this.topDownAnalyzer.setDeclarationResolver(declarationResolver);
|
||||
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
|
||||
this.topDownAnalyzer.setDelegationResolver(delegationResolver);
|
||||
this.topDownAnalyzer.setOverrideResolver(overrideResolver);
|
||||
this.topDownAnalyzer.setOverloadResolver(overloadResolver);
|
||||
this.topDownAnalyzer.setOverrideResolver(overrideResolver);
|
||||
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
|
||||
|
||||
this.bodyResolver.setCallResolver(callResolver);
|
||||
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.setAnnotationResolver(annotationResolver);
|
||||
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.setDescriptorResolver(descriptorResolver);
|
||||
this.expressionTypingServices.setProject(project);
|
||||
this.expressionTypingServices.setTypeResolver(typeResolver);
|
||||
|
||||
declarationResolver.setAnnotationResolver(annotationResolver);
|
||||
declarationResolver.setContext(topDownAnalysisContext);
|
||||
declarationResolver.setDescriptorResolver(descriptorResolver);
|
||||
declarationResolver.setAnnotationResolver(annotationResolver);
|
||||
declarationResolver.setImportsResolver(importsResolver);
|
||||
|
||||
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
annotationResolver.setCallResolver(callResolver);
|
||||
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
|
||||
callResolver.setDescriptorResolver(descriptorResolver);
|
||||
callResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
callResolver.setTypeResolver(typeResolver);
|
||||
callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
||||
callResolver.setTypeResolver(typeResolver);
|
||||
|
||||
typeResolver.setDescriptorResolver(descriptorResolver);
|
||||
typeResolver.setAnnotationResolver(annotationResolver);
|
||||
typeResolver.setDescriptorResolver(descriptorResolver);
|
||||
|
||||
importsResolver.setContext(topDownAnalysisContext);
|
||||
importsResolver.setConfiguration(moduleConfiguration);
|
||||
|
||||
typeHierarchyResolver.setContext(topDownAnalysisContext);
|
||||
typeHierarchyResolver.setDescriptorResolver(descriptorResolver);
|
||||
typeHierarchyResolver.setImportsResolver(importsResolver);
|
||||
typeHierarchyResolver.setConfiguration(moduleConfiguration);
|
||||
importsResolver.setContext(topDownAnalysisContext);
|
||||
|
||||
delegationResolver.setContext(topDownAnalysisContext);
|
||||
|
||||
overloadResolver.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.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 {
|
||||
|
||||
private DescriptorResolver descriptorResolver;
|
||||
@@ -48,25 +48,25 @@ public class InjectorForTests {
|
||||
AnnotationResolver annotationResolver = new AnnotationResolver();
|
||||
OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver();
|
||||
|
||||
this.descriptorResolver.setAnnotationResolver(annotationResolver);
|
||||
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.setDescriptorResolver(descriptorResolver);
|
||||
this.expressionTypingServices.setProject(project);
|
||||
this.expressionTypingServices.setTypeResolver(typeResolver);
|
||||
|
||||
this.typeResolver.setDescriptorResolver(descriptorResolver);
|
||||
this.typeResolver.setAnnotationResolver(annotationResolver);
|
||||
this.typeResolver.setDescriptorResolver(descriptorResolver);
|
||||
|
||||
this.callResolver.setDescriptorResolver(descriptorResolver);
|
||||
this.callResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
this.callResolver.setTypeResolver(typeResolver);
|
||||
this.callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
|
||||
this.callResolver.setTypeResolver(typeResolver);
|
||||
|
||||
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
annotationResolver.setCallResolver(callResolver);
|
||||
annotationResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -32,9 +32,7 @@ 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;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
@@ -279,7 +277,15 @@ public class DependencyInjectorGenerator {
|
||||
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
|
||||
|| !method.getName().startsWith("set")
|
||||
|| method.getParameterTypes().length != 1) continue;
|
||||
|
||||
Reference in New Issue
Block a user