@@ -363,6 +363,10 @@ public boolean visit(TypeLiteral node) {
363
363
QNTypeBinding qn = new QNTypeBinding ();
364
364
String qualifiedName = null ;
365
365
if (declaringClass != null ) {
366
+ ITypeBinding dclClass = null ;
367
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
368
+ declaringClass = dclClass ;
369
+ }
366
370
qualifiedName = declaringClass .getQualifiedName ();
367
371
qn .binding = declaringClass ;
368
372
} else {
@@ -518,6 +522,10 @@ protected void visitForMusts(AbstractTypeDeclaration node) {
518
522
String qualifiedName ;
519
523
ITypeBinding declaringClass = superBinding .getDeclaringClass ();
520
524
if (declaringClass != null ) {
525
+ ITypeBinding dclClass = null ;
526
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
527
+ declaringClass = dclClass ;
528
+ }
521
529
qualifiedName = declaringClass .getQualifiedName ();
522
530
qn .binding = declaringClass ;
523
531
} else {
@@ -548,6 +556,10 @@ protected void visitForMusts(AbstractTypeDeclaration node) {
548
556
String qualifiedName ;
549
557
ITypeBinding declaringClass = binding .getDeclaringClass ();
550
558
if (declaringClass != null ) {
559
+ ITypeBinding dclClass = null ;
560
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
561
+ declaringClass = dclClass ;
562
+ }
551
563
qualifiedName = declaringClass .getQualifiedName ();
552
564
qn .binding = declaringClass ;
553
565
} else {
@@ -693,6 +705,10 @@ public boolean visit(SimpleName node) {
693
705
if (!elementType .isPrimitive ()) {
694
706
ITypeBinding declaringClass = elementType .getDeclaringClass ();
695
707
if (declaringClass != null ) {
708
+ ITypeBinding dclClass = null ;
709
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
710
+ declaringClass = dclClass ;
711
+ }
696
712
qualifiedName = declaringClass .getQualifiedName ();
697
713
qn .binding = declaringClass ;
698
714
} else {
@@ -703,6 +719,10 @@ public boolean visit(SimpleName node) {
703
719
} else {
704
720
ITypeBinding declaringClass = typeBinding .getDeclaringClass ();
705
721
if (declaringClass != null ) {
722
+ ITypeBinding dclClass = null ;
723
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
724
+ declaringClass = dclClass ;
725
+ }
706
726
qualifiedName = declaringClass .getQualifiedName ();
707
727
qn .binding = declaringClass ;
708
728
} else {
@@ -717,6 +737,29 @@ public boolean visit(SimpleName node) {
717
737
qn .qualifiedName = qualifiedName ;
718
738
optionals .add (qn );
719
739
}
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
+
720
763
}
721
764
return super .visit (node );
722
765
}
@@ -734,6 +777,10 @@ public boolean visit(ClassInstanceCreation node) {
734
777
} else if (resolveTypeBinding != null ){
735
778
ITypeBinding declaringClass = resolveTypeBinding .getDeclaringClass ();
736
779
if (declaringClass != null ) {
780
+ ITypeBinding dclClass = null ;
781
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
782
+ declaringClass = dclClass ;
783
+ }
737
784
qualifiedName = declaringClass .getQualifiedName ();
738
785
qn .binding = declaringClass ;
739
786
} else {
@@ -766,6 +813,10 @@ public boolean visit(ClassInstanceCreation node) {
766
813
// QNTypeBinding qn = new QNTypeBinding();
767
814
// String qualifiedName = null;
768
815
// if (declaringClass != null) {
816
+ // ITypeBinding dclClass = null;
817
+ // while ((dclClass = declaringClass.getDeclaringClass()) != null) {
818
+ // declaringClass = dclClass;
819
+ // }
769
820
// qualifiedName = declaringClass.getQualifiedName();
770
821
// qn.binding = declaringClass;
771
822
// } else {
@@ -798,6 +849,10 @@ public boolean visit(MethodInvocation node) {
798
849
QNTypeBinding qn = new QNTypeBinding ();
799
850
String qualifiedName = null ;
800
851
if (declaringClass != null ) {
852
+ ITypeBinding dclClass = null ;
853
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
854
+ declaringClass = dclClass ;
855
+ }
801
856
qualifiedName = declaringClass .getQualifiedName ();
802
857
qn .binding = declaringClass ;
803
858
} else {
@@ -925,6 +980,10 @@ public boolean visit(FieldAccess node) {
925
980
QNTypeBinding qn = new QNTypeBinding ();
926
981
String qualifiedName = null ;
927
982
if (declaringClass != null ) {
983
+ ITypeBinding dclClass = null ;
984
+ while ((dclClass = declaringClass .getDeclaringClass ()) != null ) {
985
+ declaringClass = dclClass ;
986
+ }
928
987
qualifiedName = declaringClass .getQualifiedName ();
929
988
qn .binding = declaringClass ;
930
989
} else {
0 commit comments