Experimental java annotation support with unpredictable action inputs/outputs in j2objc_library behind flag --experimental_j2objc_annotation_processing

Also added flag --experimental_zip_tree_artifact to switch on and off the zipping implementation of tree artifact generation.

--
MOS_MIGRATED_REVID=128586669
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index bbea1f5..374f887 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -36,12 +36,10 @@
 import com.google.devtools.build.lib.util.Preconditions;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
-
 import javax.annotation.Nullable;
 
 /**
@@ -155,6 +153,16 @@
     }
   };
 
+  /**
+   * A Predicate that evaluates to true if the Artifact <b>is</b> a tree artifact.
+   */
+  public static final Predicate<Artifact> IS_TREE_ARTIFACT = new Predicate<Artifact>() {
+    @Override
+    public boolean apply(Artifact input) {
+      return input.isTreeArtifact();
+    }
+  };
+
   private final int hashCode;
   private final Path path;
   private final Root root;