aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java24
-rwxr-xr-xtools/objc/j2objc_dead_code_pruner.py7
2 files changed, 19 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 6171081fd6..683c06d69d 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
@@ -88,12 +89,6 @@ import javax.annotation.Nullable;
*/
public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
- private static final Predicate<Exception> NON_NULL_EXCEPTION = new Predicate<Exception>() {
- @Override
- public boolean apply(@Nullable Exception e) {
- return e != null;
- }
- };
private WalkableGraph graph;
private ImmutableList<TargetPatternKey> universeTargetPatternKeys;
@@ -177,9 +172,20 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
private Map<Target, Collection<Target>> makeTargetsMap(Map<SkyKey, Iterable<SkyKey>> input) {
ImmutableMap.Builder<Target, Collection<Target>> result = ImmutableMap.builder();
+
+ Map<SkyKey, Target> allTargets = makeTargetsWithAssociations(
+ Sets.newHashSet(Iterables.concat(input.values())));
for (Map.Entry<SkyKey, Target> entry : makeTargetsWithAssociations(input.keySet()).entrySet()) {
- result.put(entry.getValue(), makeTargets(input.get(entry.getKey())));
+ Iterable<SkyKey> skyKeys = input.get(entry.getKey());
+ Set<Target> targets = CompactHashSet.createWithExpectedSize(Iterables.size(skyKeys));
+ for (SkyKey key : skyKeys) {
+ Target target = allTargets.get(key);
+ if (target != null) {
+ targets.add(target);
+ }
+ }
+ result.put(entry.getValue(), targets);
}
return result.build();
}
@@ -460,10 +466,6 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
return result;
}
- private Collection<Target> makeTargets(Iterable<SkyKey> keys) {
- return makeTargetsWithAssociations(keys).values();
- }
-
private static final Function<SkyKey, Label> SKYKEY_TO_LABEL = new Function<SkyKey, Label>() {
@Nullable
@Override
diff --git a/tools/objc/j2objc_dead_code_pruner.py b/tools/objc/j2objc_dead_code_pruner.py
index 2245778957..ec1ed8575d 100755
--- a/tools/objc/j2objc_dead_code_pruner.py
+++ b/tools/objc/j2objc_dead_code_pruner.py
@@ -105,7 +105,12 @@ def BuildReachableFileSet(entry_classes, reachability_tree, header_mapping):
'j2objc_library rules.')
transpiled_file_name = header_mapping[entry_class]
reachable_files.add(transpiled_file_name)
- current_level_deps = reachability_tree[transpiled_file_name]
+ current_level_deps = []
+ # We need to check if the transpiled file is in the reachability tree
+ # because J2ObjC protos are not analyzed for dead code stripping and
+ # therefore are not in the reachability tree at all.
+ if transpiled_file_name in reachability_tree:
+ current_level_deps = reachability_tree[transpiled_file_name]
while current_level_deps:
next_level_deps = []
for dep in current_level_deps: