提交 c6e54b13 编写于 作者: A Andrey Breslav

Deterministic order of setter calls

上级 93fcd7d1
......@@ -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;
CallResolver callResolver = new CallResolver();
DescriptorResolver descriptorResolver = new DescriptorResolver();
TypeResolver typeResolver = new TypeResolver();
AnnotationResolver annotationResolver = new AnnotationResolver();
CallResolver callResolver = new CallResolver();
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);
this.expressionTypingServices.setTypeResolver(typeResolver);
callResolver.setDescriptorResolver(descriptorResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
callResolver.setTypeResolver(typeResolver);
descriptorResolver.setAnnotationResolver(annotationResolver);
descriptorResolver.setExpressionTypingServices(expressionTypingServices);
descriptorResolver.setTypeResolver(typeResolver);
descriptorResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setAnnotationResolver(annotationResolver);
annotationResolver.setExpressionTypingServices(expressionTypingServices);
annotationResolver.setCallResolver(callResolver);
annotationResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setDescriptorResolver(descriptorResolver);
callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTypeResolver(typeResolver);
callResolver.setOverloadingConflictResolver(overloadingConflictResolver);
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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册