View Javadoc
1   /*
2    * Copyright (c) 2006 JMockit developers
3    * This file is subject to the terms of the MIT license (see LICENSE.txt).
4    */
5   package mockit.internal.injection;
6   
7   import static mockit.internal.util.Utilities.getClassType;
8   
9   import edu.umd.cs.findbugs.annotations.NonNull;
10  import edu.umd.cs.findbugs.annotations.Nullable;
11  
12  import java.lang.reflect.Type;
13  import java.util.ArrayList;
14  import java.util.List;
15  
16  final class MultiValuedProvider extends InjectionProvider {
17      @NonNull
18      private final List<InjectionProvider> individualProviders;
19  
20      MultiValuedProvider(@NonNull Type elementType) {
21          super(elementType, "");
22          individualProviders = new ArrayList<>();
23      }
24  
25      void addInjectable(@NonNull InjectionProvider provider) {
26          individualProviders.add(provider);
27      }
28  
29      @NonNull
30      @Override
31      public Class<?> getClassOfDeclaredType() {
32          return getClassType(declaredType);
33      }
34  
35      @NonNull
36      @Override
37      public Object getValue(@Nullable Object owner) {
38          List<Object> values = new ArrayList<>(individualProviders.size());
39  
40          for (InjectionProvider provider : individualProviders) {
41              Object value = provider.getValue(owner);
42              values.add(value);
43          }
44  
45          return values;
46      }
47  }