Компилятор Flex, не константа времени компиляции, а только в методах экземпляра

У меня возникла очень странная проблема с гибким компилятором (использующим Flash Builder 4.5), с которой я никогда раньше не сталкивался.

Я пытаюсь создать экземпляр класса (который существует в том же пакете), и компилятор не распознает класс как константу времени компиляции, а только в методах экземпляра. Методы класса (статические) компилируются без проблем.

Этот класс без проблем используется повсюду. Просто в этом одном месте он не будет компилироваться в методах экземпляра. Без разницы.

Я перепробовал все, что мог придумать ...

  • Добавлен импорт для UploadDate (хотя класс находится в том же пакете)
  • Чистый построенный проект (и все родительские / подпроекты)
  • Кэш удаленной модели кода (.metadata / .plugins / com.adobe.flexbuilder.codemodel / *)
  • Удален кеш всех сгенерированных ресурсов (... / com.adobe.flexide.editorcore / GeneratedAssets / *)
  • Скомпилирован с использованием разных гибких SDK (3.2, 3.5, 3.6)

Вот код:

package classes
{
    import classes.UploadDate;

    [Bindable]
    public class UserImages {
        ....

        //this compiles with no errors
        public static function classMethod():void {
            var ud:UploadDate = new UploadDate();
        }

        //this will not compile
        public function instanceMethod():void {
            //1046: Type was not found or was not a compile-time constant: UploadDate
            var obj:UploadDate = new UploadDate();
        }

        //this is the ugly workaround I am currently using (works fine at Runtime)
        public function hackyMethod():void {
            var Def:Class = getDefinitionByName("classes.UploadDate") as Class;
            var obj:* = new Def();
        }
    }
}

И класс UploadDate:

package classes
{
    [Bindable]
    public class UploadDate {
        public var date:String;
        public var numImages:int;

        public UploadDate() {
        }
    }
}

Кто-нибудь видел это раньше?

Спасибо, Мэтт


person Matt MacLean    schedule 18.08.2011    source источник
comment
Это действительно очень странно, мне было бы любопытно узнать, почему он не компилируется. Вы пробовали удалить свои файлы .aso? Я не уверен, где они создаются в Flash Builder, они могут находиться в одной из уже удаленных вами папок. Кроме того, поскольку Flex полагается на JRE, возможно, именно JRE кэширует то, что не следует кэшировать. Будет ли иметь значение перезагрузка компьютера?   -  person laurent    schedule 18.08.2011
comment
public UploadDate() { недействителен и не будет компилироваться. Но проблема, наверное, не в этом?   -  person Kaken Bok    schedule 18.08.2011
comment
Я столкнулся с подобной проблемой при использовании статических констант в сигнатурах методов или свойствах экземпляров. Решением здесь было переименовать класс, содержащий константы, так, чтобы он был упорядочен в алфавитном порядке перед всеми другими классами. Попробуйте переименовать UploadDate в AUploadDate.   -  person Kaken Bok    schedule 18.08.2011
comment
Возможно, это проблема с именами пакетов или классов, попробуйте переименовать пакет с classes на что-нибудь другое и сделайте то же самое для UploadDate   -  person cmann    schedule 19.08.2011
comment
Я заметил, что [Bindable] прямо над оператором класса убирает это   -  person The_asMan    schedule 19.08.2011
comment
@Jens Struwe - Оказывается, проблема была в этом ... Я забыл вернуться и обновить этот пост, хотя;)   -  person Matt MacLean    schedule 20.01.2012


Ответы (1)


«Я столкнулся с подобной проблемой при использовании статических констант в сигнатурах методов или свойствах экземпляров. Решением здесь было переименовать класс, содержащий константы, так, чтобы он располагался в алфавитном порядке перед всеми другими классами. Попробуйте переименовать UploadDate в AUploadDate». - Йенс Струве 18 авг.

person Matt MacLean    schedule 28.11.2012