aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar Rumou Duan <rduan@google.com>2016-09-15 16:01:55 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-09-16 07:58:44 +0000
commitdf960c22f2ba057fc389ebeb6a20d5035efeb6ef (patch)
treeaff500d0538af410d782a4d1d1cc5f2dd17a122d /src/main/java/com/google/devtools/build/lib/rules/objc
parent4ce70d25cc206bba960015a97902caebfcd0c7bd (diff)
Add a common class for filtering proto source files.
-- MOS_MIGRATED_REVID=133267681
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java41
3 files changed, 17 insertions, 39 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
index 326ce49f02..2ed8d58eaf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
@@ -24,6 +24,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PROTO_COM
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PROTO_LIB_ATTR;
import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
@@ -32,6 +33,7 @@ import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
+import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
@@ -146,9 +148,9 @@ public class ObjcProtoLibraryRule implements RuleDefinition {
}
}))
.add(
- attr(PROTOBUF_WELL_KNOWN_TYPES, LABEL)
- .cfg(HOST)
- .value(env.getToolsLabel("//tools/objc:protobuf_well_known_types")))
+ ProtoSourceFileBlacklist.blacklistFilegroupAttribute(
+ PROTOBUF_WELL_KNOWN_TYPES,
+ ImmutableList.of(env.getToolsLabel("//tools/objc:protobuf_well_known_types"))))
.add(
attr(XCODE_GEN_ATTR, LABEL)
.cfg(HOST)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 2cb8aa213e..103fe54532 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -56,6 +56,7 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain.RequiresXcodeCon
import com.google.devtools.build.lib.rules.apple.Platform;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
+import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.FileTypeSet;
@@ -891,9 +892,9 @@ public class ObjcRuleClasses {
.cfg(HOST)
.value(env.getToolsLabel("//tools/objc:protobuf_compiler_support")))
.add(
- attr(PROTOBUF_WELL_KNOWN_TYPES, LABEL)
- .cfg(HOST)
- .value(env.getToolsLabel("//tools/objc:protobuf_well_known_types")))
+ ProtoSourceFileBlacklist.blacklistFilegroupAttribute(
+ PROTOBUF_WELL_KNOWN_TYPES,
+ ImmutableList.of(env.getToolsLabel("//tools/objc:protobuf_well_known_types"))))
.override(builder.copy("deps").aspect(objcProtoAspect))
/* <!-- #BLAZE_RULE($objc_linking_rule).ATTRIBUTE(linkopts) -->
Extra flags to pass to the linker.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java
index 0824d2c107..f9635a946d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java
@@ -20,7 +20,6 @@ import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.AbstractConfiguredTarget;
import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
@@ -30,10 +29,10 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
+import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist;
import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
-import com.google.devtools.build.lib.vfs.PathFragment;
/** Common rule attributes used by an objc_proto_library. */
final class ProtoAttributes {
@@ -66,8 +65,6 @@ final class ProtoAttributes {
+ "targets. Please migrate your Protocol Buffers 2 objc_proto_library targets to use the "
+ "portable_proto_filters attribute.";
- private static final PathFragment BAZEL_TOOLS_PREFIX = new PathFragment("external/bazel_tools/");
-
private final RuleContext ruleContext;
/**
@@ -230,41 +227,19 @@ final class ProtoAttributes {
* prevent the well known protos from being generated as they are already generated in the runtime
* library.
*/
- ImmutableSet<Artifact> filterWellKnownProtos(Iterable<Artifact> protoFiles) {
- // Since well known protos are already linked in the runtime library, we have to filter them
- // so they don't get generated again.
- ImmutableSet.Builder<Artifact> filteredProtos = new ImmutableSet.Builder<Artifact>();
- for (Artifact protoFile : protoFiles) {
- if (!isProtoWellKnown(protoFile)) {
- filteredProtos.add(protoFile);
- }
- }
- return filteredProtos.build();
+ Iterable<Artifact> filterWellKnownProtos(Iterable<Artifact> protoFiles) {
+ ProtoSourceFileBlacklist wellKnownProtoBlacklist =
+ new ProtoSourceFileBlacklist(ruleContext, ObjcRuleClasses.PROTOBUF_WELL_KNOWN_TYPES);
+ return wellKnownProtoBlacklist.filter(protoFiles);
}
/** Returns whether the given proto is a well known proto or not. */
boolean isProtoWellKnown(Artifact protoFile) {
- return getWellKnownProtoPaths().contains(protoFile.getExecPath());
- }
-
- private ImmutableSet<PathFragment> getWellKnownProtoPaths() {
- ImmutableSet.Builder<PathFragment> wellKnownProtoPathsBuilder = new ImmutableSet.Builder<>();
- Iterable<Artifact> wellKnownProtoFiles =
- ruleContext
- .getPrerequisiteArtifacts(ObjcRuleClasses.PROTOBUF_WELL_KNOWN_TYPES, Mode.HOST)
- .list();
- for (Artifact wellKnownProtoFile : wellKnownProtoFiles) {
- PathFragment execPath = wellKnownProtoFile.getExecPath();
- if (execPath.startsWith(BAZEL_TOOLS_PREFIX)) {
- wellKnownProtoPathsBuilder.add(execPath.relativeTo(BAZEL_TOOLS_PREFIX));
- } else {
- wellKnownProtoPathsBuilder.add(execPath);
- }
- }
- return wellKnownProtoPathsBuilder.build();
+ ProtoSourceFileBlacklist wellKnownProtoBlacklist =
+ new ProtoSourceFileBlacklist(ruleContext, ObjcRuleClasses.PROTOBUF_WELL_KNOWN_TYPES);
+ return wellKnownProtoBlacklist.isBlacklisted(protoFile);
}
-
/** Returns the sets of proto files that were added using proto_library dependencies. */
private NestedSet<Artifact> getProtoDepsSources() {
NestedSetBuilder<Artifact> artifacts = NestedSetBuilder.stableOrder();