Package flex2.compiler.as3

Source Code of flex2.compiler.as3.EmbedExtension$NonPublicAssetClass

/*
*
*  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.compiler.as3;

import flash.swf.tags.*;
import flex2.compiler.AssetInfo;
import flex2.compiler.CompilationUnit;
import flex2.compiler.CompilerContext;
import flex2.compiler.Transcoder;
import flex2.compiler.as3.reflect.TypeTable;
import flex2.compiler.util.CompilerMessage;
import flex2.compiler.util.NameFormatter;
import flex2.compiler.util.ThreadLocalToolkit;
import macromedia.asc.parser.Node;
import macromedia.asc.util.Context;

import java.util.Iterator;
import java.util.Map;

/**
* Compiler extension, which handles [Embed] metadata.
* @author Paul Reilly
*/
public final class EmbedExtension implements Extension
{
    private Transcoder[] transcoders;
    private String generatedOutputDir;
    private boolean checkDeprecation;

    public EmbedExtension(Transcoder[] transcoders, String generatedOutputDir, boolean checkDeprecation)
    {
        this.generatedOutputDir = generatedOutputDir;
        this.transcoders = transcoders;
        this.checkDeprecation = checkDeprecation;
    }

    public void parse1(CompilationUnit unit, TypeTable typeTable)
    {
        if (unit.metadata.size() > 0)
        {
            Node node = (Node) unit.getSyntaxTree();
            CompilerContext context = unit.getContext();
            Context cx = context.getAscContext();
            EmbedSkinClassEvaluator embedSkinClassEvaluator = new EmbedSkinClassEvaluator(unit);
            node.evaluate(cx, embedSkinClassEvaluator);
        }
    }
   
    public void parse2(CompilationUnit unit, TypeTable typeTable)
    {
        if (unit.metadata.size() > 0)
        {
            EmbedEvaluator embedEvaluator = new EmbedEvaluator(unit, typeTable.getSymbolTable(),
                                                               transcoders, generatedOutputDir,
                                                               checkDeprecation);
            embedEvaluator.setLocalizationManager(ThreadLocalToolkit.getLocalizationManager());
            Node node = (Node) unit.getSyntaxTree();
            CompilerContext context = unit.getContext();
            Context cx = context.getAscContext();
            node.evaluate(cx, embedEvaluator);
        }
    }

  public void analyze1(CompilationUnit unit, TypeTable typeTable)
  {
  }

  public void analyze2(CompilationUnit unit, TypeTable typeTable)
  {
  }

  public void analyze3(CompilationUnit unit, TypeTable typeTable)
  {
  }

  public void analyze4(CompilationUnit unit, TypeTable typeTable)
  {
  }

    public void generate(CompilationUnit unit, TypeTable typeTable)
    {
        // make sure that symbol/class associations are sane
        if (unit.hasAssets())
        {
            for (Iterator ai = unit.getAssets().iterator(); ai.hasNext();)
            {
                Map.Entry e = (Map.Entry) ai.next();
                String className = (String) e.getKey();
                DefineTag defineTag = ((AssetInfo) e.getValue()).getDefineTag();
                flex2.compiler.abc.AbcClass c = typeTable.getClass( NameFormatter.toColon(className) );

                if (c != null)
                {
                    if (!c.isPublic())
                    {
                        ThreadLocalToolkit.log( new NonPublicAssetClass( c.getName() ), unit.getSource().getNameForReporting() );
                    }

                    IncompatibleAssetClass incompatibleAssetClass = null;

                    // todo - this emacs macro created nightmare should be refactored
                    if ((defineTag instanceof DefineSprite) && !c.isSubclassOf("flash.display:Sprite"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineSprite", "flash.display.Sprite");
                    }
                    else if ((defineTag instanceof DefineBits) && !c.isSubclassOf("flash.display:Bitmap") && !c.isSubclassOf("flash.display:BitmapData"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineBits", "flash.display.Bitmap or flash.display.BitmapData");
                    }
                    else if ((defineTag instanceof DefineSound) && !c.isSubclassOf("flash.media:Sound"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineSound", "flash.media.Sound");
                    }
                    else if ((defineTag instanceof DefineFont) && !c.isSubclassOf("flash.text:Font"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineFont", "flash.text.Font");
                    }
                    else if ((defineTag instanceof DefineText) && !c.isSubclassOf("flash.display:StaticText"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineText", "flash.display.StaticText");
                    }
                    else if ((defineTag instanceof DefineEditText) && !c.isSubclassOf("flash.display:TextField"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineEditText", "flash.display.TextField");
                    }
                    else if ((defineTag instanceof DefineShape) && !c.isSubclassOf("flash.display:Shape"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineShape", "flash.display.Shape");
                    }
                    else if ((defineTag instanceof DefineButton) && !c.isSubclassOf("flash.display:SimpleButton"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineButton", "flash.display.SimpleButton");
                    }
                    else if ((defineTag instanceof DefineBinaryData) && !c.isSubclassOf("flash.utils:ByteArray"))
                    {
                        incompatibleAssetClass = new IncompatibleAssetClass(c.getName(), "DefineBinaryData", "flash.utils.ByteArray");
                    }

                    if (incompatibleAssetClass != null)
                    {
                        ThreadLocalToolkit.log(incompatibleAssetClass, unit.getSource().getNameForReporting());
                    }
                }
            }
        }
    }

  public static class NonPublicAssetClass extends CompilerMessage.CompilerWarning
  {
      private static final long serialVersionUID = 1300245254451431087L;
        public NonPublicAssetClass( String assetClass )
      {
          this.assetClass = assetClass;
      }
      public final String assetClass;
  }

  public static class IncompatibleAssetClass extends CompilerMessage.CompilerWarning
  {
      private static final long serialVersionUID = 7943386121665703853L;
        public IncompatibleAssetClass( String assetClass, String assetType, String requiredBase )
      {
          super();
          this.assetClass = assetClass;
          this.assetType = assetType;
          this.requiredBase = requiredBase;
      }
      public final String assetClass;
      public final String assetType;
      public final String requiredBase;
  }
}
TOP

Related Classes of flex2.compiler.as3.EmbedExtension$NonPublicAssetClass

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.