/* * Copyright 2008 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.javac; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.core.ext.typeinfo.TypeOracle; import com.google.gwt.dev.CompilerContext; import com.google.gwt.dev.javac.testing.impl.JavaResourceBase; import com.google.gwt.dev.resource.Resource; import com.google.gwt.dev.util.arg.SourceLevel; import com.google.gwt.thirdparty.guava.common.collect.Sets; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * Utilities for tests that build a type oracle and watch for errors. * */ public class TypeOracleTestingUtils { public static CompilationState buildCompilationState(TreeLogger logger, Set<Resource> resources, Set<GeneratedUnit> generatedUnits) { try { CompilationState state = CompilationStateBuilder.buildFrom(logger, new CompilerContext(), resources); state.addGeneratedCompilationUnits(logger, generatedUnits); return state; } catch (UnableToCompleteException e) { throw new RuntimeException(e); } } public static CompilationState buildStandardCompilationStateWith(TreeLogger logger, Resource... resources) { return buildCompilationState(logger, standardBuildersPlus(new HashSet<Resource>(Arrays .asList(resources))), Collections.<GeneratedUnit> emptySet()); } public static CompilationUnitTypeOracleUpdater buildUpdater( TreeLogger logger, Set<Resource> resources, Set<GeneratedUnit> generatedUnits) { return buildCompilationState(logger, resources, generatedUnits).getTypeOracleUpdater(); } public static CompilationUnitTypeOracleUpdater buildUpdaterWith( TreeLogger logger, Set<Resource> resources) { return buildUpdater(logger, resources, Collections.<GeneratedUnit> emptySet()); } public static CompilationUnitTypeOracleUpdater buildStandardUpdaterWith( TreeLogger logger, Resource... resources) { return buildStandardUpdaterWith(logger, new HashSet<Resource>(Arrays.asList(resources))); } public static CompilationUnitTypeOracleUpdater buildStandardUpdaterWith( TreeLogger logger, Set<Resource> resources) { return buildUpdaterWith(logger, standardBuildersPlus(resources)); } public static CompilationState buildCompilationStateWith(TreeLogger logger, Set<Resource> resources, Set<GeneratedUnit> generatedUnits) { return buildCompilationState(logger, standardBuildersPlus(resources), generatedUnits, SourceLevel.DEFAULT_SOURCE_LEVEL); } public static CompilationState buildCompilationState(TreeLogger logger, Set<Resource> resources, Set<GeneratedUnit> generatedUnits, SourceLevel sourceLevel) { try { CompilerContext compilerContext = new CompilerContext(); compilerContext.getOptions().setSourceLevel(sourceLevel); compilerContext.getOptions().setStrict(true); CompilationState state = CompilationStateBuilder.buildFrom(logger, compilerContext, resources); state.addGeneratedCompilationUnits(logger, generatedUnits); return state; } catch (UnableToCompleteException e) { throw new RuntimeException(e); } } public static TypeOracle buildTypeOracle(TreeLogger logger, Set<Resource> resources) { return buildTypeOracle(logger, resources, Collections.<GeneratedUnit>emptySet()); } public static TypeOracle buildTypeOracle(TreeLogger logger, Set<Resource> resources, Set<GeneratedUnit> generatedUnits) { return buildCompilationState(logger, resources, generatedUnits, SourceLevel.DEFAULT_SOURCE_LEVEL).getTypeOracle(); } public static TypeOracle buildStandardTypeOracleWith(TreeLogger logger, Set<Resource> resources, Set<GeneratedUnit> generatedUnits, SourceLevel sourceLevel) { return buildCompilationState(logger, standardBuildersPlus(resources), generatedUnits, sourceLevel).getTypeOracle(); } public static TypeOracle buildStandardTypeOracleWith(TreeLogger logger, Set<Resource> resources) { return buildTypeOracle(logger, standardBuildersPlus(resources)); } public static TypeOracle buildStandardTypeOracleWith(TreeLogger logger, Resource... resources) { return buildStandardTypeOracleWith(logger, Sets.newHashSet( Arrays.asList(resources))); } /** * Compilation resources for basic classes like Object and String. */ private static Set<Resource> standardBuildersPlus(Set<Resource> resources) { Set<Resource> result = new HashSet<Resource>(); for (Resource standardResource : JavaResourceBase.getStandardResources()) { result.add(standardResource); } result.addAll(resources); return result; } }