Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fc32006

Browse files
author
jossonsmith
committed
Merge with /trunk for bug-fix of member initializer's class dependencies
1 parent 6533164 commit fc32006

File tree

4 files changed

+93
-11
lines changed

4 files changed

+93
-11
lines changed

src/net/sf/j2s/core/astvisitors/ASTKeywordParser.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,8 +1135,15 @@ private void charVisit(ASTNode node, boolean beCare) {
11351135
public boolean visit(InfixExpression node) {
11361136
Object constValue = node.resolveConstantExpressionValue();
11371137
if (constValue != null && (constValue instanceof Number
1138+
|| constValue instanceof Character
11381139
|| constValue instanceof Boolean)) {
1140+
if (constValue instanceof Character) {
1141+
buffer.append('\'');
1142+
}
11391143
buffer.append(constValue);
1144+
if (constValue instanceof Character) {
1145+
buffer.append('\'');
1146+
}
11401147
return false;
11411148
}
11421149
ITypeBinding expTypeBinding = node.resolveTypeBinding();
@@ -1506,8 +1513,15 @@ public void endVisit(PrefixExpression node) {
15061513
public boolean visit(PrefixExpression node) {
15071514
Object constValue = node.resolveConstantExpressionValue();
15081515
if (constValue != null && (constValue instanceof Number
1516+
|| constValue instanceof Character
15091517
|| constValue instanceof Boolean)) {
1518+
if (constValue instanceof Character) {
1519+
buffer.append('\'');
1520+
}
15101521
buffer.append(constValue);
1522+
if (constValue instanceof Character) {
1523+
buffer.append('\'');
1524+
}
15111525
return false;
15121526
}
15131527
String op = node.getOperator().toString();
@@ -1676,9 +1690,16 @@ public boolean visit(QualifiedName node) {
16761690
// }
16771691
Object constValue = node.resolveConstantExpressionValue();
16781692
if (constValue != null && (constValue instanceof Number
1693+
|| constValue instanceof Character
16791694
|| constValue instanceof Boolean)
16801695
&& isSimpleQualified(node)) {
1696+
if (constValue instanceof Character) {
1697+
buffer.append('\'');
1698+
}
16811699
buffer.append(constValue);
1700+
if (constValue instanceof Character) {
1701+
buffer.append('\'');
1702+
}
16821703
return false;
16831704
}
16841705
ASTNode parent = node.getParent();

src/net/sf/j2s/core/astvisitors/ASTScriptVisitor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,6 +1134,7 @@ protected boolean isFieldNeedPreparation(FieldDeclaration node) {
11341134
if (initializer != null) {
11351135
Object constValue = initializer.resolveConstantExpressionValue();
11361136
if (constValue != null && (constValue instanceof Number
1137+
|| constValue instanceof Character
11371138
|| constValue instanceof Boolean
11381139
|| constValue instanceof String)) {
11391140
return false;
@@ -1916,8 +1917,15 @@ public void endVisit(SimpleName node) {
19161917
public boolean visit(SimpleName node) {
19171918
Object constValue = node.resolveConstantExpressionValue();
19181919
if (constValue != null && (constValue instanceof Number
1920+
|| constValue instanceof Character
19191921
|| constValue instanceof Boolean)) {
1922+
if (constValue instanceof Character) {
1923+
buffer.append('\'');
1924+
}
19201925
buffer.append(constValue);
1926+
if (constValue instanceof Character) {
1927+
buffer.append('\'');
1928+
}
19211929
return false;
19221930
}
19231931
IBinding binding = node.resolveBinding();

src/net/sf/j2s/core/astvisitors/DependencyASTVisitor.java

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package net.sf.j2s.core.astvisitors;
1515

16+
import java.lang.reflect.InvocationTargetException;
1617
import java.util.ArrayList;
1718
import java.util.Arrays;
1819
import java.util.HashSet;
@@ -33,6 +34,7 @@
3334
import org.eclipse.jdt.core.dom.Expression;
3435
import org.eclipse.jdt.core.dom.FieldAccess;
3536
import org.eclipse.jdt.core.dom.FieldDeclaration;
37+
import org.eclipse.jdt.core.dom.IBinding;
3638
import org.eclipse.jdt.core.dom.IMethodBinding;
3739
import org.eclipse.jdt.core.dom.ITypeBinding;
3840
import org.eclipse.jdt.core.dom.IVariableBinding;
@@ -46,6 +48,7 @@
4648
import org.eclipse.jdt.core.dom.PackageDeclaration;
4749
import org.eclipse.jdt.core.dom.QualifiedName;
4850
import org.eclipse.jdt.core.dom.SimpleName;
51+
import org.eclipse.jdt.core.dom.SimpleType;
4952
import org.eclipse.jdt.core.dom.Statement;
5053
import org.eclipse.jdt.core.dom.TagElement;
5154
import org.eclipse.jdt.core.dom.TextElement;
@@ -646,14 +649,14 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
646649
isInteface = false;
647650
}
648651
if (isInteface || (node.getModifiers() & Modifier.STATIC) != 0) {
649-
DependencyASTVisitor visitor = new DependencyASTVisitor();
652+
DependencyASTVisitor visitor = getSelfVisitor();
650653
element.accept(visitor);
651654
requires.addAll(visitor.musts);
652655
requires.addAll(visitor.requires);
653656
requires.addAll(visitor.optionals);
654657
}
655658
} else if (element instanceof Initializer) {
656-
DependencyASTVisitor visitor = new DependencyASTVisitor();
659+
DependencyASTVisitor visitor = getSelfVisitor();
657660
element.accept(this);
658661
requires.addAll(visitor.musts);
659662
requires.addAll(visitor.requires);
@@ -666,7 +669,7 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
666669
VariableDeclarationFragment vdf = (VariableDeclarationFragment) fragments
667670
.get(j);
668671
Expression initializer = vdf.getInitializer();
669-
DependencyASTVisitor visitor = new DependencyASTVisitor();
672+
DependencyASTVisitor visitor = getSelfVisitor();
670673
if (initializer != null) {
671674
initializer.accept(visitor);
672675
}
@@ -680,7 +683,7 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
680683
// VariableDeclarationFragment vdf = (VariableDeclarationFragment) fragments
681684
// .get(j);
682685
// Expression initializer = vdf.getInitializer();
683-
// DependencyASTVisitor visitor = new DependencyASTVisitor();
686+
// DependencyASTVisitor visitor = getSelfVisitor();
684687
// if (initializer != null) {
685688
// initializer.accept(visitor);
686689
// }
@@ -693,6 +696,26 @@ protected void visitForRequires(AbstractTypeDeclaration node) {
693696
}
694697
}
695698

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+
696719
protected void visitForOptionals(AbstractTypeDeclaration node) {
697720

698721
}
@@ -713,6 +736,7 @@ protected boolean isSimpleQualified(QualifiedName node) {
713736
public boolean visit(QualifiedName node) {
714737
Object constValue = node.resolveConstantExpressionValue();
715738
if (constValue != null && (constValue instanceof Number
739+
|| constValue instanceof Character
716740
|| constValue instanceof Boolean)
717741
&& isSimpleQualified(node)) {
718742
//buffer.append(constValue);
@@ -726,12 +750,25 @@ && isSimpleQualified(node)) {
726750
public boolean visit(SimpleName node) {
727751
Object constValue = node.resolveConstantExpressionValue();
728752
if (constValue != null && (constValue instanceof Number
753+
|| constValue instanceof Character
729754
|| constValue instanceof Boolean)) {
730755
return false;
731756
}
732-
/*
733757
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();
735772
String qualifiedName = null;
736773
if (!typeBinding.isPrimitive()) {
737774
if (typeBinding.isArray()) {
@@ -743,26 +780,28 @@ public boolean visit(SimpleName node) {
743780
ITypeBinding declaringClass = elementType.getDeclaringClass();
744781
if (declaringClass != null) {
745782
qualifiedName = declaringClass.getQualifiedName();
783+
qn.binding = declaringClass;
746784
} else {
747785
qualifiedName = elementType.getQualifiedName();
786+
qn.binding = elementType;
748787
}
749788
}
750789
} else {
751790
ITypeBinding declaringClass = typeBinding.getDeclaringClass();
752791
if (declaringClass != null) {
753792
qualifiedName = declaringClass.getQualifiedName();
793+
qn.binding = declaringClass;
754794
} else {
755795
qualifiedName = typeBinding.getQualifiedName();
796+
qn.binding = typeBinding;
756797
}
757798
}
758799
}
759-
if ("byte".equals(qualifiedName)) {
760-
System.out.println("fds");
761-
}
762800
if (isQualifiedNameOK(qualifiedName, node)
763801
&& !musts.contains(qualifiedName)
764802
&& !requires.contains(qualifiedName)) {
765-
optionals.add(qualifiedName);
803+
qn.qualifiedName = qualifiedName;
804+
optionals.add(qn);
766805
}
767806
}
768807
// ASTNode parent = node.getParent();
@@ -772,7 +811,6 @@ public boolean visit(SimpleName node) {
772811
//
773812
// }
774813
// }
775-
*/
776814
return super.visit(node);
777815
}
778816

@@ -970,6 +1008,7 @@ public boolean visit(FieldAccess node) {
9701008
}
9711009
}
9721010
} else if (constValue != null && (constValue instanceof Number
1011+
|| constValue instanceof Character
9731012
|| constValue instanceof Boolean)) {
9741013
if ((exp instanceof QualifiedName)
9751014
|| (exp instanceof QualifiedName && isSimpleQualified((QualifiedName) exp))) {

src/net/sf/j2s/core/astvisitors/SWTScriptVisitor.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,15 @@ protected String[] skipDeclarePackages() {
9393
public boolean visit(SimpleName node) {
9494
Object constValue = node.resolveConstantExpressionValue();
9595
if (constValue != null && (constValue instanceof Number
96+
|| constValue instanceof Character
9697
|| constValue instanceof Boolean)) {
98+
if (constValue instanceof Character) {
99+
buffer.append('\'');
100+
}
97101
buffer.append(constValue);
102+
if (constValue instanceof Character) {
103+
buffer.append('\'');
104+
}
98105
return false;
99106
}
100107
IBinding binding = node.resolveBinding();
@@ -124,9 +131,16 @@ public boolean visit(SimpleName node) {
124131
public boolean visit(QualifiedName node) {
125132
Object constValue = node.resolveConstantExpressionValue();
126133
if (constValue != null && (constValue instanceof Number
134+
|| constValue instanceof Character
127135
|| constValue instanceof Boolean)
128136
&& isSimpleQualified(node)) {
137+
if (constValue instanceof Character) {
138+
buffer.append('\'');
139+
}
129140
buffer.append(constValue);
141+
if (constValue instanceof Character) {
142+
buffer.append('\'');
143+
}
130144
return false;
131145
}
132146
// IBinding nodeBinding = node.resolveBinding();

0 commit comments

Comments
 (0)