code: private <T extends Attribute.Compound> void complete(Annotate.AnnotateRepeatedContext<T> ctx) {
          Log log = ctx.log;
          Env<AttrContext> env = ctx.env;
          JavaFileObject oldSource = log.useSource(env.toplevel.sourcefile);
          try {
              // TODO: can we reduce duplication in the following branches?
              if (ctx.isTypeCompound) {
                  Assert.check(!isTypesEmpty());
  
                  if (isTypesEmpty()) {
                      return;
                  }
  
                  List<Attribute.TypeCompound> result = List.nil();
                  for (Attribute.TypeCompound a : getTypeAttributes()) {
                      if (a instanceof Placeholder) {
                          @SuppressWarnings("unchecked")
                          Placeholder<Attribute.TypeCompound> ph = (Placeholder<Attribute.TypeCompound>) a;
                          Attribute.TypeCompound replacement = replaceOne(ph, ph.getRepeatedContext());
  
                          if (null != replacement) {
                              result = result.prepend(replacement);
                          }
                      } else {
                          result = result.prepend(a);
                      }
                  }
  
                  type_attributes = result.reverse();
  
                  Assert.check(SymbolMetadata.this.getTypePlaceholders().isEmpty());
              } else {
                  Assert.check(!pendingCompletion());
  
                  if (isEmpty()) {
                      return;
                  }
  
                  List<Attribute.Compound> result = List.nil();
                  for (Attribute.Compound a : getDeclarationAttributes()) {
                      if (a instanceof Placeholder) {
                          @SuppressWarnings("unchecked")
                          Attribute.Compound replacement = replaceOne((Placeholder<T>) a, ctx);
  
                          if (null != replacement) {
                              result = result.prepend(replacement);
                          }
                      } else {
                          result = result.prepend(a);
                      }
                  }
  
                  attributes = result.reverse();
  
                  Assert.check(SymbolMetadata.this.getPlaceholders().isEmpty());
              }
          } finally {
              log.useSource(oldSource);
          }
      }
docs: /*
  Replace Placeholders for repeating annotations with their containers