/* * 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.i18n.rebind; import com.google.gwt.core.ext.DelegatingGeneratorContext; import com.google.gwt.core.ext.GeneratorContext; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.HashSet; import java.util.Set; /** * Keeps track of types/resources previously created to avoid warnings about * trying to generate the same file multiple times during a single generator * run. This is needed when one generator calls other generators multiple times * (such as for runtime locale support). */ class CachedGeneratorContext extends DelegatingGeneratorContext { private final GeneratorContext context; private Set<String> generatedResources = new HashSet<String>(); private Set<String> generatedTypes = new HashSet<String>(); CachedGeneratorContext(GeneratorContext context) { super(context); this.context = context; } /** * Provide the canonical context represented by this context. * * @return the GeneratorContext backing this implementation. */ public GeneratorContext getWrappedGeneratorContext() { return context; } @Override public PrintWriter tryCreate(TreeLogger logger, String packageName, String simpleName) { String typeName = packageName + '.' + simpleName; if (generatedTypes.contains(typeName)) { return null; } generatedTypes.add(typeName); return context.tryCreate(logger, packageName, simpleName); } @Override public OutputStream tryCreateResource(TreeLogger logger, String partialPath) throws UnableToCompleteException { if (generatedResources.contains(partialPath)) { return null; } generatedResources.add(partialPath); return context.tryCreateResource(logger, partialPath); } }