< prev index next >

src/jdk.vm.ci/share/classes/jdk.vm.ci.meta/src/jdk/vm/ci/meta/Assumptions.java

Print this page




  27 import java.util.Arrays;
  28 import java.util.HashSet;
  29 import java.util.Iterator;
  30 import java.util.Set;
  31 
  32 /**
  33  * Class for recording assumptions made during compilation.
  34  */
  35 public final class Assumptions implements Iterable<Assumptions.Assumption> {
  36 
  37     /**
  38      * Abstract base class for assumptions. An assumption assumes a property of the runtime that may
  39      * be invalidated by subsequent execution (e.g., that a class has no subclasses implementing
  40      * {@link NoFinalizableSubclass Object.finalize()}).
  41      */
  42     public abstract static class Assumption {
  43     }
  44 
  45     /**
  46      * A class for providing information that is only valid in association with a set of
  47      * {@link Assumption}s.



  48      *
  49      * @param <T>
  50      */
  51     public static class AssumptionResult<T> {
  52         Assumption[] assumptions;
  53         final T result;
  54 
  55         private static final Assumption[] EMPTY = new Assumption[0];
  56 
  57         public AssumptionResult(T result, Assumption... assumptions) {
  58             this.result = result;
  59             this.assumptions = assumptions;
  60         }
  61 
  62         public AssumptionResult(T result) {
  63             this(result, EMPTY);
  64         }
  65 
  66         public T getResult() {
  67             return result;


 170             return false;
 171         }
 172 
 173         @Override
 174         public String toString() {
 175             return "ConcreteSubtype[context=" + context.toJavaName() + ", subtype=" + subtype.toJavaName() + "]";
 176         }
 177     }
 178 
 179     /**
 180      * An assumption that a given type has no subtypes.
 181      */
 182     public static final class LeafType extends Assumption {
 183 
 184         /**
 185          * Type the assumption is made about.
 186          */
 187         public final ResolvedJavaType context;
 188 
 189         public LeafType(ResolvedJavaType context) {

 190             this.context = context;
 191         }
 192 
 193         @Override
 194         public int hashCode() {
 195             final int prime = 31;
 196             int result = 1;
 197             result = prime * result + context.hashCode();
 198             return result;
 199         }
 200 
 201         @Override
 202         public boolean equals(Object obj) {
 203             if (obj instanceof LeafType) {
 204                 LeafType other = (LeafType) obj;
 205                 return other.context.equals(context);
 206             }
 207             return false;
 208         }
 209 




  27 import java.util.Arrays;
  28 import java.util.HashSet;
  29 import java.util.Iterator;
  30 import java.util.Set;
  31 
  32 /**
  33  * Class for recording assumptions made during compilation.
  34  */
  35 public final class Assumptions implements Iterable<Assumptions.Assumption> {
  36 
  37     /**
  38      * Abstract base class for assumptions. An assumption assumes a property of the runtime that may
  39      * be invalidated by subsequent execution (e.g., that a class has no subclasses implementing
  40      * {@link NoFinalizableSubclass Object.finalize()}).
  41      */
  42     public abstract static class Assumption {
  43     }
  44 
  45     /**
  46      * A class for providing information that is only valid in association with a set of
  47      * {@link Assumption}s. It is permissible for AssumptionResults to have no assumptions at all.
  48      * For instance, if {@link ResolvedJavaType#isLeaf()} returns true for a type
  49      * {@link ResolvedJavaType#findLeafConcreteSubtype()} can return an AssumptionResult with no
  50      * assumptions since the leaf information is statically true.
  51      *
  52      * @param <T>
  53      */
  54     public static class AssumptionResult<T> {
  55         Assumption[] assumptions;
  56         final T result;
  57 
  58         private static final Assumption[] EMPTY = new Assumption[0];
  59 
  60         public AssumptionResult(T result, Assumption... assumptions) {
  61             this.result = result;
  62             this.assumptions = assumptions;
  63         }
  64 
  65         public AssumptionResult(T result) {
  66             this(result, EMPTY);
  67         }
  68 
  69         public T getResult() {
  70             return result;


 173             return false;
 174         }
 175 
 176         @Override
 177         public String toString() {
 178             return "ConcreteSubtype[context=" + context.toJavaName() + ", subtype=" + subtype.toJavaName() + "]";
 179         }
 180     }
 181 
 182     /**
 183      * An assumption that a given type has no subtypes.
 184      */
 185     public static final class LeafType extends Assumption {
 186 
 187         /**
 188          * Type the assumption is made about.
 189          */
 190         public final ResolvedJavaType context;
 191 
 192         public LeafType(ResolvedJavaType context) {
 193             assert !context.isLeaf() : "assumption isn't required for leaf types";
 194             this.context = context;
 195         }
 196 
 197         @Override
 198         public int hashCode() {
 199             final int prime = 31;
 200             int result = 1;
 201             result = prime * result + context.hashCode();
 202             return result;
 203         }
 204 
 205         @Override
 206         public boolean equals(Object obj) {
 207             if (obj instanceof LeafType) {
 208                 LeafType other = (LeafType) obj;
 209                 return other.context.equals(context);
 210             }
 211             return false;
 212         }
 213 


< prev index next >