code: public void init(ClassLoader loader,
                       ContextSource[] contextSources,
                       String[] prefixes, boolean profilingEnabled) throws Exception {
  
  
          mSources = contextSources;
          int len = contextSources.length;
          ArrayList<Class<?>> contextList = new ArrayList<Class<?>>(len);
          ArrayList<ClassLoader> delegateList = new ArrayList<ClassLoader>(len);
  
          for (int j = 0; j < contextSources.length; j++) {
              Class<?> type = contextSources[j].getContextType();
              if (type != null) {
                  contextList.add(type);
                  ClassLoader scout = type.getClassLoader();
                  if (scout != null && !delegateList.contains(scout)) {
                      delegateList.add(scout);
                  }
              }
          }
  
          mContextsInOrder = contextList.toArray(new Class[contextList.size()]);
          ClassLoader[] delegateLoaders =
              delegateList.toArray(new ClassLoader[delegateList.size()]);
  
          mInjector = new ClassInjector
              (new DelegateClassLoader(loader, delegateLoaders));
  
          mProfilingEnabled = profilingEnabled;
  
          int observerMode = profilingEnabled ? MergedClass.OBSERVER_ENABLED | MergedClass.OBSERVER_EXTERNAL : MergedClass.OBSERVER_ENABLED;
  
          // temporarily include interface for UtilityContext for backwards
          // compatibility with old code relying on it.
          Class<?>[] interfaces = { UtilityContext.class };
          mConstr = MergedClass.getConstructor2(mInjector,
                                                mContextsInOrder,
                                                prefixes,
                                                interfaces,
                                                observerMode);
      }
docs: Creates a unified context source for all those passed in.  An Exception
  may be thrown if the call to a source's getContextType() method throws
  an exception.