Skip to content

Instantly share code, notes, and snippets.

@develar
Created November 28, 2010 12:48
Show Gist options
  • Save develar/718898 to your computer and use it in GitHub Desktop.
Save develar/718898 to your computer and use it in GitHub Desktop.
*flash Трава. Вот это трава. Явно в офисах Adobe сотрудникам не предоставляют легкий доступ к напиткам и они с жажды такое чудят. http://youtrack.jetbrains.net/issue/IDEA-56342 А вся штука в том, что знаете как в байткоде представлен name для implements IDataOutput? Как multiname {"private", "", "flash.net", "flash.net", "flash.utils"} (два раза flash.net это не моя опечатка). Вопрос, как же нам сформировать FQN? А никак.
swfdump, инструмент, входящий во Flex SDK, тупо перечесляет через запятую "private,,flash.net,flash.net,flash.utils:IDataOutput"
Инструменты декомпиляции, типа Sothink/Trillix FQN не строят — выкидывают к чертям дубликаты, пустые строчки и private и добавляют import statement как import flash.events.*; import flash.utils.*; (импорта flash.net нет, так как в данном примере класс Socket в пакете flash.net).
Самое смешное, как решает эту проблему компилятор — во Flex SDK есть три класса MultiName (при этом с самого рождения флекса у Adobe есть желание, видное по комментариям "TODO Try to remove this class and use ASC's equivalent", всю эту порнографию объединить) и как раз в одном из них есть метод getQName( int which ). Просто пробегаемся по всем элементам массива и symbolTable.findSourceByQName(namespace[i], localPart) != null
Как решать проблему, если у нас нет глобального symbolTable, мы в момент анализа байткода swf имеем таблицу лишь с символами определенными только и только в текущей swf? Только путем проверки в локальной таблице, а если не нашли — ну что ж, взять первый неравный private и надеяться, что оно подойдет. Знает ли кто более лучшее решение?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment