Package flex2.tools.flexbuilder

Source Code of flex2.tools.flexbuilder.BuilderLibrary

/*
*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You 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 flex2.tools.flexbuilder;

import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import flex2.compiler.config.ConfigurationBuffer;
import flex2.compiler.config.ConfigurationException;
import flex2.compiler.config.ConfigurationValue;
import flex2.tools.oem.Configuration;
import flex2.tools.oem.Library;
import flex2.tools.oem.internal.OEMConfiguration;
import flex2.tools.oem.internal.OEMUtil;

/**
* BuilderLibrary is a subclass of flex2.tools.oem.Library. It does
* not have new methods but it overrides
* Library.compile().BuilderLibrary.compile() processes the compc
* command-line arguments in BuilderConfiguration before calling
* super.compile().  The argument processing extraces the following
* arguments:
*
* 1.  dump-config: creates a File (absolute or relative to the
*     current working directory) - same behavior as compc.
* 2.  compiler.debug: calls Configuration.enableDebugging().
* 3.  compiler.accessible: calls Configuration.enableAccessibility().
* 4.  compiler.strict: calls Configuration.enableStrictChecking().
* 5.  help: do nothing.
* 6.  output/directory: calls Library.setOutput() if
*     -directory=false. Calls Library.setDirectory if
*     -directory=true. The output is absolute or relative to the
*     current working directory) - same behavior as compc.
* 7.  version: do nothing.
* 8.  include-classes: calls Library.addComponent().
* 9.  include-file: calls Library.addArchiveFile(). The file is
*     absolute or relative to the current working directory - same
*     behavior as compc.
* 10. include-namespaces: calls Library.addComponent().
* 11. include-resource-bundles: calls Library.addResourceBundle().
* 12. include-sources: calls Library.addComponent().
*
* No valid compc command-line arguments should cause this argument
* processing to fail. FB should expect the argument processing to be
* consistent with compc (including absolute and relative paths). Any
* inconsistencies are considered Compiler API bugs. If the behavior
* is the same but it's incorrect, it's considered a compc
* command-line parsing bug. The only two execeptions are -help and
* -version. -help and -version will not do anything. FB should use F1
* for help and `About Flex Builder' for showing compiler version.
*/
public class BuilderLibrary extends Library
{
  public BuilderLibrary()
  {
    super();
  }
 
  private BuilderConfiguration c;
 
  public Configuration getDefaultConfiguration()
  {
    return new BuilderConfiguration(super.getDefaultConfiguration());
  }

  public void setConfiguration(Configuration configuration)
  {
    if (configuration instanceof BuilderConfiguration)
    {
      c = (BuilderConfiguration) configuration;
      super.setConfiguration(c.configuration);
    }
    else
    {
      super.setConfiguration(configuration);
    }
  }
 
  public Configuration getConfiguration()
  {
    return c != null ? c : super.getConfiguration();
  }
 
