test_class.file: producers/src/test/java/dagger/producers/internal/AbstractProducerTest.java
test_class.identifier: AbstractProducerTest
test_case.body: @Test public void get_nullPointerException() {
      Producer<Object> producer = new AbstractProducer<Object>() {
        @Override public ListenableFuture<Object> compute() {
          return null;
        }
      };
      try {
        producer.get();
        fail();
      } catch (NullPointerException expected) {
      }
    }
test_case.class_method_signature: AbstractProducerTest.get_nullPointerException()
test_case.full_signature: @Test public void get_nullPointerException()
test_case.identifier: get_nullPointerException
test_case.invocations: get fail
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void get_nullPointerException()
focal_class.declarator: instance = null
focal_class.modifier: private volatile
focal_class.original_string: private volatile ListenableFuture<T> instance = null;
focal_class.type: ListenableFuture<T>
focal_class.var_name: instance
focal_class.file: producers/src/main/java/dagger/producers/internal/AbstractProducer.java
focal_class.identifier: AbstractProducer
focal_class.interfaces: implements Producer<T>
focal_class.class_method_signature: AbstractProducer.compute()
focal_class.full_signature: protected abstract ListenableFuture<T> compute()
focal_class.identifier: compute
focal_class.modifiers: protected abstract
focal_class.parameters: ()
focal_class.return: ListenableFuture<T>
focal_class.signature: ListenableFuture<T> compute()
focal_class.class_method_signature: AbstractProducer.get()
focal_class.full_signature: @Override public final ListenableFuture<T> get()
focal_class.identifier: get
focal_class.modifiers: @Override public final
focal_class.parameters: ()
focal_class.return: ListenableFuture<T>
focal_class.signature: ListenableFuture<T> get()
focal_method.body: @Override
    public final ListenableFuture<T> get() {
      // double-check idiom from EJ2: Item 71
      ListenableFuture<T> result = instance;
      if (result == null) {
        synchronized (this) {
          result = instance;
          if (result == null) {
            instance = result = compute();
            if (result == null) {
              throw new NullPointerException("compute returned null");
            }
          }
        }
      }
      return result;
    }
focal_method.class_method_signature: AbstractProducer.get()
focal_method.full_signature: @Override public final ListenableFuture<T> get()
focal_method.identifier: get
focal_method.invocations: compute
focal_method.modifiers: @Override public final
focal_method.parameters: ()
focal_method.return: ListenableFuture<T>
focal_method.signature: ListenableFuture<T> get()