sanha closed pull request #102: [NEMO-180] Java Annotation for Prerequisite 
Execution Properties
URL: https://github.com/apache/incubator-nemo/pull/102
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/Requires.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/Requires.java
new file mode 100644
index 000000000..1283cf1ce
--- /dev/null
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/Requires.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 Seoul National University
+ *
+ * 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 edu.snu.nemo.compiler.optimizer.pass.compiletime;
+
+import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty;
+
+import java.lang.annotation.*;
+
+/**
+ * Annotation used to indicate which execution properties the class requires 
as prerequisites.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface Requires {
+  Class<? extends ExecutionProperty>[] value() default {};
+}
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/Annotates.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/Annotates.java
new file mode 100644
index 000000000..cf96224cf
--- /dev/null
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/Annotates.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 Seoul National University
+ *
+ * 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 edu.snu.nemo.compiler.optimizer.pass.compiletime.annotating;
+
+import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty;
+
+import java.lang.annotation.*;
+
+/**
+ * Annotation used to indicate which execution properties the class annotates.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface Annotates {
+  Class<? extends ExecutionProperty>[] value() default {};
+}
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java
index 3fcb7bdb5..c60d4f243 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/AnnotatingPass.java
@@ -17,8 +17,10 @@
 
 import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty;
 import edu.snu.nemo.compiler.optimizer.pass.compiletime.CompileTimePass;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.Set;
 
 /**
@@ -26,34 +28,28 @@
  * It is ensured by the compiler that the shape of the IR DAG itself is not 
modified by an AnnotatingPass.
  */
 public abstract class AnnotatingPass extends CompileTimePass {
-  private final Class<? extends ExecutionProperty> 
keyOfExecutionPropertyToModify;
+  private final Set<Class<? extends ExecutionProperty>> 
executionPropertiesToAnnotate;
   private final Set<Class<? extends ExecutionProperty>> 
prerequisiteExecutionProperties;
 
   /**
    * Constructor.
-   * @param keyOfExecutionPropertyToModify key of execution property to modify.
-   * @param prerequisiteExecutionProperties prerequisite execution properties.
+   * @param cls the annotating pass class.
    */
-  public AnnotatingPass(final Class<? extends ExecutionProperty> 
keyOfExecutionPropertyToModify,
-                        final Set<Class<? extends ExecutionProperty>> 
prerequisiteExecutionProperties) {
-    this.keyOfExecutionPropertyToModify = keyOfExecutionPropertyToModify;
-    this.prerequisiteExecutionProperties = prerequisiteExecutionProperties;
-  }
+  public AnnotatingPass(final Class<? extends AnnotatingPass> cls) {
+    final Annotates annotates = cls.getAnnotation(Annotates.class);
+    this.executionPropertiesToAnnotate = new 
HashSet<>(Arrays.asList(annotates.value()));
 
-  /**
-   * Constructor.
-   * @param keyOfExecutionPropertyToModify key of execution property to modify.
-   */
-  public AnnotatingPass(final Class<? extends ExecutionProperty> 
keyOfExecutionPropertyToModify) {
-    this(keyOfExecutionPropertyToModify, Collections.emptySet());
+    final Requires requires = cls.getAnnotation(Requires.class);
+    this.prerequisiteExecutionProperties = requires == null
+        ? new HashSet<>() : new HashSet<>(Arrays.asList(requires.value()));
   }
 
   /**
-   * Getter for key of execution property to modify.
-   * @return key of execution property to modify.
+   * Getter for the execution properties to annotate through the pass.
+   * @return key of execution properties to annotate through the pass.
    */
-  public final Class<? extends ExecutionProperty> 
getExecutionPropertyToModify() {
-    return keyOfExecutionPropertyToModify;
+  public final Set<Class<? extends ExecutionProperty>> 
getExecutionPropertiesToAnnotate() {
+    return executionPropertiesToAnnotate;
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java
index f8080020f..32797eb06 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ClonedSchedulingPass.java
@@ -20,17 +20,16 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import 
edu.snu.nemo.common.ir.vertex.executionproperty.ClonedSchedulingProperty;
 
-import java.util.Collections;
-
 /**
  * Set the ClonedScheduling property of source vertices.
  */
+@Annotates(ClonedSchedulingProperty.class)
 public final class ClonedSchedulingPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public ClonedSchedulingPass() {
-    super(ClonedSchedulingProperty.class, Collections.emptySet());
+    super(ClonedSchedulingPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java
index 0c8420316..2dcd04beb 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/CompressionPass.java
@@ -24,6 +24,7 @@
 /**
  * A pass for applying compression algorithm for data flowing between vertices.
  */
+@Annotates(CompressionProperty.class)
 public final class CompressionPass extends AnnotatingPass {
   private final CompressionProperty.Value compression;
 
@@ -31,8 +32,7 @@
    * Default constructor. Uses LZ4 as default.
    */
   public CompressionPass() {
-    super(CompressionProperty.class);
-    this.compression = CompressionProperty.Value.LZ4;
+    this(CompressionProperty.Value.LZ4);
   }
 
   /**
@@ -40,7 +40,7 @@ public CompressionPass() {
    * @param compression Compression to apply on edges.
    */
   public CompressionPass(final CompressionProperty.Value compression) {
-    super(CompressionProperty.class);
+    super(CompressionPass.class);
     this.compression = compression;
   }
 
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java
index 628307115..dc5f733e4 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DecompressionPass.java
@@ -20,19 +20,22 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.CompressionProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DecompressionProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 
 /**
  * A pass for applying decompression algorithm for data flowing between 
vertices.
  * It always
  */
+@Annotates(CompressionProperty.class)
+@Requires(CompressionProperty.class)
 public final class DecompressionPass extends AnnotatingPass {
 
   /**
    * Constructor.
    */
   public DecompressionPass() {
-    super(CompressionProperty.class);
+    super(DecompressionPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java
index 8f96da576..a89369e91 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataPersistencePass.java
@@ -20,19 +20,20 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DataPersistenceProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
-
-import java.util.Collections;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 /**
  * Pass for initiating IREdge data persistence ExecutionProperty with default 
values.
  */
+@Annotates(DataPersistenceProperty.class)
+@Requires(DataStoreProperty.class)
 public final class DefaultDataPersistencePass extends AnnotatingPass {
 
   /**
    * Default constructor.
    */
   public DefaultDataPersistencePass() {
-    super(DataPersistenceProperty.class, 
Collections.singleton(DataStoreProperty.class));
+    super(DefaultDataPersistencePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java
index e40b95a2a..79018dce6 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultDataStorePass.java
@@ -20,17 +20,16 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 
-import java.util.Collections;
-
 /**
  * Edge data store pass to process inter-stage memory store edges.
  */
+@Annotates(DataStoreProperty.class)
 public final class DefaultDataStorePass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public DefaultDataStorePass() {
-    super(DataStoreProperty.class, Collections.emptySet());
+    super(DefaultDataStorePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java
index 2283bfb5a..3c40c56fb 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeDecoderPass.java
@@ -24,6 +24,7 @@
 /**
  * Pass for initiating IREdge Decoder ExecutionProperty with default dummy 
coder.
  */
+@Annotates(DecoderProperty.class)
 public final class DefaultEdgeDecoderPass extends AnnotatingPass {
 
   private static final DecoderProperty DEFAULT_DECODER_PROPERTY =
@@ -33,7 +34,7 @@
    * Default constructor.
    */
   public DefaultEdgeDecoderPass() {
-    super(DecoderProperty.class);
+    super(DefaultEdgeDecoderPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java
index 0238c72b8..a13a1f249 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeEncoderPass.java
@@ -24,6 +24,7 @@
 /**
  * Pass for initiating IREdge Encoder ExecutionProperty with default dummy 
coder.
  */
+@Annotates(EncoderProperty.class)
 public final class DefaultEdgeEncoderPass extends AnnotatingPass {
 
   private static final EncoderProperty DEFAULT_DECODER_PROPERTY =
@@ -33,7 +34,7 @@
    * Default constructor.
    */
   public DefaultEdgeEncoderPass() {
-    super(EncoderProperty.class);
+    super(DefaultEdgeEncoderPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java
index c96ac0bc0..e13b15e5f 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultMetricPass.java
@@ -31,12 +31,13 @@
 /**
  * Pass for initiating IREdge Metric ExecutionProperty with default key range.
  */
+@Annotates(DataSkewMetricProperty.class)
 public final class DefaultMetricPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public DefaultMetricPass() {
-    super(DataSkewMetricProperty.class);
+    super(DefaultMetricPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java
index 8b8545424..87cc71ade 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPass.java
@@ -22,13 +22,15 @@
 import edu.snu.nemo.common.ir.vertex.SourceVertex;
 import edu.snu.nemo.common.dag.DAG;
 import edu.snu.nemo.common.ir.vertex.executionproperty.ParallelismProperty;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
  * Optimization pass for tagging parallelism execution property.
  */
+@Annotates(ParallelismProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class DefaultParallelismPass extends AnnotatingPass {
   private final int desiredSourceParallelism;
   // we decrease the number of parallelism by this number on each shuffle 
boundary.
@@ -49,7 +51,7 @@ public DefaultParallelismPass() {
    */
   public DefaultParallelismPass(final int desiredSourceParallelism,
                                 final int shuffleDecreaseFactor) {
-    super(ParallelismProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(DefaultParallelismPass.class);
     this.desiredSourceParallelism = desiredSourceParallelism;
     this.shuffleDecreaseFactor = shuffleDecreaseFactor;
   }
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java
index 4dbf45554..53dd17ec3 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPass.java
@@ -24,11 +24,10 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty;
 import edu.snu.nemo.common.ir.vertex.executionproperty.ScheduleGroupProperty;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * A pass for assigning each stages in schedule groups.
@@ -49,6 +48,8 @@
  *   </li>
  * </ul>
  */
+@Annotates(ScheduleGroupProperty.class)
+@Requires({CommunicationPatternProperty.class, DataFlowProperty.class})
 public final class DefaultScheduleGroupPass extends AnnotatingPass {
 
   private final boolean allowBroadcastWithinScheduleGroup;
@@ -71,10 +72,7 @@ public DefaultScheduleGroupPass() {
   public DefaultScheduleGroupPass(final boolean 
allowBroadcastWithinScheduleGroup,
                                   final boolean 
allowShuffleWithinScheduleGroup,
                                   final boolean 
allowMultipleInEdgesWithinScheduleGroup) {
-    super(ScheduleGroupProperty.class, Stream.of(
-        CommunicationPatternProperty.class,
-        DataFlowProperty.class
-    ).collect(Collectors.toSet()));
+    super(DefaultScheduleGroupPass.class);
     this.allowBroadcastWithinScheduleGroup = allowBroadcastWithinScheduleGroup;
     this.allowShuffleWithinScheduleGroup = allowShuffleWithinScheduleGroup;
     this.allowMultipleInEdgesWithinScheduleGroup = 
allowMultipleInEdgesWithinScheduleGroup;
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java
index 262f0ca48..9122dc059 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DisaggregationEdgeDataStorePass.java
@@ -19,20 +19,22 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.dag.DAG;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
  * A pass to support Disaggregated Resources by tagging edges.
  * This pass handles the DataStore ExecutionProperty.
  */
+@Annotates(DataStoreProperty.class)
+@Requires(DataStoreProperty.class)
 public final class DisaggregationEdgeDataStorePass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public DisaggregationEdgeDataStorePass() {
-    super(DataStoreProperty.class, 
Collections.singleton(DataStoreProperty.class));
+    super(DisaggregationEdgeDataStorePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java
index c4db80231..8dbe7251d 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DuplicateEdgeGroupSizePass.java
@@ -27,13 +27,14 @@
 /**
  * A pass for annotate duplicate data for each edge.
  */
+@Annotates(DuplicateEdgeGroupProperty.class)
 public final class DuplicateEdgeGroupSizePass extends AnnotatingPass {
 
   /**
    * Default constructor.
    */
   public DuplicateEdgeGroupSizePass() {
-    super(DuplicateEdgeGroupProperty.class);
+    super(DuplicateEdgeGroupSizePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeSuffleCompressionPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleCompressionPass.java
similarity index 86%
rename from 
compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeSuffleCompressionPass.java
rename to 
compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleCompressionPass.java
index 08ede7271..ae9044ece 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeSuffleCompressionPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleCompressionPass.java
@@ -20,8 +20,8 @@
 import 
edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.CompressionProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -29,12 +29,14 @@
  * This pass modifies the encoder property toward {@link 
edu.snu.nemo.common.ir.vertex.transform.RelayTransform}
  * to write data as byte arrays.
  */
-public final class LargeSuffleCompressionPass extends AnnotatingPass {
+@Annotates(CompressionProperty.class)
+@Requires(CommunicationPatternProperty.class)
+public final class LargeShuffleCompressionPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
-  public LargeSuffleCompressionPass() {
-    super(CompressionProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+  public LargeShuffleCompressionPass() {
+    super(LargeShuffleCompressionPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java
index d5d18acb2..6a623a072 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataFlowPass.java
@@ -20,20 +20,22 @@
 import 
edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
  * A pass to optimize large shuffle by tagging edges.
  * This pass handles the DataFlowModel ExecutionProperty.
  */
+@Annotates(DataFlowProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class LargeShuffleDataFlowPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public LargeShuffleDataFlowPass() {
-    super(DataFlowProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(LargeShuffleDataFlowPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java
index d7901f29d..e4e8e28cf 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataPersistencePass.java
@@ -20,20 +20,21 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DataPersistenceProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
-
-import java.util.Collections;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 /**
  * A pass to optimize large shuffle by tagging edges.
  * This pass handles the data persistence ExecutionProperty.
  */
+@Annotates(DataPersistenceProperty.class)
+@Requires(DataFlowProperty.class)
 public final class LargeShuffleDataPersistencePass extends AnnotatingPass {
 
   /**
    * Default constructor.
    */
   public LargeShuffleDataPersistencePass() {
-    super(DataPersistenceProperty.class, 
Collections.singleton(DataFlowProperty.class));
+    super(LargeShuffleDataPersistencePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java
index 40b4bb41f..575825bdc 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDataStorePass.java
@@ -20,19 +20,20 @@
 import 
edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DataStoreProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
-
-import java.util.Collections;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 /**
  * A pass to optimize large shuffle by tagging edges.
  * This pass handles the DataStore ExecutionProperty.
  */
+@Annotates(DataStoreProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class LargeShuffleDataStorePass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public LargeShuffleDataStorePass() {
-    super(DataStoreProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(LargeShuffleDataStorePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java
index 978aff1bf..c0647e328 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecoderPass.java
@@ -21,8 +21,8 @@
 import 
edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DecoderProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -30,12 +30,14 @@
  * This pass modifies the decoder property toward {@link 
edu.snu.nemo.common.ir.vertex.transform.RelayTransform}
  * to read data as byte arrays.
  */
+@Annotates(DecoderProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class LargeShuffleDecoderPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public LargeShuffleDecoderPass() {
-    super(DecoderProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(LargeShuffleDecoderPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java
index 625b2c988..7706c9801 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleDecompressionPass.java
@@ -21,8 +21,8 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.CompressionProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DecompressionProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -30,12 +30,14 @@
  * This pass modifies the decoder property toward {@link 
edu.snu.nemo.common.ir.vertex.transform.RelayTransform}
  * to read data as byte arrays.
  */
+@Annotates(DecompressionProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class LargeShuffleDecompressionPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public LargeShuffleDecompressionPass() {
-    super(DecompressionProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(LargeShuffleDecompressionPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java
index 43def8b87..bd15052a9 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleEncoderPass.java
@@ -21,8 +21,8 @@
 import 
edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.EncoderProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -30,12 +30,14 @@
  * This pass modifies the encoder property toward {@link 
edu.snu.nemo.common.ir.vertex.transform.RelayTransform}
  * to write data as byte arrays.
  */
+@Annotates(EncoderProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class LargeShuffleEncoderPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public LargeShuffleEncoderPass() {
-    super(EncoderProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(LargeShuffleEncoderPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java
index 084ab6278..e191ff7ac 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShufflePartitionerPass.java
@@ -20,8 +20,8 @@
 import 
edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.PartitionerProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -31,12 +31,14 @@
  * This enables that every byte[] element, which was a partition for the 
reduce task, becomes one partition again
  * and flushed to disk write after it is relayed.
  */
+@Annotates(PartitionerProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class LargeShufflePartitionerPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public LargeShufflePartitionerPass() {
-    super(PartitionerProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(LargeShufflePartitionerPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java
index f47462984..efce189bd 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/LargeShuffleResourceSlotPass.java
@@ -20,16 +20,20 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.ir.vertex.executionproperty.ResourceSlotProperty;
-
-import java.util.Collections;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 /**
  * Sets {@link ResourceSlotProperty}.
  */
+@Annotates(ResourceSlotProperty.class)
+@Requires(DataFlowProperty.class)
 public final class LargeShuffleResourceSlotPass extends AnnotatingPass {
 
+  /**
+   * Default constructor.
+   */
   public LargeShuffleResourceSlotPass() {
-    super(ResourceSlotProperty.class, 
Collections.singleton(DataFlowProperty.class));
+    super(LargeShuffleResourceSlotPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java
index 53f23dfc9..9884808cf 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceLocalityPass.java
@@ -23,10 +23,11 @@
 /**
  * Sets {@link ResourceLocalityProperty}.
  */
+@Annotates(ResourceLocalityProperty.class)
 public final class ResourceLocalityPass extends AnnotatingPass {
 
   public ResourceLocalityPass() {
-    super(ResourceLocalityProperty.class);
+    super(ResourceLocalityPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java
index 005138cdb..5883ac133 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSitePass.java
@@ -23,6 +23,7 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.ir.vertex.executionproperty.ResourceSiteProperty;
 import edu.snu.nemo.common.ir.vertex.executionproperty.ParallelismProperty;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 import org.apache.commons.math3.optim.BaseOptimizer;
 import org.apache.commons.math3.optim.PointValuePair;
 import org.apache.commons.math3.optim.linear.*;
@@ -50,6 +51,8 @@
  * Also, this pass assumes network bandwidth to be the bottleneck. Each node 
should have enough capacity to run
  * TaskGroups immediately as scheduler attempts to schedule a TaskGroup.
  */
+@Annotates(ResourceSiteProperty.class)
+@Requires(ParallelismProperty.class)
 public final class ResourceSitePass extends AnnotatingPass {
 
   // Index of the objective parameter, in the coefficient vector
@@ -64,7 +67,7 @@
    * Default constructor.
    */
   public ResourceSitePass() {
-    super(ResourceSiteProperty.class, 
Collections.singleton(ParallelismProperty.class));
+    super(ResourceSitePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java
index f9718828b..bbb3fc614 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ResourceSlotPass.java
@@ -23,10 +23,11 @@
 /**
  * Sets {@link ResourceSlotProperty}.
  */
+@Annotates(ResourceSlotProperty.class)
 public final class ResourceSlotPass extends AnnotatingPass {
 
   public ResourceSlotPass() {
-    super(ResourceSlotProperty.class);
+    super(ResourceSlotPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java
index feff84f69..0820dde6c 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/ShuffleEdgePushPass.java
@@ -20,20 +20,22 @@
 import 
edu.snu.nemo.common.ir.edge.executionproperty.CommunicationPatternProperty;
 import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
  * A pass for tagging shuffle edges different from the default ones.
  * It sets DataFlowModel ExecutionProperty as "push".
  */
+@Annotates(DataFlowProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class ShuffleEdgePushPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public ShuffleEdgePushPass() {
-    super(DataFlowProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(ShuffleEdgePushPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java
index 8b1592b23..984e8dfd0 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewDataStorePass.java
@@ -26,12 +26,13 @@
  * It specifies the incoming one-to-one edges to MetricCollectionVertices to 
have either MemoryStore or LocalFileStore
  * as its DataStore ExecutionProperty.
  */
+@Annotates(DataStoreProperty.class)
 public final class SkewDataStorePass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public SkewDataStorePass() {
-    super(DataStoreProperty.class);
+    super(SkewDataStorePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java
index f2bf9d354..ad635c6c3 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewMetricCollectionPass.java
@@ -21,20 +21,21 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.ir.vertex.MetricCollectionBarrierVertex;
 import edu.snu.nemo.common.ir.edge.executionproperty.MetricCollectionProperty;
-
-import java.util.Collections;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 /**
  * Pass to annotate the DAG for a job to perform data skew.
  * It specifies the outgoing Shuffle edges from MetricCollectionVertices with 
a MetricCollection ExecutionProperty
  * which lets the edge to know what metric collection it should perform.
  */
+@Annotates(MetricCollectionProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class SkewMetricCollectionPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public SkewMetricCollectionPass() {
-    super(MetricCollectionProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(SkewMetricCollectionPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java
index 58c785f51..7ffd221b9 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewPartitionerPass.java
@@ -21,19 +21,21 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.ir.vertex.MetricCollectionBarrierVertex;
 import edu.snu.nemo.common.ir.edge.executionproperty.PartitionerProperty;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
  * Transient resource pass for tagging edges with {@link PartitionerProperty}.
  */
+@Annotates(PartitionerProperty.class)
+@Requires(MetricCollectionProperty.class)
 public final class SkewPartitionerPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public SkewPartitionerPass() {
-    super(PartitionerProperty.class, 
Collections.singleton(MetricCollectionProperty.class));
+    super(SkewPartitionerPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java
index c5bc1d9d5..c3739aff1 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/SkewResourceSkewedDataPass.java
@@ -28,12 +28,13 @@
  * Pass to annotate the DAG for a job to perform data skew.
  * It specifies which optimization to perform on the 
MetricCollectionBarrierVertex.
  */
+@Annotates(DynamicOptimizationProperty.class)
 public final class SkewResourceSkewedDataPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public SkewResourceSkewedDataPass() {
-    super(DynamicOptimizationProperty.class);
+    super(SkewResourceSkewedDataPass.class);
   }
 
   private boolean hasMetricCollectionBarrierVertexAsParent(final DAG<IRVertex, 
IREdge> dag,
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java
index 4da3bcf9f..9850d8133 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataFlowPass.java
@@ -20,8 +20,8 @@
 import edu.snu.nemo.common.ir.edge.executionproperty.DataFlowProperty;
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import 
edu.snu.nemo.common.ir.vertex.executionproperty.ResourcePriorityProperty;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 import static 
edu.snu.nemo.compiler.optimizer.pass.compiletime.annotating.TransientResourceDataStorePass.fromTransientToReserved;
@@ -29,12 +29,14 @@
 /**
  * Push from transient resources to reserved resources.
  */
+@Annotates(DataFlowProperty.class)
+@Requires(ResourcePriorityProperty.class)
 public final class TransientResourceDataFlowPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public TransientResourceDataFlowPass() {
-    super(DataFlowProperty.class, 
Collections.singleton(ResourcePriorityProperty.class));
+    super(TransientResourceDataFlowPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java
index dcd913264..1f8165173 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourceDataStorePass.java
@@ -21,19 +21,21 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.dag.DAG;
 import 
edu.snu.nemo.common.ir.vertex.executionproperty.ResourcePriorityProperty;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
  * Transient resource pass for tagging edges with DataStore ExecutionProperty.
  */
+@Annotates(DataStoreProperty.class)
+@Requires(ResourcePriorityProperty.class)
 public final class TransientResourceDataStorePass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public TransientResourceDataStorePass() {
-    super(DataStoreProperty.class, 
Collections.singleton(ResourcePriorityProperty.class));
+    super(TransientResourceDataStorePass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java
index cdf25a204..177ffbd48 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/TransientResourcePriorityPass.java
@@ -20,19 +20,21 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.dag.DAG;
 import 
edu.snu.nemo.common.ir.vertex.executionproperty.ResourcePriorityProperty;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
  * Place valuable computations on reserved resources, and the rest on 
transient resources.
  */
+@Annotates(ResourcePriorityProperty.class)
+@Requires(CommunicationPatternProperty.class)
 public final class TransientResourcePriorityPass extends AnnotatingPass {
   /**
    * Default constructor.
    */
   public TransientResourcePriorityPass() {
-    super(ResourcePriorityProperty.class, 
Collections.singleton(CommunicationPatternProperty.class));
+    super(TransientResourcePriorityPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java
index 378d125c1..aa44e26d3 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/CompositePass.java
@@ -41,7 +41,7 @@ public CompositePass(final List<CompileTimePass> passList) {
     passList.forEach(pass -> 
prerequisiteExecutionProperties.addAll(pass.getPrerequisiteExecutionProperties()));
     passList.forEach(pass -> {
       if (pass instanceof AnnotatingPass) {
-        prerequisiteExecutionProperties.remove(((AnnotatingPass) 
pass).getExecutionPropertyToModify());
+        prerequisiteExecutionProperties.removeAll(((AnnotatingPass) 
pass).getExecutionPropertiesToAnnotate());
       }
     });
   }
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java
index e69e56c8e..851890554 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/LargeShuffleCompositePass.java
@@ -36,7 +36,7 @@ public LargeShuffleCompositePass() {
         new LargeShuffleDecoderPass(),
         new LargeShuffleEncoderPass(),
         new LargeShufflePartitionerPass(),
-        new LargeSuffleCompressionPass(),
+        new LargeShuffleCompressionPass(),
         new LargeShuffleDecompressionPass(),
         new LargeShuffleDataPersistencePass(),
         new LargeShuffleResourceSlotPass()
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java
index 606d84b2c..818e1b719 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/CommonSubexpressionEliminationPass.java
@@ -26,6 +26,7 @@
 import edu.snu.nemo.common.ir.vertex.transform.Transform;
 import edu.snu.nemo.common.dag.DAG;
 import edu.snu.nemo.common.dag.DAGBuilder;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -36,12 +37,13 @@
  * they include the same transform, and has incoming edges from an identical 
set of vertices.
  * Refer to CommonSubexpressionEliminationPassTest for such cases.
  */
+@Requires(CommunicationPatternProperty.class)
 public final class CommonSubexpressionEliminationPass extends ReshapingPass {
   /**
    * Default constructor.
    */
   public CommonSubexpressionEliminationPass() {
-    super(Collections.singleton(CommunicationPatternProperty.class));
+    super(CommonSubexpressionEliminationPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java
index 7abee7e0d..fa2afeef2 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LargeShuffleRelayReshapingPass.java
@@ -24,8 +24,7 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.ir.vertex.OperatorVertex;
 import edu.snu.nemo.common.ir.vertex.transform.RelayTransform;
-
-import java.util.Collections;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 /**
  * Pass to modify the DAG for a job to batch the disk seek.
@@ -33,13 +32,14 @@
  * receiving shuffle edges,
  * to merge the shuffled data in memory and write to the disk at once.
  */
+@Requires(CommunicationPatternProperty.class)
 public final class LargeShuffleRelayReshapingPass extends ReshapingPass {
 
   /**
    * Default constructor.
    */
   public LargeShuffleRelayReshapingPass() {
-    super(Collections.singleton(CommunicationPatternProperty.class));
+    super(LargeShuffleRelayReshapingPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java
index 6c1afb225..e11d7127f 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopExtractionPass.java
@@ -23,6 +23,7 @@
 import edu.snu.nemo.common.ir.vertex.LoopVertex;
 import edu.snu.nemo.common.ir.vertex.OperatorVertex;
 import edu.snu.nemo.common.ir.vertex.SourceVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 import java.util.*;
 
@@ -32,12 +33,13 @@
  * Then, it rolls repetitive operators into one root LoopOperator, which 
contains enough information to produce all
  * other iterative computations.
  */
+@Requires(CommunicationPatternProperty.class)
 public final class LoopExtractionPass extends ReshapingPass {
   /**
    * Default constructor.
    */
   public LoopExtractionPass() {
-    super(Collections.singleton(CommunicationPatternProperty.class));
+    super(LoopExtractionPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java
index 4dc53ac49..9d9f8bc92 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopOptimizations.java
@@ -23,6 +23,7 @@
 import edu.snu.nemo.common.ir.vertex.LoopVertex;
 import edu.snu.nemo.common.dag.DAG;
 import edu.snu.nemo.common.dag.DAGBuilder;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 import java.util.*;
 import java.util.function.IntPredicate;
@@ -98,12 +99,13 @@ private static void collectLoopVertices(final DAG<IRVertex, 
IREdge> dag,
   /**
    * Pass for Loop Fusion optimization.
    */
+  @Requires(CommunicationPatternProperty.class)
   public static final class LoopFusionPass extends ReshapingPass {
     /**
      * Default constructor.
      */
     public LoopFusionPass() {
-      super(Collections.singleton(CommunicationPatternProperty.class));
+      super(LoopFusionPass.class);
     }
 
     @Override
@@ -246,12 +248,13 @@ private Boolean checkEqualityOfIntPredicates(final 
IntPredicate predicate1, fina
   /**
    * Pass for Loop Invariant Code Motion optimization.
    */
+  @Requires(CommunicationPatternProperty.class)
   public static final class LoopInvariantCodeMotionPass extends ReshapingPass {
     /**
      * Default constructor.
      */
     public LoopInvariantCodeMotionPass() {
-      super(Collections.singleton(CommunicationPatternProperty.class));
+      super(LoopInvariantCodeMotionPass.class);
     }
 
     @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java
index d11b7ab0c..c1408e5e0 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/LoopUnrollingPass.java
@@ -27,6 +27,13 @@
  * Then, it decomposes each of the LoopVertices with the DAG information that 
each of them contain.
  */
 public final class LoopUnrollingPass extends ReshapingPass {
+  /**
+   * Default constructor.
+   */
+  public LoopUnrollingPass() {
+    super(LoopUnrollingPass.class);
+  }
+
   @Override
   public DAG<IRVertex, IREdge> apply(final DAG<IRVertex, IREdge> dag) {
     return recursivelyUnroll(dag);
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java
index d8159960c..85ec3fd47 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/ReshapingPass.java
@@ -17,7 +17,9 @@
 
 import edu.snu.nemo.common.ir.executionproperty.ExecutionProperty;
 import edu.snu.nemo.compiler.optimizer.pass.compiletime.CompileTimePass;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -28,19 +30,14 @@
 public abstract class ReshapingPass extends CompileTimePass {
   private final Set<Class<? extends ExecutionProperty>> 
prerequisiteExecutionProperties;
 
-  /**
-   * Default constructor.
-   */
-  public ReshapingPass() {
-    this(new HashSet<>());
-  }
-
   /**
    * Constructor.
-   * @param prerequisiteExecutionProperties prerequisite of execution 
properties.
+   * @param cls the reshaping pass class.
    */
-  public ReshapingPass(final Set<Class<? extends ExecutionProperty>> 
prerequisiteExecutionProperties) {
-    this.prerequisiteExecutionProperties = prerequisiteExecutionProperties;
+  public ReshapingPass(final Class<? extends ReshapingPass> cls) {
+    final Requires requires = cls.getAnnotation(Requires.class);
+    this.prerequisiteExecutionProperties = requires == null
+        ? new HashSet<>() : new HashSet<>(Arrays.asList(requires.value()));
   }
 
   public final Set<Class<? extends ExecutionProperty>> 
getPrerequisiteExecutionProperties() {
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java
index f7074bbf6..a8763bd45 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/reshaping/SkewReshapingPass.java
@@ -24,9 +24,9 @@
 import edu.snu.nemo.common.ir.vertex.IRVertex;
 import edu.snu.nemo.common.ir.vertex.MetricCollectionBarrierVertex;
 import edu.snu.nemo.common.ir.vertex.OperatorVertex;
+import edu.snu.nemo.compiler.optimizer.pass.compiletime.Requires;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -37,12 +37,13 @@
  * a snapshot at the end of the pass. This could be prevented by modifying 
other passes to take the snapshot of the
  * DAG at the end of each passes for metricCollectionVertices.
  */
+@Requires(CommunicationPatternProperty.class)
 public final class SkewReshapingPass extends ReshapingPass {
   /**
    * Default constructor.
    */
   public SkewReshapingPass() {
-    super(Collections.singleton(CommunicationPatternProperty.class));
+    super(SkewReshapingPass.class);
   }
 
   @Override
diff --git 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java
 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java
index 13a250726..4a84a625b 100644
--- 
a/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java
+++ 
b/compiler/optimizer/src/main/java/edu/snu/nemo/compiler/optimizer/policy/PolicyBuilder.java
@@ -81,7 +81,7 @@ public PolicyBuilder registerCompileTimePass(final 
CompileTimePass compileTimePa
     // check annotation of annotating passes.
     if (compileTimePass instanceof AnnotatingPass) {
       final AnnotatingPass annotatingPass = (AnnotatingPass) compileTimePass;
-      
this.annotatedExecutionProperties.add(annotatingPass.getExecutionPropertyToModify());
+      
this.annotatedExecutionProperties.addAll(annotatingPass.getExecutionPropertiesToAnnotate());
     }
 
     this.compileTimePasses.add(compileTimePass);
diff --git 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java
 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java
index e21ee55f5..800bc40d8 100644
--- 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java
+++ 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultEdgeCoderPassTest.java
@@ -31,6 +31,7 @@
 import org.powermock.modules.junit4.PowerMockRunner;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Test {@link DefaultEdgeEncoderPass} and {@link DefaultEdgeDecoderPass}.
@@ -48,9 +49,9 @@ public void setUp() throws Exception {
   @Test
   public void testAnnotatingPass() {
     final AnnotatingPass encoderPass = new DefaultEdgeEncoderPass();
-    assertEquals(EncoderProperty.class, 
encoderPass.getExecutionPropertyToModify());
+    
assertTrue(encoderPass.getExecutionPropertiesToAnnotate().contains(EncoderProperty.class));
     final AnnotatingPass decoderPass = new DefaultEdgeDecoderPass();
-    assertEquals(DecoderProperty.class, 
decoderPass.getExecutionPropertyToModify());
+    
assertTrue(decoderPass.getExecutionPropertiesToAnnotate().contains(DecoderProperty.class));
   }
 
   @Test
diff --git 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java
 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java
index 59c54c230..1205f64de 100644
--- 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java
+++ 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultParallelismPassTest.java
@@ -29,6 +29,7 @@
 import org.powermock.modules.junit4.PowerMockRunner;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Test {@link DefaultParallelismPass}.
@@ -46,7 +47,7 @@ public void setUp() throws Exception {
   @Test
   public void testAnnotatingPass() {
     final AnnotatingPass parallelismPass = new DefaultParallelismPass();
-    assertEquals(ParallelismProperty.class, 
parallelismPass.getExecutionPropertyToModify());
+    
assertTrue(parallelismPass.getExecutionPropertiesToAnnotate().contains(ParallelismProperty.class));
   }
 
   @Test
diff --git 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java
 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java
index 70b327580..c8bfc85a7 100644
--- 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java
+++ 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/annotating/DefaultScheduleGroupPassTest.java
@@ -48,7 +48,7 @@
   @Test
   public void testAnnotatingPass() {
     final AnnotatingPass scheduleGroupPass = new DefaultScheduleGroupPass();
-    assertEquals(ScheduleGroupProperty.class, 
scheduleGroupPass.getExecutionPropertyToModify());
+    
assertTrue(scheduleGroupPass.getExecutionPropertiesToAnnotate().contains(ScheduleGroupProperty.class));
   }
 
   /**
diff --git 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java
 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java
index ed2156149..1cd8996be 100644
--- 
a/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java
+++ 
b/compiler/test/src/test/java/edu/snu/nemo/compiler/optimizer/pass/compiletime/composite/SkewCompositePassTest.java
@@ -67,7 +67,7 @@ public void testCompositePass() {
         
prerequisites.addAll(compileTimePass.getPrerequisiteExecutionProperties()));
     dataSkewPass.getPassList().forEach(compileTimePass -> {
       if (compileTimePass instanceof AnnotatingPass) {
-        prerequisites.remove(((AnnotatingPass) 
compileTimePass).getExecutionPropertyToModify());
+        prerequisites.removeAll(((AnnotatingPass) 
compileTimePass).getExecutionPropertiesToAnnotate());
       }
     });
     assertEquals(prerequisites, 
dataSkewPass.getPrerequisiteExecutionProperties());


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to