/* * 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.core.ext.linker; import com.google.gwt.core.ext.Linker; import java.util.Map; import java.util.SortedMap; import java.util.SortedSet; /** * Represents a unique compilation of the module. Multiple permutations may * result in identical JavaScript. */ public abstract class CompilationResult extends Artifact<CompilationResult> { protected CompilationResult(Class<? extends Linker> linkerType) { super(linkerType); } /** * Returns the JavaScript compilation. The first element of the array contains * the code that should be run when the application starts up. The remaining * elements are loaded via * {@link com.google.gwt.core.client.GWT#runAsync(com.google.gwt.core.client.RunAsyncCallback) * GWT.runAsync}. See * {@link com.google.gwt.core.client.impl.AsyncFragmentLoader * AsyncFragmentLoader} for details on the necessary linker support for * runAsync. */ public abstract String[] getJavaScript(); /** * Returns the permutation ID. */ public abstract int getPermutationId(); /** * Provides values for {@link SelectionProperty} instances that are not * explicitly set during the compilation phase. This method will return * multiple mappings, one for each permutation that resulted in the * compilation. */ public abstract SortedSet<SortedMap<SelectionProperty, String>> getPropertyMap(); /** * Returns the permutations of the collapsed deferred-binding property values * that are compiled into the CompilationResult. */ public abstract SoftPermutation[] getSoftPermutations(); /** * Returns the statement ranges for the JavaScript returned by * {@link #getJavaScript()}. Some subclasses return <code>null</code>, in * which case there is no statement range information available. */ public StatementRanges[] getStatementRanges() { return null; } /** * Return a string that uniquely identifies this compilation result. Typically * this is a cryptographic hash of the compiled data. */ public abstract String getStrongName(); /** * Returns a sorted array of obfuscated symbol names in the compilation to * metadata about the symbol. This data can allow for on-the-fly deobfuscation * of stack trace information or to allow server components to have in-depth * knowledge of the runtime structure of compiled objects. */ public abstract SymbolData[] getSymbolMap(); @Override public final int hashCode() { return getStrongName().hashCode(); } @Override public String toString() { StringBuffer b = new StringBuffer(); b.append("{"); for (SortedMap<SelectionProperty, String> map : getPropertyMap()) { b.append(" {"); for (Map.Entry<SelectionProperty, String> entry : map.entrySet()) { b.append(" ").append(entry.getKey().getName()).append(":").append( entry.getValue()); } b.append(" }"); } b.append(" }"); return b.toString(); } @Override protected final int compareToComparableArtifact(CompilationResult o) { return getStrongName().compareTo(o.getStrongName()); } @Override protected final Class<CompilationResult> getComparableArtifactType() { return CompilationResult.class; } }