Package org.gwtnode.dev.linker

Source Code of org.gwtnode.dev.linker.GwtNodeLinker

/*
* Copyright 2011 Chad Retz
*
* 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 org.gwtnode.dev.linker;

import java.util.Set;

import com.google.gwt.core.ext.LinkerContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.linker.AbstractLinker;
import com.google.gwt.core.ext.linker.ArtifactSet;
import com.google.gwt.core.ext.linker.CompilationResult;
import com.google.gwt.core.ext.linker.LinkerOrder;
import com.google.gwt.core.ext.linker.LinkerOrder.Order;
import com.google.gwt.dev.util.DefaultTextOutput;

/**
* Simple linker to remove a lot of GWT fluff
*
* @author Chad Retz
*/
@LinkerOrder(Order.PRIMARY)
public class GwtNodeLinker extends AbstractLinker {

    @Override
    public String getDescription() {
        return "GwtNode";
    }

    @Override
    public ArtifactSet link(TreeLogger logger, LinkerContext context,
            ArtifactSet artifacts) throws UnableToCompleteException {
        ArtifactSet toReturn = new ArtifactSet(artifacts);
        DefaultTextOutput out = new DefaultTextOutput(true);
        //inject other scripts
        //for (ScriptReference resource : artifacts.find(ScriptReference.class)) {
        //    out.print(resource.toString());
        //}
        //closure
        //out.print("(function () {");
        //out.newline();
        // grab compilation result
        Set<CompilationResult> results = artifacts.find(CompilationResult.class);
        CompilationResult result = null;
        if (results.size() > 1) {
            logger.log(TreeLogger.ERROR,
                    "The module must have exactly one distinct"
                            + " permutation when using the " + getDescription()
                            + " Linker.", null);
            throw new UnableToCompleteException();
        } else if (!results.isEmpty()) {
            result = results.iterator().next();
            // dump JS
            String[] js = result.getJavaScript();
            if (js.length != 1) {
                logger.log(TreeLogger.ERROR,
                        "The module must not have multiple fragments when using the "
                                + getDescription() + " Linker.", null);
                throw new UnableToCompleteException();
            }
            out.print(js[0]);
            out.newline();
        }
        out.print("var $stats = function() { };");
        out.newline();
        out.print("var $sessionId = function() { };");
        out.newline();
        //global window
        //TODO: check this against jsdom
        //out.print("var window = { };");
        //out.newline();
        //preload code
        addPreloadCode(logger, context, artifacts, result, out);
        out.newline();
        out.print("gwtOnLoad(null, '" + context.getModuleName() + "', null);");
        out.newline();
        //out.print("})();");
        //out.newline();
        //and to string
        toReturn.add(emitString(logger, out.toString(), context.getModuleName() + ".js"));
        return toReturn;
    }
   
    protected void addPreloadCode(TreeLogger logger, LinkerContext context,
            ArtifactSet artifacts, CompilationResult result,
            DefaultTextOutput out) throws UnableToCompleteException {
        //noop
    }

}
TOP

Related Classes of org.gwtnode.dev.linker.GwtNodeLinker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.