/*
* Copyright 2016-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.rules;
import com.google.common.collect.ImmutableSet;
public class VisibilityChecker {
private final ObeysVisibility owner;
private final ImmutableSet<VisibilityPattern> visibilityPatterns;
private final ImmutableSet<VisibilityPattern> withinViewPatterns;
public VisibilityChecker(
ObeysVisibility owner,
ImmutableSet<VisibilityPattern> visibilityPatterns,
ImmutableSet<VisibilityPattern> withinViewPatterns) {
this.owner = owner;
this.visibilityPatterns = visibilityPatterns;
this.withinViewPatterns = withinViewPatterns;
}
public boolean isVisibleTo(ObeysVisibility viewer) {
if (!viewer.getVisibilityChecker().withinViewPatterns.isEmpty()) {
boolean withinView = false;
for (VisibilityPattern pattern : viewer.getVisibilityChecker().withinViewPatterns) {
if (pattern.checkVisibility(owner, viewer)) {
withinView = true;
break;
}
}
if (!withinView) {
return false;
}
}
if (owner.getBuildTarget().getCellPath().equals(viewer.getBuildTarget().getCellPath())
&& owner.getBuildTarget().getBaseName().equals(viewer.getBuildTarget().getBaseName())) {
return true;
}
for (VisibilityPattern pattern : visibilityPatterns) {
if (pattern.checkVisibility(viewer, owner)) {
return true;
}
}
return false;
}
public ImmutableSet<VisibilityPattern> getVisibilityPatterns() {
return visibilityPatterns;
}
public ImmutableSet<VisibilityPattern> getWithinViewPatterns() {
return withinViewPatterns;
}
}