in archaius2-persisted2/src/main/java/com/netflix/archaius/persisted2/ScopePriorityPropertyValueResolver.java [30:59]
public String resolve(String propName, List<ScopedValue> scopesValues) {
// Select the first as the starting candidate
Iterator<ScopedValue> iter = scopesValues.iterator();
ScopedValue p1 = iter.next();
// For each subsequent variation
while (iter.hasNext()) {
ScopedValue p2 = iter.next();
Iterator<Set<String>> s1 = p1.getScopes().values().iterator();
Iterator<Set<String>> s2 = p2.getScopes().values().iterator();
// Iterate through scopes in priority order
while (s1.hasNext()) {
Set<String> v1 = s1.next();
Set<String> v2 = s2.next();
if (v1.isEmpty() && !v2.isEmpty()) {
p1 = p2;
break;
}
else if (!v1.isEmpty() && v2.isEmpty()) {
break;
}
// Continue as long as no scope yet or both have scopes
}
}
return p1.getValue();
}