test_class.file: core/src/test/java/dagger/internal/DoubleCheckLazyTest.java
test_class.identifier: DoubleCheckLazyTest
test_case.body: @Test public void get() throws Exception {
      int numThreads = 10;
      ExecutorService executor = Executors.newFixedThreadPool(numThreads);
  
      final CountDownLatch latch = new CountDownLatch(numThreads);
      LatchedProvider provider = new LatchedProvider(latch);
      final Lazy<Object> lazy = DoubleCheckLazy.create(provider);
  
      List<Callable<Object>> tasks = Lists.newArrayListWithCapacity(numThreads);
      for (int i = 0; i < numThreads; i++) {
        tasks.add(new Callable<Object>() {
          @Override public Object call() throws Exception {
            latch.countDown();
            return lazy.get();
          }
        });
      }
  
      List<Future<Object>> futures = executor.invokeAll(tasks);
  
      assert_().that(provider.provisions.get()).isEqualTo(1);
      Set<Object> results = Sets.newIdentityHashSet();
      for (Future<Object> future : futures) {
        results.add(future.get());
      }
      assert_().that(results.size()).isEqualTo(1);
    }
test_case.class_method_signature: DoubleCheckLazyTest.get()
test_case.full_signature: @Test public void get()
test_case.identifier: get
test_case.invocations: newFixedThreadPool create newArrayListWithCapacity add countDown get invokeAll isEqualTo that assert_ get newIdentityHashSet add get isEqualTo that assert_ size
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void get()
focal_class.declarator: UNINITIALIZED = new Object()
focal_class.modifier: private static final
focal_class.original_string: private static final Object UNINITIALIZED = new Object();
focal_class.type: Object
focal_class.var_name: UNINITIALIZED
focal_class.declarator: provider
focal_class.modifier: private final
focal_class.original_string: private final Provider<T> provider;
focal_class.type: Provider<T>
focal_class.var_name: provider
focal_class.declarator: instance = UNINITIALIZED
focal_class.modifier: private volatile
focal_class.original_string: private volatile Object instance = UNINITIALIZED;
focal_class.type: Object
focal_class.var_name: instance
focal_class.file: core/src/main/java/dagger/internal/DoubleCheckLazy.java
focal_class.identifier: DoubleCheckLazy
focal_class.interfaces: implements Lazy<T>
focal_class.class_method_signature: DoubleCheckLazy.DoubleCheckLazy(Provider<T> provider)
focal_class.full_signature: private  DoubleCheckLazy(Provider<T> provider)
focal_class.identifier: DoubleCheckLazy
focal_class.modifiers: private
focal_class.parameters: (Provider<T> provider)
focal_class.signature:  DoubleCheckLazy(Provider<T> provider)
focal_class.class_method_signature: DoubleCheckLazy.get()
focal_class.full_signature: @SuppressWarnings("unchecked") // cast only happens when result comes from the factory @Override public T get()
focal_class.identifier: get
focal_class.modifiers: @SuppressWarnings("unchecked") // cast only happens when result comes from the factory @Override public
focal_class.parameters: ()
focal_class.return: T
focal_class.signature: T get()
focal_class.class_method_signature: DoubleCheckLazy.create(Provider<T> provider)
focal_class.full_signature: public static Lazy<T> create(Provider<T> provider)
focal_class.identifier: create
focal_class.modifiers: public static
focal_class.parameters: (Provider<T> provider)
focal_class.return: Lazy<T>
focal_class.signature: Lazy<T> create(Provider<T> provider)
focal_method.body: @SuppressWarnings("unchecked") // cast only happens when result comes from the factory
    @Override
    public T get() {
      // to suppress it.
      Object result = instance;
      if (result == UNINITIALIZED) {
        synchronized (this) {
          result = instance;
          if (result == UNINITIALIZED) {
            instance = result = provider.get();
          }
        }
      }
      return (T) result;
    }
focal_method.class_method_signature: DoubleCheckLazy.get()
focal_method.full_signature: @SuppressWarnings("unchecked") // cast only happens when result comes from the factory @Override public T get()
focal_method.identifier: get
focal_method.invocations: get
focal_method.modifiers: @SuppressWarnings("unchecked") // cast only happens when result comes from the factory @Override public
focal_method.parameters: ()
focal_method.return: T
focal_method.signature: T get()