From 7a6f18c14a6b2aa48e4ccf82d6c2a41f9a9219db Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Wed, 14 Mar 2012 21:47:25 +0400 Subject: [PATCH] di: required parameters * required parameters have @NotNull annotation generated * parameters are required by default --- .../jetbrains/jet/di/InjectorForMacros.java | 3 +- .../jet/di/InjectorForTopDownAnalyzer.java | 9 +++--- .../jetbrains/jet/di/InjectorForTests.java | 3 +- .../jet/di/AllInjectorsGenerator.java | 2 +- .../jet/di/DependencyInjectorGenerator.java | 31 ++++++++++++++++--- .../src/org/jetbrains/jet/di/Parameter.java | 8 ++++- 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java index 61d7f948748..752131e2b3a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; /* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */ public class InjectorForMacros { @@ -33,7 +34,7 @@ public class InjectorForMacros { private final Project project; public InjectorForMacros( - Project project + @NotNull Project project ) { this.expressionTypingServices = new ExpressionTypingServices(); this.project = project; diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzer.java index 5cd7c670af7..6a81e0c4885 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzer.java @@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.TopDownAnalysisContext; import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; +import org.jetbrains.annotations.NotNull; /* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */ public class InjectorForTopDownAnalyzer { @@ -55,10 +56,10 @@ public class InjectorForTopDownAnalyzer { private final Project project; public InjectorForTopDownAnalyzer( - Project project, - TopDownAnalysisContext topDownAnalysisContext, - ModuleConfiguration moduleConfiguration, - ModuleDescriptor moduleDescriptor, + @NotNull Project project, + @NotNull TopDownAnalysisContext topDownAnalysisContext, + @NotNull ModuleConfiguration moduleConfiguration, + @NotNull ModuleDescriptor moduleDescriptor, JetControlFlowDataTraceFactory jetControlFlowDataTraceFactory ) { this.topDownAnalyzer = new TopDownAnalyzer(); diff --git a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java index ad1777fd7f1..04ba86fcf75 100644 --- a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java +++ b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java @@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project; import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.calls.OverloadingConflictResolver; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; /* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */ public class InjectorForTests { @@ -38,7 +39,7 @@ public class InjectorForTests { private final Project project; public InjectorForTests( - Project project + @NotNull Project project ) { this.descriptorResolver = new DescriptorResolver(); this.expressionTypingServices = new ExpressionTypingServices(); diff --git a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java index e8f526e7073..6c9477b1b06 100644 --- a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java +++ b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java @@ -55,7 +55,7 @@ public class AllInjectorsGenerator { generator.addParameter(TopDownAnalysisContext.class); generator.addParameter(ModuleConfiguration.class); generator.addParameter(ModuleDescriptor.class); - generator.addParameter(JetControlFlowDataTraceFactory.class); + generator.addParameter(JetControlFlowDataTraceFactory.class, false); generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzer"); } diff --git a/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java b/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java index 907a8064a11..8a87183e19c 100644 --- a/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java +++ b/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java @@ -110,16 +110,27 @@ public class DependencyInjectorGenerator { } public void addPublicParameter(Class type) { - addParameter(true, type, var(type)); + addPublicParameter(type, true); } + public void addPublicParameter(Class type, boolean required) { + addParameter(true, type, var(type), required); + } + + public void addParameter(Class type) { - addParameter(false, type, var(type)); + addParameter(type, true); } - public void addParameter(boolean reexport, @NotNull Class type, @Nullable String name) { + public void addParameter(Class type, boolean required) { + addParameter(false, type, var(type), required); + } + + + + public void addParameter(boolean reexport, @NotNull Class type, @Nullable String name, boolean required) { Field field = addField(reexport, type, name, null); - Parameter parameter = new Parameter(type, name, field); + Parameter parameter = new Parameter(type, name, field, required); parameters.add(parameter); field.setInitialization(new ParameterExpression(parameter)); backsParameter.add(field); @@ -148,6 +159,12 @@ public class DependencyInjectorGenerator { for (Parameter parameter : parameters) { generateImportDirective(out, parameter.getType(), injectorPackageName); } + for (Parameter parameter : parameters) { + if (parameter.isRequired()) { + generateImportDirective(out, NotNull.class, injectorPackageName); + break; + } + } } private void generateImportDirective(PrintStream out, Class type, String injectorPackageName) { @@ -180,7 +197,11 @@ public class DependencyInjectorGenerator { out.println(" public " + injectorClassName + "("); for (Iterator iterator = parameters.iterator(); iterator.hasNext(); ) { Parameter parameter = iterator.next(); - out.print(indent + parameter.getType().getSimpleName() + " " + parameter.getName()); + out.print(indent); + if (parameter.isRequired()) { + out.print("@NotNull "); + } + out.print(parameter.getType().getSimpleName() + " " + parameter.getName()); if (iterator.hasNext()) { out.println(","); } diff --git a/injector-generator/src/org/jetbrains/jet/di/Parameter.java b/injector-generator/src/org/jetbrains/jet/di/Parameter.java index 432da12acbf..25cc125b2fa 100644 --- a/injector-generator/src/org/jetbrains/jet/di/Parameter.java +++ b/injector-generator/src/org/jetbrains/jet/di/Parameter.java @@ -23,11 +23,13 @@ class Parameter { private final Class type; private final String name; private final Field field; + private final boolean required; - Parameter(Class type, String name, Field field) { + Parameter(Class type, String name, Field field, boolean required) { this.type = type; this.name = name; this.field = field; + this.required = required; } public Class getType() { @@ -42,6 +44,10 @@ class Parameter { return field; } + public boolean isRequired() { + return required; + } + @Override public boolean equals(Object o) { if (this == o) return true;