diff options
author | 2016-09-15 16:01:55 +0000 | |
---|---|---|
committer | 2016-09-16 07:58:44 +0000 | |
commit | df960c22f2ba057fc389ebeb6a20d5035efeb6ef (patch) | |
tree | aff500d0538af410d782a4d1d1cc5f2dd17a122d /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | 4ce70d25cc206bba960015a97902caebfcd0c7bd (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')
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(); |