Отключить предупреждение о выборе типа CSS CSS?

Я создаю несколько большой проект Flex, который включает в себя несколько модулей (один проект Flex, который создает несколько SWF)

Прямо сейчас у меня есть один файл css, загружаемый в основной тег SWF:

<s:Application ... >
    <fx:Style source="css/main.css" />
...
</s:Application>

В файле CSS:

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";

s|Panel { 
    skinClass: ClassReference("com.skins.DefaultPanelSkin"); 
} 

s|Button {
    skinClass: ClassReference("com.skins.DefaultButtonSkin");
}

Файл CSS не упоминается нигде.

В настоящее время у меня 6 модулей (плюс основной SWF, в общей сложности 7 SWF). Я заметил, что количество предупреждений коррелирует с количеством модулей... каждый раз, когда я добавляю модуль, я получаю больше предупреждений. Прямо сейчас, я получаю 6 предупреждений для каждой записи в файле CSS, поэтому:

CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'

И повторите для Button, TextArea и т.д. и т.д. У меня так много бесполезных предупреждений, что невозможно увидеть, есть ли какие-либо допустимые.

Это предупреждение вызвано тем, что я делаю неправильно? Все стили применяются правильно и, похоже, работают так, как я хочу во время выполнения. Если я не делаю ничего плохого, могу ли я сказать компилятору игнорировать это предупреждение?

ПРИМЕЧАНИЕ. Я пробовал флаг -show-unused-type-selector-warnings=false компилятора, и он не работает... для аналогичного, но другого предупреждения.

Ответы

Ответ 1

Если вы смотрите на предупреждения в FlexBuilder, вы должны использовать графический интерфейс фильтрации проблем Eclipse. Предполагая, что Flex 4 достаточно похож на Flex 3 в этом отношении, в теге проблем в правом верхнем углу есть кнопка с подсказкой "Настроить фильтры, которые будут применяться к этому представлению". Это тот, у которого есть стрелки.

В диалоговом окне фильтров на фильтр по умолчанию укажите описание "не содержит" и текст под ним "Селектора типов CSS не поддерживаются в компонентах".

Ответ 2

Итак, я закончил просто загрузку исходного кода в компилятор, поиск его, чтобы найти это предупреждение, прокомментировать его и перекомпилировать компилятор. Это против версии, помеченной для gumbo beta2.

Index: modules/compiler/src/java/flex2/compiler/css/StylesContainer.java
===================================================================
--- modules/compiler/src/java/flex2/compiler/css/StylesContainer.java   (revision 10941)
+++ modules/compiler/src/java/flex2/compiler/css/StylesContainer.java   (working copy)
@@ -198,11 +198,11 @@
         {
             // [preilly] This restriction should be removed once the
             // app model supports encapsulation of CSS styles.
-            ComponentTypeSelectorsNotSupported componentTypeSelectorsNotSupported =
+            /*ComponentTypeSelectorsNotSupported componentTypeSelectorsNotSupported =
                 new ComponentTypeSelectorsNotSupported(getSource().getName(),
                                                        lineNumber,
                                                        selector);
-            ThreadLocalToolkit.log(componentTypeSelectorsNotSupported);
+            ThreadLocalToolkit.log(componentTypeSelectorsNotSupported);*/
             return true;
         }

Не самое элегантное решение... но эти предупреждения действительно раздражали.

Ответ 3

Еще одна причина, по которой я нашел это предупреждение, - это случай, когда вы ссылаетесь на parentApplication внутри класса.

В моем проекте есть 2 приложения, и есть несколько случаев, когда мне приходилось обращаться к одному или другому из приложений по той или иной причине.

Если я ссылаюсь на свою родительскую заявку следующим образом, я вижу предупреждения:

(this.parentApplication as SomeAppName).someFunction();

Если я оставляю ссылочный генерал, ошибки уходят:

this.parentApplication.someFunction();

Это не означает, что следует прокомментировать, является ли это хорошей практикой, но, надеюсь, поможет некоторым людям найти основную причину.

HTH

Ответ 4

Проблема заключается в том, что вы не можете определять глобальные стили в загруженных модулях. Вы можете использовать определенное имя для тега модуля и использовать потомок в своем CSS для применения стилей к дополнительным компонентам:

<mx:Module styleName='mySubStyle' .../>

и в css используйте:

.mySubStyle s|Panel { color: #FF0000; }

Ответ 5

Похоже, что вам нужно прописать ваш CSS-код: из документация: "Селектора типов, которые либо не определены пространством имен, либо не разрешать класс ActionScript, связанный с приложением, вызывают предупреждение во время компиляции."

Пример, который они приводят:

<Style>
    @namespace "library://ns.adobe.com/flex/spark";
    @namespace cx "com.mycompany.*";

    Button { color: #990000; }
    cx|MyFancyButton { color: #000099; }
</Style>

В вашем примере вам, похоже, не хватает пользовательского пространства имен, и, поскольку ваша архитектура является модульной, классы не разрешают приложение во время компиляции.

Ответ 6

Добавьте это в флаги компилятора в свойствах проекта:

-show-unused-type-selector-warnings=false

Ответ 7

Если у вас все еще есть эти предупреждения, можете ли вы проверить, отмечен ли какой-либо из ваших компонентов для сборки в качестве приложения?

Эти "неправильные" предупреждения о селекторе типа css появились в одном из моих проектов. Я заметил, что Flex Builder сделал дополнительное приложение для одного из моих компонентов (это можно проверить в папке bin-debug). Как только я удалил компонент в качестве приложения, предупреждения ушли.

Обратите внимание, что в компоненте не было объявления css, и предупреждения появились на моем основном ресурсе приложения.

Вы можете удалить метку "построить как приложение" для компонента, перейдя на панель свойств вашего приложения, откройте вкладку Flex Application, выберите компонент и нажмите кнопку "удалить".

В качестве дополнительного бонуса время компиляции уменьшилось (как минимум в 5 раз быстрее).