Merge branch 'stable-2.15' * stable-2.15: Add test for NPE in account index query Change-Id: I9180a1c70417466bb7b2f1900baa99f36860482e
diff --git a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java index 6138171..33b649a 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java +++ b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
@@ -34,6 +34,7 @@ import com.google.gerrit.server.account.GroupBackend; import com.google.gerrit.server.account.GroupMembership; import com.google.gerrit.server.account.ListGroupMembership; +import com.google.gerrit.server.account.externalids.ExternalId; import com.google.gerrit.server.project.ProjectState; import com.google.gerrit.server.query.account.AccountPredicates; import com.google.gerrit.server.query.account.AccountQueryBuilder; @@ -45,6 +46,7 @@ import com.google.inject.Singleton; import java.util.Collection; import java.util.Collections; +import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -94,8 +96,8 @@ public GroupMembership membershipsOf(IdentifiedUser user) { ImmutableList.Builder<AccountGroup.UUID> groups = ImmutableList.builder(); groups.add(uuid(user.getAccountId())); - if (user.getUserName() != null) { - groups.add(uuid(user.getUserName())); + if (user.getUserName().isPresent()) { + groups.add(uuid(user.getUserName().get())); } return new ListGroupMembership(groups.build()); } @@ -103,17 +105,17 @@ @Override public GroupDescription.Basic get(AccountGroup.UUID uuid) { String ident = username(uuid); - AccountState state; + Optional<AccountState> state; if (ident.matches(ACCOUNT_ID_PATTERN)) { state = accountCache.get(new Account.Id(Integer.parseInt(ident))); - } else if (ident.matches(Account.USER_NAME_PATTERN)) { + } else if (ExternalId.isValidUsername(ident)) { state = accountCache.getByUsername(ident); } else { return null; } - if (state != null) { - final String name = nameOf(uuid, state); - final String email = Strings.emptyToNull(state.getAccount().getPreferredEmail()); + if (state.isPresent()) { + String name = nameOf(uuid, state.get()); + String email = Strings.emptyToNull(state.get().getAccount().getPreferredEmail()); return new GroupDescription.Basic() { @Override public AccountGroup.UUID getGroupUUID() { @@ -154,8 +156,8 @@ @Override public GroupReference apply(AccountState state) { AccountGroup.UUID uuid; - if (state.getUserName() != null) { - uuid = uuid(state.getUserName()); + if (state.getUserName().isPresent()) { + uuid = uuid(state.getUserName().get()); } else { uuid = uuid(state.getAccount().getId()); } @@ -186,21 +188,21 @@ uuid.get().startsWith(UUID_PREFIX), "SingleUserGroup does not handle %s", uuid.get()); } - private static String nameOf(AccountGroup.UUID uuid, AccountState account) { + private static String nameOf(AccountGroup.UUID uuid, AccountState accountState) { StringBuilder buf = new StringBuilder(); - if (account.getAccount().getFullName() != null) { - buf.append(account.getAccount().getFullName()); + if (accountState.getAccount().getFullName() != null) { + buf.append(accountState.getAccount().getFullName()); } - if (account.getUserName() != null) { + if (accountState.getUserName().isPresent()) { if (buf.length() > 0) { - buf.append(" (").append(account.getUserName()).append(")"); + buf.append(" (").append(accountState.getUserName().get()).append(")"); } else { - buf.append(account.getUserName()); + buf.append(accountState.getUserName().get()); } } else if (buf.length() > 0) { - buf.append(" (").append(account.getAccount().getId().get()).append(")"); + buf.append(" (").append(accountState.getAccount().getId().get()).append(")"); } else { - buf.append(account.getAccount().getId().get()); + buf.append(accountState.getAccount().getId().get()); } String ident = username(uuid);