public void crossReferenceMetaAnnotations() throws CrossReferenceException
   {
      Set<String> unresolved = new HashSet<String>();

      Set<String> index = new HashSet<String>();
      index.addAll(annotationIndex.keySet());

      for (String annotation : index)
      {
         if (ignoreScan(annotation))
         {
            continue;
         }
         if (classIndex.containsKey(annotation))
         {
            for (String xref : classIndex.get(annotation))
            {
               annotationIndex.get(xref).addAll(annotationIndex.get(annotation));
            }
            continue;
         }
         InputStream bits = Thread.currentThread().getContextClassLoader().getResourceAsStream(annotation.replace('.', '/') + ".class");
         if (bits == null)
         {
            unresolved.add(annotation);
            continue;
         }
         try
         {
            scanClass(bits);
         }
         catch (IOException e)
         {
            unresolved.add(annotation);
         }
         for (String xref : classIndex.get(annotation))
         {
            annotationIndex.get(xref).addAll(annotationIndex.get(annotation));
         }

      }
      if (unresolved.size() > 0) throw new CrossReferenceException(unresolved);
   }