Small cleanup of BindingExpression.
1. Move the nested classes to the bottom so they don't interrupt the fields and methods.
2. The initialization code doesn't need to be Optional. It must be set before being used, but that's it.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=163365035
diff --git a/java/dagger/internal/codegen/BindingExpression.java b/java/dagger/internal/codegen/BindingExpression.java
index 8751a10..c39741d 100644
--- a/java/dagger/internal/codegen/BindingExpression.java
+++ b/java/dagger/internal/codegen/BindingExpression.java
@@ -19,7 +19,6 @@
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.base.Verify.verify;
import static dagger.internal.codegen.MemberSelect.staticMemberSelect;
import com.google.common.collect.ImmutableList;
@@ -36,10 +35,100 @@
final class BindingExpression extends RequestFulfillment {
private final Optional<FieldSpec> fieldSpec;
private final RequestFulfillment requestFulfillmentDelegate;
- private Optional<CodeBlock> initializeDeferredBindingFields = Optional.empty();
- private Optional<CodeBlock> initializeField = Optional.empty();
+ private CodeBlock initializeDeferredBindingFields;
+ private CodeBlock initializeField;
private InitializationState fieldInitializationState = InitializationState.UNINITIALIZED;
+ private BindingExpression(
+ RequestFulfillment requestFulfillmentDelegate, Optional<FieldSpec> fieldSpec) {
+ super(requestFulfillmentDelegate.bindingKey());
+ this.requestFulfillmentDelegate = requestFulfillmentDelegate;
+ this.fieldSpec = fieldSpec;
+ }
+
+ @Override
+ CodeBlock getSnippetForDependencyRequest(DependencyRequest request, ClassName requestingClass) {
+ return requestFulfillmentDelegate.getSnippetForDependencyRequest(request, requestingClass);
+ }
+
+ @Override
+ CodeBlock getSnippetForFrameworkDependency(
+ FrameworkDependency frameworkDependency, ClassName requestingClass) {
+ return requestFulfillmentDelegate.getSnippetForFrameworkDependency(
+ frameworkDependency, requestingClass);
+ }
+
+ /** Returns {@code true} if this binding expression has a field. */
+ boolean hasFieldSpec() {
+ return fieldSpec.isPresent();
+ }
+
+ /**
+ * Returns the name of the binding's underlying field.
+ *
+ * @throws UnsupportedOperationException if {@link #hasFieldSpec()} is {@code false}
+ */
+ String fieldName() {
+ checkHasField();
+ return fieldSpec.get().name;
+ }
+
+ /**
+ * Sets the code for initializing the binding's underlying field.
+ *
+ * @throws UnsupportedOperationException if {@link #hasFieldSpec()} is {@code false}
+ */
+ void setInitializationCode(CodeBlock initializeDeferredBindingFields, CodeBlock initializeField) {
+ checkHasField();
+ this.initializeDeferredBindingFields = checkNotNull(initializeDeferredBindingFields);
+ this.initializeField = checkNotNull(initializeField);
+ }
+
+ /**
+ * Returns the initialization code for the binding's underlying field.
+ *
+ * @throws UnsupportedOperationException if {@link #hasFieldSpec()} is {@code false}
+ */
+ private CodeBlock getInitializationCode() {
+ checkHasField();
+ checkState(initializeDeferredBindingFields != null && initializeField != null);
+ return CodeBlocks.concat(ImmutableList.of(initializeDeferredBindingFields, initializeField));
+ }
+
+ /**
+ * Returns the initialization state for the binding's underlying field.
+ *
+ * @throws UnsupportedOperationException if {@link #hasFieldSpec()} is {@code false}
+ */
+ InitializationState fieldInitializationState() {
+ checkHasField();
+ return fieldInitializationState;
+ }
+
+ /**
+ * Sets the initialization state for the binding's underlying field. Only valid for field types.
+ *
+ * @throws UnsupportedOperationException if {@link #hasFieldSpec()} is {@code false}
+ */
+ void setFieldInitializationState(InitializationState fieldInitializationState) {
+ checkHasField();
+ checkArgument(this.fieldInitializationState.compareTo(fieldInitializationState) < 0);
+ this.fieldInitializationState = fieldInitializationState;
+ }
+
+ /** Calls the consumer to initialize the binding's underlying field if it has one. */
+ void initializeField(BiConsumer<FieldSpec, CodeBlock> initializationConsumer) {
+ if (hasFieldSpec()) {
+ initializationConsumer.accept(fieldSpec.get(), getInitializationCode());
+ }
+ }
+
+ private void checkHasField() {
+ if (!hasFieldSpec()) {
+ throw new UnsupportedOperationException();
+ }
+ }
+
/** Initialization state for a factory field. */
enum InitializationState {
/** The field is {@code null}. */
@@ -145,74 +234,4 @@
}
}
}
-
- private BindingExpression(
- RequestFulfillment requestFulfillmentDelegate, Optional<FieldSpec> fieldSpec) {
- super(requestFulfillmentDelegate.bindingKey());
- this.requestFulfillmentDelegate = requestFulfillmentDelegate;
- this.fieldSpec = fieldSpec;
- }
-
- /** Returns true if this binding expression has a field spec. */
- boolean hasFieldSpec() {
- return fieldSpec.isPresent();
- }
-
- /** Returns the name of this binding's underlying field. Only valid for field types. */
- String fieldName() {
- checkState(hasFieldSpec());
- return fieldSpec.get().name;
- }
-
- @Override
- CodeBlock getSnippetForDependencyRequest(DependencyRequest request, ClassName requestingClass) {
- return requestFulfillmentDelegate.getSnippetForDependencyRequest(request, requestingClass);
- }
-
- @Override
- CodeBlock getSnippetForFrameworkDependency(
- FrameworkDependency frameworkDependency, ClassName requestingClass) {
- return requestFulfillmentDelegate.getSnippetForFrameworkDependency(
- frameworkDependency, requestingClass);
- }
-
- /** Returns this field's field spec, if it has one. */
- Optional<FieldSpec> fieldSpec() {
- return fieldSpec;
- }
-
- /** Sets the code for initializing this field. */
- void setInitializationCode(CodeBlock initializeDeferredBindingFields, CodeBlock initializeField) {
- this.initializeDeferredBindingFields = Optional.of(initializeDeferredBindingFields);
- this.initializeField = Optional.of(initializeField);
- }
-
- /** Returns the initialization code for this field. */
- Optional<CodeBlock> getInitializationCode() {
- verify(initializeDeferredBindingFields.isPresent() == initializeField.isPresent());
- return initializeDeferredBindingFields.map(
- value -> CodeBlocks.concat(ImmutableList.of(value, initializeField.get())));
- }
-
- /** Returns the initialization state for this field. Only valid for field types. */
- InitializationState fieldInitializationState() {
- checkState(hasFieldSpec());
- return fieldInitializationState;
- }
-
- /** Sets the initialization state for this field. Only valid for field types. */
- void setFieldInitializationState(InitializationState fieldInitializationState) {
- checkState(hasFieldSpec());
- checkArgument(this.fieldInitializationState.compareTo(fieldInitializationState) < 0);
- this.fieldInitializationState = fieldInitializationState;
- }
-
- /** Calls the consumer to initialize a field if this field/initialization is present. */
- void initializeField(BiConsumer<FieldSpec, CodeBlock> initializationConsumer) {
- if (hasFieldSpec()) {
- Optional<CodeBlock> initCode = getInitializationCode();
- checkState(initCode.isPresent());
- initializationConsumer.accept(fieldSpec.get(), initCode.get());
- }
- }
}