| /* | |
| * Copyright 2009 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.safehtml.rebind; | |
| import com.google.gwt.core.ext.Generator; | |
| import com.google.gwt.core.ext.GeneratorContext; | |
| import com.google.gwt.core.ext.TreeLogger; | |
| import com.google.gwt.core.ext.UnableToCompleteException; | |
| import com.google.gwt.core.ext.typeinfo.JClassType; | |
| import com.google.gwt.core.ext.typeinfo.NotFoundException; | |
| import com.google.gwt.core.ext.typeinfo.TypeOracle; | |
| import com.google.gwt.user.rebind.ClassSourceFileComposerFactory; | |
| import com.google.gwt.user.rebind.SourceWriter; | |
| import java.io.PrintWriter; | |
| /** | |
| * Generator for implementations of | |
| * {@link com.google.gwt.safehtml.client.SafeHtmlTemplates}. | |
| */ | |
| public class SafeHtmlTemplatesGenerator extends Generator { | |
| @Override | |
| public String generate(TreeLogger logger, GeneratorContext genCtx, | |
| String fqInterfaceName) throws UnableToCompleteException { | |
| TypeOracle oracle = genCtx.getTypeOracle(); | |
| JClassType interfaceType; | |
| try { | |
| interfaceType = oracle.getType(fqInterfaceName); | |
| } catch (NotFoundException e) { | |
| logger.log(TreeLogger.ERROR, "Unexpected error: " + e.getMessage(), e); | |
| throw new UnableToCompleteException(); | |
| } | |
| String implName = interfaceType.getName(); | |
| implName = implName.replace('.', '_') + "Impl"; | |
| String packageName = interfaceType.getPackage().getName(); | |
| PrintWriter printWriter = genCtx.tryCreate(logger, packageName, implName); | |
| if (printWriter != null) { | |
| ClassSourceFileComposerFactory factory = | |
| new ClassSourceFileComposerFactory(packageName, implName); | |
| factory.addImplementedInterface(interfaceType.getQualifiedSourceName()); | |
| SourceWriter sourceWriter = | |
| factory.createSourceWriter(genCtx, printWriter); | |
| SafeHtmlTemplatesImplCreator implCreator = | |
| new SafeHtmlTemplatesImplCreator(sourceWriter, interfaceType); | |
| implCreator.emitClass(logger, null); | |
| genCtx.commit(logger, printWriter); | |
| } | |
| return packageName + "." + implName; | |
| } | |
| } |