@NotNull private static List<Color> resolveMultipleColors(@NotNull RenderResources resources,@Nullable ResourceValue value,@NotNull Project project,int depth){
  if (depth >= MAX_RESOURCE_INDIRECTION) {
    LOG.warn("too deep " + value);
    return Collections.emptyList();
  }
  if (value != null) {
    value=resources.resolveResValue(value);
  }
  if (value == null) {
    return Collections.emptyList();
  }
  final List<Color> result=new ArrayList<>();
  StateList stateList=resolveStateList(resources,value,project);
  if (stateList != null) {
    for (    StateListState state : stateList.getStates()) {
      List<Color> stateColors;
      ResourceValue resolvedStateResource=resources.findResValue(state.getValue(),false);
      if (resolvedStateResource != null) {
        stateColors=resolveMultipleColors(resources,resolvedStateResource,project,depth + 1);
      }
 else {
        Color color=parseColor(state.getValue());
        stateColors=color == null ? Collections.emptyList() : ImmutableList.of(color);
      }
      for (      Color color : stateColors) {
        try {
          result.add(makeColorWithAlpha(resources,color,state.getAlpha()));
        }
 catch (        NumberFormatException e) {
          result.add(color);
          LOG.warn(String.format(ALPHA_FLOATING_ERROR_FORMAT,stateList.getDirName(),stateList.getFileName()));
        }
      }
    }
  }
 else {
    Color color=parseColor(value.getValue());
    if (color != null) {
      result.add(color);
    }
  }
  return result;
}

@ NotNull private static List < Color > resolveMultipleColors ( @ NotNull RenderResources resources , @ Nullable ResourceValue value , @ NotNull Project project , int depth ) { if ( depth >= MAX_RESOURCE_INDIRECTION ) { LOG . warn ( "too deep " + value ) ; return Collections . emptyList ( ) ; } if ( value != null ) { value = resources . resolveResValue ( value ) ; } if ( value == null ) { return Collections . emptyList ( ) ; } final List < Color > result = new ArrayList < > ( ) ; StateList stateList = resolveStateList ( resources , value , project ) ; if ( stateList != null ) { for ( StateListState state : stateList . getStates ( ) ) { List < Color > stateColors ; ResourceValue resolvedStateResource = resources . findResValue ( state . getValue ( ) , false ) ; if ( resolvedStateResource != null ) { stateColors = resolveMultipleColors ( resources , resolvedStateResource , project , depth + 1 ) ; } else { Color color = parseColor ( state . getValue ( ) ) ; stateColors = color == null ? Collections . emptyList ( ) : ImmutableList . of ( color ) ; } for ( Color color : stateColors ) { try { result . add ( makeColorWithAlpha ( resources , color , state . getAlpha ( ) ) ) ; } catch ( NumberFormatException e ) { result . add ( color ) ; LOG . warn ( String . format ( ALPHA_FLOATING_ERROR_FORMAT , stateList . getDirName ( ) , stateList . getFileName ( ) ) ) ; } } } } else { Color color = parseColor ( value . getValue ( ) ) ; if ( color != null ) { result . add ( color ) ; } } return result ; }
tries to resolve colors from given resource value . when state list is encountered all possibilities are explored .
