Program: 59826
Project: 59826
Buggy source:
@SuppressWarnings({"String_Node_Str","String_Node_Str"}) private void buildInjectionPlan(String name,Map<String,InjectionPlan<?>> memo){
  if (memo.containsKey(name)) {
    if (InjectionPlan.BUILDING == memo.get(name)) {
      throw new IllegalStateException("String_Node_Str" + name);
    }
 else {
      return;
    }
  }
  memo.put(name,InjectionPlan.BUILDING);
  Node n;
  try {
    n=tc.namespace.getNode(name);
  }
 catch (  NameResolutionException e) {
    throw new IllegalArgumentException("String_Node_Str" + name,e);
  }
  final InjectionPlan<?> ip;
  if (n instanceof NamedParameterNode) {
    NamedParameterNode<?> np=(NamedParameterNode<?>)n;
    Object instance=tc.namedParameterInstances.get(n);
    if (instance == null) {
      instance=np.defaultInstance;
    }
    ip=new Instance<Object>(np,instance);
  }
 else   if (n instanceof ClassNode) {
    ClassNode<?> cn=(ClassNode<?>)n;
    if (tc.singletonInstances.containsKey(cn)) {
      ip=new Instance<Object>(cn,tc.singletonInstances.get(cn));
    }
 else     if (tc.boundConstructors.containsKey(cn)) {
      String constructorName=tc.boundConstructors.get(cn).getName();
      buildInjectionPlan(constructorName,memo);
      ip=new InjectionPlan.DelegatedImpl(cn,memo.get(constructorName));
      memo.put(cn.getClazz().getName(),ip);
    }
 else     if (tc.boundImpls.containsKey(cn) && !tc.boundImpls.get(cn).equals(cn.getClazz())) {
      String implName=tc.boundImpls.get(cn).getName();
      buildInjectionPlan(implName,memo);
      ip=new InjectionPlan.DelegatedImpl(cn,memo.get(implName));
      memo.put(cn.getClazz().getName(),ip);
    }
 else {
      List<ClassNode<?>> classNodes=new ArrayList<ClassNode<?>>();
      if (tc.boundImpls.get(cn) == null) {
        for (        ClassNode<?> c : tc.namespace.getKnownImpls(cn)) {
          classNodes.add(c);
        }
      }
      classNodes.add(cn);
      List<InjectionPlan<?>> sub_ips=new ArrayList<InjectionPlan<?>>();
      for (      ClassNode<?> thisCN : classNodes) {
        List<InjectionPlan<?>> constructors=new ArrayList<InjectionPlan<?>>();
        for (        ConstructorDef<?> def : thisCN.injectableConstructors) {
          List<InjectionPlan<?>> args=new ArrayList<InjectionPlan<?>>();
          for (          ConstructorArg arg : def.args) {
            String argName=arg.getName();
            buildInjectionPlan(argName,memo);
            args.add(memo.get(argName));
          }
          InjectionPlan.Constructor constructor=new InjectionPlan.Constructor(thisCN,def,args.toArray(new InjectionPlan[0]));
          constructors.add(constructor);
        }
        sub_ips.add(wrapInjectionPlans(thisCN.getName(),constructors,false));
      }
      if (classNodes.size() == 1 && classNodes.get(0).getClazz().getName().equals(name)) {
        ip=wrapInjectionPlans(name,sub_ips,false);
      }
 else {
        ip=wrapInjectionPlans(name,sub_ips,true);
      }
    }
  }
 else   if (n instanceof PackageNode) {
    throw new IllegalArgumentException("String_Node_Str");
  }
 else   if (n instanceof NamespaceNode) {
    throw new IllegalArgumentException("String_Node_Str");
  }
 else {
    throw new IllegalStateException("String_Node_Str" + n);
  }
  memo.put(name,ip);
}

