Clean up RefControl by inlining trivial methods and moving state checks
This commit cleans up RefControl by inlining one-line methods directly where called if the method only has a single caller. It delegates the project state check for isVisible to ChangeControl and ForRef.READ as this is the second last occurence of a state check in RefControl. This splits up further refactoring into two steps which will happen in subsequent commits. Change-Id: Ieccf0622beaec2fc5202d660d87e53630469c8ac
This commit is contained in:
		@@ -22,6 +22,7 @@ import com.google.common.collect.Sets;
 | 
			
		||||
import com.google.gerrit.common.Nullable;
 | 
			
		||||
import com.google.gerrit.common.data.LabelFunction;
 | 
			
		||||
import com.google.gerrit.common.data.LabelType;
 | 
			
		||||
import com.google.gerrit.common.data.Permission;
 | 
			
		||||
import com.google.gerrit.common.data.PermissionRange;
 | 
			
		||||
import com.google.gerrit.extensions.restapi.AuthException;
 | 
			
		||||
import com.google.gerrit.reviewdb.client.Account;
 | 
			
		||||
@@ -129,7 +130,7 @@ class ChangeControl {
 | 
			
		||||
    if (getChange().isPrivate() && !isPrivateVisible(db, cd)) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    return refControl.isVisible();
 | 
			
		||||
    return refControl.isVisible() && getProjectControl().getProject().getState().permitsRead();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Can this user abandon this change? */
 | 
			
		||||
@@ -137,7 +138,7 @@ class ChangeControl {
 | 
			
		||||
    return (isOwner() // owner (aka creator) of the change can abandon
 | 
			
		||||
            || refControl.isOwner() // branch owner can abandon
 | 
			
		||||
            || getProjectControl().isOwner() // project owner can abandon
 | 
			
		||||
            || refControl.canAbandon() // user can abandon a specific ref
 | 
			
		||||
            || refControl.canPerform(Permission.ABANDON) // user can abandon a specific ref
 | 
			
		||||
            || getProjectControl().isAdmin())
 | 
			
		||||
        && !isPatchSetLocked(db);
 | 
			
		||||
  }
 | 
			
		||||
@@ -147,7 +148,8 @@ class ChangeControl {
 | 
			
		||||
    switch (status) {
 | 
			
		||||
      case NEW:
 | 
			
		||||
      case ABANDONED:
 | 
			
		||||
        return (isOwner() && refControl.canDeleteOwnChanges()) || getProjectControl().isAdmin();
 | 
			
		||||
        return (isOwner() && refControl.canPerform(Permission.DELETE_OWN_CHANGES))
 | 
			
		||||
            || getProjectControl().isAdmin();
 | 
			
		||||
      case MERGED:
 | 
			
		||||
      default:
 | 
			
		||||
        return false;
 | 
			
		||||
@@ -241,7 +243,8 @@ class ChangeControl {
 | 
			
		||||
      return isOwner() // owner (aka creator) of the change can edit topic
 | 
			
		||||
          || refControl.isOwner() // branch owner can edit topic
 | 
			
		||||
          || getProjectControl().isOwner() // project owner can edit topic
 | 
			
		||||
          || refControl.canEditTopicName() // user can edit topic on a specific ref
 | 
			
		||||
          || refControl.canPerform(
 | 
			
		||||
              Permission.EDIT_TOPIC_NAME) // user can edit topic on a specific ref
 | 
			
		||||
          || getProjectControl().isAdmin();
 | 
			
		||||
    }
 | 
			
		||||
    return refControl.canForceEditTopicName();
 | 
			
		||||
@@ -261,7 +264,7 @@ class ChangeControl {
 | 
			
		||||
  private boolean canEditAssignee() {
 | 
			
		||||
    return isOwner()
 | 
			
		||||
        || getProjectControl().isOwner()
 | 
			
		||||
        || refControl.canEditAssignee()
 | 
			
		||||
        || refControl.canPerform(Permission.EDIT_ASSIGNEE)
 | 
			
		||||
        || isAssignee();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -270,14 +273,15 @@ class ChangeControl {
 | 
			
		||||
    return isOwner() // owner (aka creator) of the change can edit hashtags
 | 
			
		||||
        || refControl.isOwner() // branch owner can edit hashtags
 | 
			
		||||
        || getProjectControl().isOwner() // project owner can edit hashtags
 | 
			
		||||
        || refControl.canEditHashtags() // user can edit hashtag on a specific ref
 | 
			
		||||
        || refControl.canPerform(
 | 
			
		||||
            Permission.EDIT_HASHTAGS) // user can edit hashtag on a specific ref
 | 
			
		||||
        || getProjectControl().isAdmin();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private boolean isPrivateVisible(ReviewDb db, ChangeData cd) throws OrmException {
 | 
			
		||||
    return isOwner()
 | 
			
		||||
        || isReviewer(db, cd)
 | 
			
		||||
        || refControl.canViewPrivateChanges()
 | 
			
		||||
        || refControl.canPerform(Permission.VIEW_PRIVATE_CHANGES)
 | 
			
		||||
        || getUser().isInternalUser();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -259,6 +259,10 @@ public class ProjectState {
 | 
			
		||||
    return config.getMaxObjectSizeLimit();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public boolean statePermitsRead() {
 | 
			
		||||
    return getProject().getState().permitsRead();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public boolean statePermitsWrite() {
 | 
			
		||||
    return getProject().getState().permitsWrite();
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -100,9 +100,7 @@ class RefControl {
 | 
			
		||||
  /** Can this user see this reference exists? */
 | 
			
		||||
  boolean isVisible() {
 | 
			
		||||
    if (isVisible == null) {
 | 
			
		||||
      isVisible =
 | 
			
		||||
          (getUser().isInternalUser() || canPerform(Permission.READ))
 | 
			
		||||
              && isProjectStatePermittingRead();
 | 
			
		||||
      isVisible = getUser().isInternalUser() || canPerform(Permission.READ);
 | 
			
		||||
    }
 | 
			
		||||
    return isVisible;
 | 
			
		||||
  }
 | 
			
		||||
@@ -132,35 +130,6 @@ class RefControl {
 | 
			
		||||
    return canPerform(Permission.SUBMIT, isChangeOwner);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @return true if this user can abandon a change for this ref */
 | 
			
		||||
  boolean canAbandon() {
 | 
			
		||||
    return canPerform(Permission.ABANDON);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @return true if this user can view private changes. */
 | 
			
		||||
  boolean canViewPrivateChanges() {
 | 
			
		||||
    return canPerform(Permission.VIEW_PRIVATE_CHANGES);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @return true if this user can delete their own changes. */
 | 
			
		||||
  boolean canDeleteOwnChanges() {
 | 
			
		||||
    return canPerform(Permission.DELETE_OWN_CHANGES);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @return true if this user can edit topic names. */
 | 
			
		||||
  boolean canEditTopicName() {
 | 
			
		||||
    return canPerform(Permission.EDIT_TOPIC_NAME);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @return true if this user can edit hashtag names. */
 | 
			
		||||
  boolean canEditHashtags() {
 | 
			
		||||
    return canPerform(Permission.EDIT_HASHTAGS);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  boolean canEditAssignee() {
 | 
			
		||||
    return canPerform(Permission.EDIT_ASSIGNEE);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @return true if this user can force edit topic names. */
 | 
			
		||||
  boolean canForceEditTopicName() {
 | 
			
		||||
    return canForcePerform(Permission.EDIT_TOPIC_NAME);
 | 
			
		||||
@@ -189,17 +158,17 @@ class RefControl {
 | 
			
		||||
    return canPerform(permissionName, false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  boolean canPerform(String permissionName, boolean isChangeOwner) {
 | 
			
		||||
    return doCanPerform(permissionName, isChangeOwner, false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ForRef asForRef() {
 | 
			
		||||
    return new ForRefImpl();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private boolean canPerform(String permissionName, boolean isChangeOwner) {
 | 
			
		||||
    return doCanPerform(permissionName, isChangeOwner, false);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private boolean canUpload() {
 | 
			
		||||
    return projectControl.controlForRef("refs/for/" + refName).canPerform(Permission.PUSH)
 | 
			
		||||
        && isProjectStatePermittingWrite();
 | 
			
		||||
        && getProjectControl().getProject().getState().permitsWrite();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @return true if this user can submit merge patch sets to this ref */
 | 
			
		||||
@@ -246,14 +215,6 @@ class RefControl {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private boolean isProjectStatePermittingWrite() {
 | 
			
		||||
    return getProjectControl().getProject().getState().permitsWrite();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private boolean isProjectStatePermittingRead() {
 | 
			
		||||
    return getProjectControl().getProject().getState().permitsRead();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private boolean canPushWithForce() {
 | 
			
		||||
    if (RefNames.REFS_CONFIG.equals(refName) && !projectControl.isOwner()) {
 | 
			
		||||
      // Pushing requires being at least project owner, in addition to push.
 | 
			
		||||
@@ -530,7 +491,7 @@ class RefControl {
 | 
			
		||||
    private boolean can(RefPermission perm) throws PermissionBackendException {
 | 
			
		||||
      switch (perm) {
 | 
			
		||||
        case READ:
 | 
			
		||||
          return isVisible();
 | 
			
		||||
          return isVisible() && getProjectControl().getProjectState().statePermitsRead();
 | 
			
		||||
        case CREATE:
 | 
			
		||||
          // TODO This isn't an accurate test.
 | 
			
		||||
          return canPerform(perm.permissionName().get());
 | 
			
		||||
@@ -562,7 +523,7 @@ class RefControl {
 | 
			
		||||
          return projectControl.controlForRef(MagicBranch.NEW_CHANGE + refName).canSubmit(true);
 | 
			
		||||
 | 
			
		||||
        case READ_PRIVATE_CHANGES:
 | 
			
		||||
          return canViewPrivateChanges();
 | 
			
		||||
          return canPerform(Permission.VIEW_PRIVATE_CHANGES);
 | 
			
		||||
 | 
			
		||||
        case READ_CONFIG:
 | 
			
		||||
          return projectControl
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user