KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > google > gwt > dev > cfg > RuleGenerateWith


1 /*
2  * Copyright 2006 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */

16 package com.google.gwt.dev.cfg;
17
18 import com.google.gwt.core.ext.Generator;
19 import com.google.gwt.core.ext.GeneratorContext;
20 import com.google.gwt.core.ext.TreeLogger;
21 import com.google.gwt.core.ext.UnableToCompleteException;
22
23 /**
24  * A rule to replace the type being rebound with a class whose name is
25  * determined by a generator class. Generators usually generate new classes
26  * during the deferred binding process, but it is not required.
27  */

28 public class RuleGenerateWith extends Rule {
29
30   private final Generator generator;
31
32   public RuleGenerateWith(Generator generator) {
33     this.generator = generator;
34   }
35
36   public String JavaDoc realize(TreeLogger logger, GeneratorContext context,
37       String JavaDoc typeName) throws UnableToCompleteException {
38
39     String JavaDoc msg = "Invoking " + toString();
40     logger = logger.branch(TreeLogger.DEBUG, msg, null);
41
42     long before = System.currentTimeMillis();
43     String JavaDoc className = generator.generate(logger, context, typeName);
44     long after = System.currentTimeMillis();
45     if (className == null) {
46       msg = "Generator returned null, so the requested type will be used as is";
47     } else {
48       msg = "Generator returned class '" + className + "'";
49     }
50     logger.log(TreeLogger.DEBUG, msg, null);
51
52     msg = "Finished in " + (after - before) + " ms";
53     logger.log(TreeLogger.DEBUG, msg, null);
54
55     return className;
56   }
57
58   public String JavaDoc toString() {
59     return "<generate-with class='" + generator.getClass().getName() + "'/>";
60   }
61 }
62
Popular Tags