13
13
14
14
package net .sf .j2s .core .astvisitors ;
15
15
16
+ import java .lang .reflect .InvocationTargetException ;
16
17
import java .util .ArrayList ;
17
18
import java .util .Arrays ;
18
19
import java .util .HashSet ;
33
34
import org .eclipse .jdt .core .dom .Expression ;
34
35
import org .eclipse .jdt .core .dom .FieldAccess ;
35
36
import org .eclipse .jdt .core .dom .FieldDeclaration ;
37
+ import org .eclipse .jdt .core .dom .IBinding ;
36
38
import org .eclipse .jdt .core .dom .IMethodBinding ;
37
39
import org .eclipse .jdt .core .dom .ITypeBinding ;
38
40
import org .eclipse .jdt .core .dom .IVariableBinding ;
46
48
import org .eclipse .jdt .core .dom .PackageDeclaration ;
47
49
import org .eclipse .jdt .core .dom .QualifiedName ;
48
50
import org .eclipse .jdt .core .dom .SimpleName ;
51
+ import org .eclipse .jdt .core .dom .SimpleType ;
49
52
import org .eclipse .jdt .core .dom .Statement ;
50
53
import org .eclipse .jdt .core .dom .TagElement ;
51
54
import org .eclipse .jdt .core .dom .TextElement ;
@@ -646,14 +649,14 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
646
649
isInteface = false ;
647
650
}
648
651
if (isInteface || (node .getModifiers () & Modifier .STATIC ) != 0 ) {
649
- DependencyASTVisitor visitor = new DependencyASTVisitor ();
652
+ DependencyASTVisitor visitor = getSelfVisitor ();
650
653
element .accept (visitor );
651
654
requires .addAll (visitor .musts );
652
655
requires .addAll (visitor .requires );
653
656
requires .addAll (visitor .optionals );
654
657
}
655
658
} else if (element instanceof Initializer ) {
656
- DependencyASTVisitor visitor = new DependencyASTVisitor ();
659
+ DependencyASTVisitor visitor = getSelfVisitor ();
657
660
element .accept (this );
658
661
requires .addAll (visitor .musts );
659
662
requires .addAll (visitor .requires );
@@ -666,7 +669,7 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
666
669
VariableDeclarationFragment vdf = (VariableDeclarationFragment ) fragments
667
670
.get (j );
668
671
Expression initializer = vdf .getInitializer ();
669
- DependencyASTVisitor visitor = new DependencyASTVisitor ();
672
+ DependencyASTVisitor visitor = getSelfVisitor ();
670
673
if (initializer != null ) {
671
674
initializer .accept (visitor );
672
675
}
@@ -680,7 +683,7 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
680
683
// VariableDeclarationFragment vdf = (VariableDeclarationFragment) fragments
681
684
// .get(j);
682
685
// Expression initializer = vdf.getInitializer();
683
- // DependencyASTVisitor visitor = new DependencyASTVisitor ();
686
+ // DependencyASTVisitor visitor = getSelfVisitor ();
684
687
// if (initializer != null) {
685
688
// initializer.accept(visitor);
686
689
// }
@@ -693,6 +696,26 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
693
696
}
694
697
}
695
698
699
+ private DependencyASTVisitor getSelfVisitor () {
700
+ try {
701
+ Object obj = this .getClass ().getConstructor (new Class [0 ]).newInstance (new Object [0 ]);
702
+ return (DependencyASTVisitor ) obj ;
703
+ } catch (IllegalArgumentException e ) {
704
+ e .printStackTrace ();
705
+ } catch (SecurityException e ) {
706
+ e .printStackTrace ();
707
+ } catch (InstantiationException e ) {
708
+ e .printStackTrace ();
709
+ } catch (IllegalAccessException e ) {
710
+ e .printStackTrace ();
711
+ } catch (InvocationTargetException e ) {
712
+ e .printStackTrace ();
713
+ } catch (NoSuchMethodException e ) {
714
+ e .printStackTrace ();
715
+ }
716
+ return null ;
717
+ }
718
+
696
719
protected void visitForOptionals (AbstractTypeDeclaration node ) {
697
720
698
721
}
@@ -713,6 +736,7 @@ protected boolean isSimpleQualified(QualifiedName node) {
713
736
public boolean visit (QualifiedName node ) {
714
737
Object constValue = node .resolveConstantExpressionValue ();
715
738
if (constValue != null && (constValue instanceof Number
739
+ || constValue instanceof Character
716
740
|| constValue instanceof Boolean )
717
741
&& isSimpleQualified (node )) {
718
742
//buffer.append(constValue);
@@ -726,12 +750,25 @@ && isSimpleQualified(node)) {
726
750
public boolean visit (SimpleName node ) {
727
751
Object constValue = node .resolveConstantExpressionValue ();
728
752
if (constValue != null && (constValue instanceof Number
753
+ || constValue instanceof Character
729
754
|| constValue instanceof Boolean )) {
730
755
return false ;
731
756
}
732
- /*
733
757
ITypeBinding typeBinding = node .resolveTypeBinding ();
734
- if (typeBinding != null) {
758
+ IBinding binding = node .resolveBinding ();
759
+ boolean isCasting = false ;
760
+ boolean isQualified = false ;
761
+ ASTNode nodeParent = node .getParent ();
762
+ while (nodeParent != null && nodeParent instanceof QualifiedName ) {
763
+ isQualified = true ;
764
+ nodeParent = nodeParent .getParent ();
765
+ }
766
+ if (nodeParent != null && nodeParent instanceof SimpleType ) {
767
+ isCasting = true ;
768
+ }
769
+ if (typeBinding != null && !isCasting && isQualified
770
+ && !(binding instanceof IVariableBinding )) {
771
+ QNTypeBinding qn = new QNTypeBinding ();
735
772
String qualifiedName = null ;
736
773
if (!typeBinding .isPrimitive ()) {
737
774
if (typeBinding .isArray ()) {
@@ -743,26 +780,28 @@ public boolean visit(SimpleName node) {
743
780
ITypeBinding declaringClass = elementType .getDeclaringClass ();
744
781
if (declaringClass != null ) {
745
782
qualifiedName = declaringClass .getQualifiedName ();
783
+ qn .binding = declaringClass ;
746
784
} else {
747
785
qualifiedName = elementType .getQualifiedName ();
786
+ qn .binding = elementType ;
748
787
}
749
788
}
750
789
} else {
751
790
ITypeBinding declaringClass = typeBinding .getDeclaringClass ();
752
791
if (declaringClass != null ) {
753
792
qualifiedName = declaringClass .getQualifiedName ();
793
+ qn .binding = declaringClass ;
754
794
} else {
755
795
qualifiedName = typeBinding .getQualifiedName ();
796
+ qn .binding = typeBinding ;
756
797
}
757
798
}
758
799
}
759
- if ("byte".equals(qualifiedName)) {
760
- System.out.println("fds");
761
- }
762
800
if (isQualifiedNameOK (qualifiedName , node )
763
801
&& !musts .contains (qualifiedName )
764
802
&& !requires .contains (qualifiedName )) {
765
- optionals.add(qualifiedName);
803
+ qn .qualifiedName = qualifiedName ;
804
+ optionals .add (qn );
766
805
}
767
806
}
768
807
// ASTNode parent = node.getParent();
@@ -772,7 +811,6 @@ public boolean visit(SimpleName node) {
772
811
//
773
812
// }
774
813
// }
775
- */
776
814
return super .visit (node );
777
815
}
778
816
@@ -970,6 +1008,7 @@ public boolean visit(FieldAccess node) {
970
1008
}
971
1009
}
972
1010
} else if (constValue != null && (constValue instanceof Number
1011
+ || constValue instanceof Character
973
1012
|| constValue instanceof Boolean )) {
974
1013
if ((exp instanceof QualifiedName )
975
1014
|| (exp instanceof QualifiedName && isSimpleQualified ((QualifiedName ) exp ))) {
0 commit comments