| /* |
| * Copyright 2006 Google Inc. |
| * |
| * 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 com.google.gwt.dev.cfg; |
| |
| import com.google.gwt.core.ext.RebindResult; |
| import com.google.gwt.core.ext.TreeLogger; |
| import com.google.gwt.core.ext.UnableToCompleteException; |
| import com.google.gwt.dev.javac.StandardGeneratorContext; |
| |
| /** |
| * Abstract base class for various kinds of deferred binding rules. |
| */ |
| public abstract class Rule { |
| |
| private int fallbackEvalCost = Integer.MAX_VALUE; |
| private final ConditionAll rootCondition = new ConditionAll(); |
| |
| /** |
| * Returns the cost of evaluation fallback binding values. |
| * when isApplicable() is true, this value is meaningless |
| * when isApplicable() is false, [1,Integer.MAX_VALUE-1] means |
| * a relative scale of cost, where cost c is better than cost c+k |
| * Integer.MAX_VALUE implies no match. |
| * @return cost of evaluating fallback values. |
| */ |
| public int getFallbackEvaluationCost() { |
| return fallbackEvalCost; |
| } |
| |
| public ConditionAll getRootCondition() { |
| return rootCondition; |
| } |
| |
| public boolean isApplicable(TreeLogger logger, StandardGeneratorContext context, String typeName) |
| throws UnableToCompleteException { |
| DeferredBindingQuery query = new DeferredBindingQuery( |
| context.getPropertyOracle(), context.getActiveLinkerNames(), |
| context.getCompilationState(), typeName); |
| boolean result = rootCondition.isTrue(logger, query); |
| fallbackEvalCost = query.getFallbackEvaluationCost(); |
| return result; |
| } |
| |
| public abstract RebindResult realize(TreeLogger logger, |
| StandardGeneratorContext context, String typeName) |
| throws UnableToCompleteException; |
| } |