diff options
Diffstat (limited to 'java/com/google/gerrit/entities/AccessSection.java')
-rw-r--r-- | java/com/google/gerrit/entities/AccessSection.java | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/java/com/google/gerrit/entities/AccessSection.java b/java/com/google/gerrit/entities/AccessSection.java index 69a234a5c4..8ae0a5dbed 100644 --- a/java/com/google/gerrit/entities/AccessSection.java +++ b/java/com/google/gerrit/entities/AccessSection.java @@ -18,12 +18,14 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import static java.util.Objects.requireNonNull; import com.google.auto.value.AutoValue; +import com.google.auto.value.extension.memoized.Memoized; import com.google.common.collect.ImmutableList; import com.google.gerrit.common.Nullable; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.Consumer; +import java.util.regex.Pattern; /** Portion of a {@link Project} describing access rules. */ @AutoValue @@ -42,6 +44,20 @@ public abstract class AccessSection implements Comparable<AccessSection> { /** Name of the access section. It could be a ref pattern or something else. */ public abstract String getName(); + /** + * A compiled regular expression in case {@link #getName()} is a regular expression. This is + * memoized to save callers from compiling patterns for every use. + */ + @Memoized + public Optional<Pattern> getNamePattern() { + if (isValidRefSectionName(getName()) + && getName().startsWith(REGEX_PREFIX) + && !getName().contains("${")) { + return Optional.of(Pattern.compile(getName())); + } + return Optional.empty(); + } + public abstract ImmutableList<Permission> getPermissions(); public static AccessSection create(String name) { |