Apt hangs when processing sources with errors
---------------------------------------------

         Key: BEEHIVE-511
         URL: http://issues.apache.org/jira/browse/BEEHIVE-511
     Project: Beehive
        Type: Bug
  Components: Build  
    Versions: V1    
    Reporter: C Brett Bennett
    Priority: Critical


 Apt'hangs' under the following circumstance. 

When processing a @Control field, if it is a control-bean reference, e.g.
        @Control SomeBean _bean;
field where SomeBean is generated from a Some.jcx file, but at the time the 
_bean field is being processed the SomeBean class has not been generated or 
more specifically in the javac class table, then the loop in the 
ControlClientAnnotationProcessor:
------------------------------------------

        ClassType classType = (ClassType)fieldType;

        outer: while ( classType != null )
        {
                Collection<InterfaceType> intfs =classType.getSuperinterfaces();
                for ( InterfaceType intfType : intfs )
                {
                        if ( 
intfType.getDeclaration().getQualifiedName().equals( 
"org.apache.beehive.controls.api.bean.ControlBean" ) )
                     {
                         foundControlBean = true;
                         break outer;
                     }
                }
                 classType = classType.getSuperclass();
        }

--------------------------------------------
Will never end because the original fieldType (SomeBean) is an error-type that 
returns an error-type when getSuperClass() is called.

The following suffices to break the loop:
--------------------------------------------
             ClassType classType = (ClassType)fieldType;

             outer: while ( classType != null )
             {
                 Collection<InterfaceType> intfs = 
classType.getSuperinterfaces();
                 for ( InterfaceType intfType : intfs )
                 {
                     if ( intfType.getDeclaration().getQualifiedName().equals( 
"org.apache.beehive.controls.api.bean.ControlBean" ) )
                     {
                         foundControlBean = true;
                         break outer;
                     }
                 }
                 ClassType superType = classType.getSuperclass();
                 if(superType != null && superType.equals(classType))
                 {
                     break;
                 }
                 classType = superType;
             }



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira

Reply via email to