Fixed version (ground truth):
@SuppressWarnings({"String_Node_Str","String_Node_Str"}) private void buildInjectionPlan(String name,Map<String,InjectionPlan<?>> memo){
  if (memo.containsKey(name)) {
    if (InjectionPlan.BUILDING == memo.get(name)) {
      throw new IllegalStateException("String_Node_Str" + name);
    }
 else {
      return;
    }
  }
  memo.put(name,InjectionPlan.BUILDING);
  Node n;
  try {
    n=tc.namespace.getNode(name);
  }
 catch (  NameResolutionException e) {
    throw new IllegalArgumentException("String_Node_Str" + name,e);
  }
  final InjectionPlan<?> ip;
  if (n instanceof NamedParameterNode) {
    NamedParameterNode<?> np=(NamedParameterNode<?>)n;
    Object instance=tc.namedParameterInstances.get(n);
    if (instance == null) {
      instance=np.defaultInstance;
    }
    ip=new Instance<Object>(np,instance);
  }
 else   if (n instanceof ClassNode) {
    ClassNode<?> cn=(ClassNode<?>)n;
    if (tc.singletonInstances.containsKey(cn)) {
      ip=new Instance<Object>(cn,tc.singletonInstances.get(cn));
    }
 else     if (tc.boundConstructors.containsKey(cn)) {
      String constructorName=tc.boundConstructors.get(cn).getName();
      buildInjectionPlan(constructorName,memo);
      ip=new InjectionPlan.DelegatedImpl(cn,memo.get(constructorName));
      memo.put(cn.getClazz().getName(),ip);
    }
 else     if (tc.boundImpls.containsKey(cn) && !tc.boundImpls.get(cn).equals(cn.getClazz())) {
      String implName=tc.boundImpls.get(cn).getName();
      buildInjectionPlan(implName,memo);
      ip=new InjectionPlan.DelegatedImpl(cn,memo.get(implName));
      memo.put(cn.getClazz().getName(),ip);
    }
 else {
      List<ClassNode<?>> classNodes=new ArrayList<ClassNode<?>>();
      if (tc.boundImpls.get(cn) == null) {
        for (        ClassNode<?> c : tc.namespace.getKnownImpls(cn)) {
          classNodes.add(c);
        }
      }
      classNodes.add(cn);
      List<InjectionPlan<?>> sub_ips=new ArrayList<InjectionPlan<?>>();
      for (      ClassNode<?> thisCN : classNodes) {
        final List<InjectionPlan<?>> constructors=new ArrayList<InjectionPlan<?>>();
        final List<ConstructorDef<?>> constructorList=new ArrayList<>();
        if (tc.legacyConstructors.containsKey(thisCN)) {
          constructorList.add(tc.legacyConstructors.get(thisCN));
        }
        constructorList.addAll(Arrays.asList(thisCN.injectableConstructors));
        for (        ConstructorDef<?> def : constructorList) {
          List<InjectionPlan<?>> args=new ArrayList<InjectionPlan<?>>();
          for (          ConstructorArg arg : def.args) {
            String argName=arg.getName();
            buildInjectionPlan(argName,memo);
            args.add(memo.get(argName));
          }
          InjectionPlan.Constructor constructor=new InjectionPlan.Constructor(thisCN,def,args.toArray(new InjectionPlan[0]));
          constructors.add(constructor);
        }
        sub_ips.add(wrapInjectionPlans(thisCN.getName(),constructors,false));
      }
      if (classNodes.size() == 1 && classNodes.get(0).getClazz().getName().equals(name)) {
        ip=wrapInjectionPlans(name,sub_ips,false);
      }
 else {
        ip=wrapInjectionPlans(name,sub_ips,true);
      }
    }
  }
 else   if (n instanceof PackageNode) {
    throw new IllegalArgumentException("String_Node_Str");
  }
 else   if (n instanceof NamespaceNode) {
    throw new IllegalArgumentException("String_Node_Str");
  }
 else {
    throw new IllegalStateException("String_Node_Str" + n);
  }
  memo.put(name,ip);
}