Repository: flex-falcon Updated Branches: refs/heads/develop c879d2bd6 -> 7360048d0
handle exceptions in parsing by skipping the scan and just copying into frame. A FlexUnit class was causing an exception Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/1ed29325 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/1ed29325 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/1ed29325 Branch: refs/heads/develop Commit: 1ed29325d6f18e4901f793a873ed277f196fbbf6 Parents: 4763528 Author: Alex Harui <[email protected]> Authored: Mon Dec 5 09:12:02 2016 -0800 Committer: Alex Harui <[email protected]> Committed: Mon Dec 5 09:12:17 2016 -0800 ---------------------------------------------------------------------- .../compiler/internal/targets/SWFTarget.java | 209 ++++++++++--------- 1 file changed, 106 insertions(+), 103 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1ed29325/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java ---------------------------------------------------------------------- diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java b/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java index 56df579..59afb54 100644 --- a/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java +++ b/compiler/src/main/java/org/apache/flex/compiler/internal/targets/SWFTarget.java @@ -422,100 +422,43 @@ public abstract class SWFTarget extends Target implements ISWFTarget final DoABCTag doABC = swfTags.getDoABCTag(); ABCParser parser = new ABCParser(doABC.getABCData()); ABCEmitter emitter = new ABCEmitter(); - parser.parseABC(emitter); - Collection<EmitterClassVisitor> classes = emitter.getDefinedClasses(); - for (EmitterClassVisitor clazz : classes) - { - System.out.println("scanning for overrides: " + clazz.getInstanceInfo().name.getBaseName()); - Iterator<Trait> instanceTraits = clazz.instanceTraits.iterator(); - while (instanceTraits.hasNext()) - { - Trait trait = instanceTraits.next(); - Vector<Metadata> metas = trait.getMetadata(); - metas: - for (Metadata meta : metas) - { - if (meta.getName().equals(IMetaAttributeConstants.ATTRIBUTE_SWFOVERRIDE)) - { - EntryOrderedStore<MethodInfo> methods = emitter.getMethodInfos(); - for (MethodInfo method : methods) - { - String methodName = method.getMethodName(); - if (methodName == null) continue; - if (methodName.equals(trait.getName().getBaseName())) - { - String[] keys = meta.getKeys(); - int n = keys.length; - for (int i = 0; i < n; i++) - { - if (keys[i].equals(IMetaAttributeConstants.NAME_SWFOVERRIDE_RETURNS)) - { - String returnString = meta.getValues()[i]; - int c = returnString.lastIndexOf("."); - String packageName = ""; - String baseName = returnString; - if (c != -1) - { - packageName = returnString.substring(0, c); - baseName = returnString.substring(c + 1); - } - - Pool<Name> namePool = emitter.getNamePool(); - List<Name> nameList = namePool.getValues(); - boolean foundName = false; - for (Name name : nameList) - { - String base = name.getBaseName(); - if (base == null) continue; - Namespace ns = name.getSingleQualifier(); - if (ns == null) continue; - String nsName = ns.getName(); - if (nsName == null) continue; - if (base.equals(baseName) && - nsName.equals(packageName)) - { - method.setReturnType(name); - foundName = true; - changedABC = true; - break metas; - } - } - if (!foundName) - { - Pool<String> stringPool = emitter.getStringPool(); - stringPool.add(packageName);// theoretically, it won't be added if already there - stringPool.add(baseName); // theoretically, it won't be added if already there - Namespace ns = new Namespace(ABCConstants.CONSTANT_PackageNs, packageName); - Pool<Namespace> nsPool = emitter.getNamespacePool(); - nsPool.add(ns); - Name name = new Name(ns, baseName); - namePool.add(name); - method.setReturnType(name); - changedABC = true; - break metas; - } - } - else if (keys[i].equals(IMetaAttributeConstants.NAME_SWFOVERRIDE_PARAMS)) - { - String paramList = meta.getValues()[i]; - String[] parts; - if (paramList.contains(",")) - parts = paramList.split(","); - else - { - parts = new String[1]; - parts[0] = paramList; - } - Vector<Name> newList = new Vector<Name>(); - for (String part : parts) - { - int c = part.lastIndexOf("."); + try { + parser.parseABC(emitter); + Collection<EmitterClassVisitor> classes = emitter.getDefinedClasses(); + for (EmitterClassVisitor clazz : classes) + { + System.out.println("scanning for overrides: " + clazz.getInstanceInfo().name.getBaseName()); + Iterator<Trait> instanceTraits = clazz.instanceTraits.iterator(); + while (instanceTraits.hasNext()) + { + Trait trait = instanceTraits.next(); + Vector<Metadata> metas = trait.getMetadata(); + metas: + for (Metadata meta : metas) + { + if (meta.getName().equals(IMetaAttributeConstants.ATTRIBUTE_SWFOVERRIDE)) + { + EntryOrderedStore<MethodInfo> methods = emitter.getMethodInfos(); + for (MethodInfo method : methods) + { + String methodName = method.getMethodName(); + if (methodName == null) continue; + if (methodName.equals(trait.getName().getBaseName())) + { + String[] keys = meta.getKeys(); + int n = keys.length; + for (int i = 0; i < n; i++) + { + if (keys[i].equals(IMetaAttributeConstants.NAME_SWFOVERRIDE_RETURNS)) + { + String returnString = meta.getValues()[i]; + int c = returnString.lastIndexOf("."); String packageName = ""; - String baseName = part; + String baseName = returnString; if (c != -1) { - packageName = part.substring(0, c); - baseName = part.substring(c + 1); + packageName = returnString.substring(0, c); + baseName = returnString.substring(c + 1); } Pool<Name> namePool = emitter.getNamePool(); @@ -532,10 +475,10 @@ public abstract class SWFTarget extends Target implements ISWFTarget if (base.equals(baseName) && nsName.equals(packageName)) { - newList.add(name); + method.setReturnType(name); foundName = true; changedABC = true; - break; + break metas; } } if (!foundName) @@ -548,20 +491,80 @@ public abstract class SWFTarget extends Target implements ISWFTarget nsPool.add(ns); Name name = new Name(ns, baseName); namePool.add(name); - newList.add(name); + method.setReturnType(name); changedABC = true; + break metas; } } - method.setParamTypes(newList); - break metas; - } - } - } - } - } - } - } + else if (keys[i].equals(IMetaAttributeConstants.NAME_SWFOVERRIDE_PARAMS)) + { + String paramList = meta.getValues()[i]; + String[] parts; + if (paramList.contains(",")) + parts = paramList.split(","); + else + { + parts = new String[1]; + parts[0] = paramList; + } + Vector<Name> newList = new Vector<Name>(); + for (String part : parts) + { + int c = part.lastIndexOf("."); + String packageName = ""; + String baseName = part; + if (c != -1) + { + packageName = part.substring(0, c); + baseName = part.substring(c + 1); + } + + Pool<Name> namePool = emitter.getNamePool(); + List<Name> nameList = namePool.getValues(); + boolean foundName = false; + for (Name name : nameList) + { + String base = name.getBaseName(); + if (base == null) continue; + Namespace ns = name.getSingleQualifier(); + if (ns == null) continue; + String nsName = ns.getName(); + if (nsName == null) continue; + if (base.equals(baseName) && + nsName.equals(packageName)) + { + newList.add(name); + foundName = true; + changedABC = true; + break; + } + } + if (!foundName) + { + Pool<String> stringPool = emitter.getStringPool(); + stringPool.add(packageName);// theoretically, it won't be added if already there + stringPool.add(baseName); // theoretically, it won't be added if already there + Namespace ns = new Namespace(ABCConstants.CONSTANT_PackageNs, packageName); + Pool<Namespace> nsPool = emitter.getNamespacePool(); + nsPool.add(ns); + Name name = new Name(ns, baseName); + namePool.add(name); + newList.add(name); + changedABC = true; + } + } + method.setParamTypes(newList); + break metas; + } + } + } + } + } + } + } + } } + catch (Exception ee) {} if (changedABC) { try {
