You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "Julian Kalinowski (JIRA)" <ji...@apache.org> on 2014/07/17 12:36:04 UTC

[jira] [Created] (FLEX-34420) random compile error: Cannot resolve attribute 'implements'

Julian Kalinowski created FLEX-34420:
----------------------------------------

             Summary: random compile error: Cannot resolve attribute 'implements'
                 Key: FLEX-34420
                 URL: https://issues.apache.org/jira/browse/FLEX-34420
             Project: Apache Flex
          Issue Type: Bug
          Components: MXML Compiler
    Affects Versions: Apache Flex 4.12.1, Apache Flex 4.11.0
         Environment: Maven 3.0.5, flexmojos 7.0.0, windows and linux, jenkins and without jenkins
            Reporter: Julian Kalinowski


Hi,
I'm having the same problem as described in [1].
When i compile our maven project, i get random errors like:

Cannot resolve attribute 'implements' for component type spark.components.BorderContainer.

It happens only with the biggest module we have, so it seems to correspond to project size.

It's not always for the same source file and eventually, the build will succeed.
I'm using flexmojos-7.0.0 and flex-sdk 4.12.1, but this happened before with earlier versions.

To investigate this further, i compiled and debugged my own version of mxmlc from the current apache flex sdk sources.

i was able to track down the error to the following code:

Line 54 in flex-sdk/modules/compiler/src/java/flex2/compiler/mxml/lang/AttributeHandler.java

"if (isSpecial(namespace, localPart))"

When localPart is "implements", this condition should return true.
And it does, most of the time. But sometimes, it doesn't.
This all leads to a "contains" check on the QNameSet "specialAttributes2009" in DocumentBuilder.java, which seems to occasionally return false even if an attribute exists in the Set.

Since this felt like a race condition, i replaced the optimized way QNameSet handles the contains-check and marked the method as synchronized.

The result is a mxmlc compiler, which doesn't have the error anymore.
However, i'm not sure this is the correct fix, since no other thread should modify the QNameSet...
So please take a look into this error and decide how to fix it.

[1] https://forums.adobe.com/message/5651765



--
This message was sent by Atlassian JIRA
(v6.2#6252)