  protected int compile(boolean incremental)
  {
    //File dumpConfigFile = null;
    OEMConfiguration config = null;
   
        // step over special-cased configuration options:
        //     FlexBuilder exposes some compiler options as UI (such as a checkbox for accessibility)
        //     and other compiler options like -help have no meaning when used in FB (since you press F1...)
        //     FB serialzes these and gives it to us as a commandline in OEMConfiguration.extra
        //     So we need to parse those...
    if (c != null)
    {
      String[] args = c.extra;
      if (args != null && args.length > 0)
      {
        config = (OEMConfiguration) c.configuration;
        if (config != null)
        {
          ConfigurationBuffer cfgbuf = OEMUtil.getCompcConfigurationBuffer(OEMUtil.getLogger(getLogger(), null), resolver, args);
          if (cfgbuf == null)
          {
            return -1;
          }
         
          List positions = cfgbuf.getPositions();
          for (int i = 0, length = positions.size(); i < length; i++)
          {
            Object[] a = (Object[]) positions.get(i);
            String var = (String) a[0];   
           
            if ("link-report".equals(var))
            {
              config.keepLinkReport(true);
            }
            else if ("compiler.debug".equals(var))
            {
              try
              {
                String value = cfgbuf.peekSimpleConfigurationVar(var);
                String debugPassword = cfgbuf.peekSimpleConfigurationVar("debug-password");
                if ("true".equals(value))
                {
                  config.enableDebugging(true, debugPassword);
                }
                else if ("false".equals(value))
                {
                  config.enableDebugging(false, debugPassword);
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("compiler.verbose-stacktraces".equals(var))
            {
              try
              {
                String value = cfgbuf.peekSimpleConfigurationVar(var);
                if ("true".equals(value))
                {
                  config.enableVerboseStacktraces(true);
                }
                else if ("false".equals(value))
                {
                  config.enableVerboseStacktraces(false);
                }
              }
              catch (ConfigurationException ex)
              {
              }             
            }
            else if ("compiler.accessible".equals(var))
            {
              try
              {
                String value = cfgbuf.peekSimpleConfigurationVar(var);
                if ("true".equals(value))
                {
                  config.enableAccessibility(true);
                }
                else if ("false".equals(value))
                {
                  config.enableAccessibility(false);
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("compiler.strict".equals(var))
            {
              try
              {
                String value = cfgbuf.peekSimpleConfigurationVar(var);
                if ("true".equals(value))
                {
                  config.enableStrictChecking(true);
                }
                else if ("false".equals(value))
                {
                  config.enableStrictChecking(false);
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("help".equals(var))
            {
              // do nothing
            }
            else if ("output".equals(var))
            {
              try
              {
                String isDirectory = cfgbuf.peekSimpleConfigurationVar("directory");
                String value = cfgbuf.peekSimpleConfigurationVar(var);
                if ("true".equals(isDirectory))
                {
                  setDirectory(new File(value));
                }
                else
                {
                  setOutput(new File(value));
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("size-report".equals(var))
            {
              config.keepSizeReport(true);
            }
            else if ("directory".equals(var))
            {
              // do nothing
            }
            else if ("version".equals(var))
            {
              // do nothing
            }
            else if ("include-classes".equals(var))
            {
              try
              {
                List l = cfgbuf.peekConfigurationVar(var);
                for (int j = 0, len = l == null ? 0 : l.size(); j < len; j++)
                {
                  ConfigurationValue val = (ConfigurationValue) l.get(j);
                  List valArgs = val.getArgs();
                  for (int k = 0, size = valArgs == null ? 0 : valArgs.size(); k < size; k++)
                  {
                    this.addComponent((String) valArgs.get(k));
                  }
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("include-file".equals(var))
            {
              try
              {
                List l = cfgbuf.peekConfigurationVar(var);
                for (int j = 0, len = l == null ? 0 : l.size(); j < len; j++)
                {
                  ConfigurationValue val = (ConfigurationValue) l.get(j);
                  List valArgs = val.getArgs();
                  this.addArchiveFile((String) valArgs.get(0), new File((String) valArgs.get(1)));
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("include-namespaces".equals(var))
            {
              try
              {
                List l = cfgbuf.peekConfigurationVar(var);
                for (int j = 0, len = l == null ? 0 : l.size(); j < len; j++)
                {
                  ConfigurationValue val = (ConfigurationValue) l.get(j);
                  List valArgs = val.getArgs();
                  for (int k = 0, size = valArgs == null ? 0 : valArgs.size(); k < size; k++)
                  {
                    try
                    {
                      this.addComponent(new URI((String) valArgs.get(k)));
                    }
                    catch (URISyntaxException ex)
                    {
                      ex.printStackTrace();
                    }
                  }
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("include-resource-bundles".equals(var))
            {
              try
              {
                List l = cfgbuf.peekConfigurationVar(var);
                for (int j = 0, len = l == null ? 0 : l.size(); j < len; j++)
                {
                  ConfigurationValue val = (ConfigurationValue) l.get(j);
                  List valArgs = val.getArgs();
                  for (int k = 0, size = valArgs == null ? 0 : valArgs.size(); k < size; k++)
                  {
                    this.addResourceBundle((String) valArgs.get(k));
                  }
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
            else if ("include-sources".equals(var))
            {
              try
              {
                List l = cfgbuf.peekConfigurationVar(var);
                for (int j = 0, len = l == null ? 0 : l.size(); j < len; j++)
                {
                  ConfigurationValue val = (ConfigurationValue) l.get(j);
                  List valArgs = val.getArgs();
                  for (int k = 0, size = valArgs == null ? 0 : valArgs.size(); k < size; k++)
                  {
                    this.addComponent(new File((String) valArgs.get(k)));
                  }
                }
              }
              catch (ConfigurationException ex)
              {
              }
            }
          }

          config.setConfiguration(OEMUtil.trim(args, cfgbuf, excludes));
          // c.extra = null;
        }
      }
    }
   
    int result = super.compile(incremental);
   
    /*
    if (dumpConfigFile != null && config != null && config.cfgbuf != null)
    {
            try
            {
                String text = OEMUtil.formatConfigurationBuffer(config.cfgbuf);
              FileUtil.writeFile(dumpConfigFile.getAbsolutePath(), text);
            }
            catch (Exception ex)
            {
              ex.printStackTrace();
            }
    }
    */
   
    return result;
  }
 
  private static final Set<String> excludes = new HashSet<String>();

  static
  {
    excludes.add("directory");
    excludes.add("help");
    excludes.add("include-classes");
    excludes.add("include-file");
    excludes.add("include-namespaces");
    excludes.add("include-resource-bundles");
    excludes.add("include-sources");
    excludes.add("output");
    excludes.add("version");
    excludes.add("compiler.debug");
    excludes.add("compiler.profile");
    excludes.add("compiler.accessible");
    excludes.add("compiler.strict");
    excludes.add("compiler.verbose-stacktraces");
  }
}
TOP

Related Classes of flex2.tools.flexbuilder.BuilderLibrary

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.