@@ -363,6 +363,10 @@ public boolean visit(TypeLiteral node) {
363363 QNTypeBinding qn = new QNTypeBinding ();
364364 String qualifiedName = null ;
365365 if (declaringClass != null ) {
366+ ITypeBinding dclClass = null ;
367+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
368+ declaringClass = dclClass ;
369+ }
366370 qualifiedName = declaringClass .getQualifiedName ();
367371 qn .binding = declaringClass ;
368372 } else {
@@ -518,6 +522,10 @@ protected void visitForMusts(AbstractTypeDeclaration node) {
518522 String qualifiedName ;
519523 ITypeBinding declaringClass = superBinding .getDeclaringClass ();
520524 if (declaringClass != null ) {
525+ ITypeBinding dclClass = null ;
526+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
527+ declaringClass = dclClass ;
528+ }
521529 qualifiedName = declaringClass .getQualifiedName ();
522530 qn .binding = declaringClass ;
523531 } else {
@@ -548,6 +556,10 @@ protected void visitForMusts(AbstractTypeDeclaration node) {
548556 String qualifiedName ;
549557 ITypeBinding declaringClass = binding .getDeclaringClass ();
550558 if (declaringClass != null ) {
559+ ITypeBinding dclClass = null ;
560+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
561+ declaringClass = dclClass ;
562+ }
551563 qualifiedName = declaringClass .getQualifiedName ();
552564 qn .binding = declaringClass ;
553565 } else {
@@ -693,6 +705,10 @@ public boolean visit(SimpleName node) {
693705 if (!elementType .isPrimitive ()) {
694706 ITypeBinding declaringClass = elementType .getDeclaringClass ();
695707 if (declaringClass != null ) {
708+ ITypeBinding dclClass = null ;
709+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
710+ declaringClass = dclClass ;
711+ }
696712 qualifiedName = declaringClass .getQualifiedName ();
697713 qn .binding = declaringClass ;
698714 } else {
@@ -703,6 +719,10 @@ public boolean visit(SimpleName node) {
703719 } else {
704720 ITypeBinding declaringClass = typeBinding .getDeclaringClass ();
705721 if (declaringClass != null ) {
722+ ITypeBinding dclClass = null ;
723+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
724+ declaringClass = dclClass ;
725+ }
706726 qualifiedName = declaringClass .getQualifiedName ();
707727 qn .binding = declaringClass ;
708728 } else {
@@ -717,6 +737,29 @@ public boolean visit(SimpleName node) {
717737 qn .qualifiedName = qualifiedName ;
718738 optionals .add (qn );
719739 }
740+ } else if (binding instanceof IVariableBinding ) {
741+ IVariableBinding varBinding = (IVariableBinding ) binding ;
742+ if ((varBinding .getModifiers () & Modifier .STATIC ) != 0 ) {
743+ QNTypeBinding qn = new QNTypeBinding ();
744+ String qualifiedName = null ;
745+
746+ IVariableBinding variableDeclaration = varBinding .getVariableDeclaration ();
747+ ITypeBinding declaringClass = variableDeclaration .getDeclaringClass ();
748+
749+ ITypeBinding dclClass = null ;
750+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
751+ declaringClass = dclClass ;
752+ }
753+ qualifiedName = declaringClass .getQualifiedName ();
754+ if (isQualifiedNameOK (qualifiedName , node )
755+ && !musts .contains (qualifiedName )
756+ && !requires .contains (qualifiedName )) {
757+ qn .qualifiedName = qualifiedName ;
758+ optionals .add (qn );
759+ }
760+
761+ }
762+
720763 }
721764 return super .visit (node );
722765 }
@@ -734,6 +777,10 @@ public boolean visit(ClassInstanceCreation node) {
734777 } else if (resolveTypeBinding != null ){
735778 ITypeBinding declaringClass = resolveTypeBinding .getDeclaringClass ();
736779 if (declaringClass != null ) {
780+ ITypeBinding dclClass = null ;
781+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
782+ declaringClass = dclClass ;
783+ }
737784 qualifiedName = declaringClass .getQualifiedName ();
738785 qn .binding = declaringClass ;
739786 } else {
@@ -766,6 +813,10 @@ public boolean visit(ClassInstanceCreation node) {
766813// QNTypeBinding qn = new QNTypeBinding();
767814// String qualifiedName = null;
768815// if (declaringClass != null) {
816+ // ITypeBinding dclClass = null;
817+ // while ((dclClass = declaringClass.getDeclaringClass()) != null) {
818+ // declaringClass = dclClass;
819+ // }
769820// qualifiedName = declaringClass.getQualifiedName();
770821// qn.binding = declaringClass;
771822// } else {
@@ -798,6 +849,10 @@ public boolean visit(MethodInvocation node) {
798849 QNTypeBinding qn = new QNTypeBinding ();
799850 String qualifiedName = null ;
800851 if (declaringClass != null ) {
852+ ITypeBinding dclClass = null ;
853+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
854+ declaringClass = dclClass ;
855+ }
801856 qualifiedName = declaringClass .getQualifiedName ();
802857 qn .binding = declaringClass ;
803858 } else {
@@ -925,6 +980,10 @@ public boolean visit(FieldAccess node) {
925980 QNTypeBinding qn = new QNTypeBinding ();
926981 String qualifiedName = null ;
927982 if (declaringClass != null ) {
983+ ITypeBinding dclClass = null ;
984+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
985+ declaringClass = dclClass ;
986+ }
928987 qualifiedName = declaringClass .getQualifiedName ();
929988 qn .binding = declaringClass ;
930989 } else {
0 commit comments