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

Skip to content

Commit eac6fde

Browse files
Fixing bug of compiling inner Class or enum type, like:
RadiusData.EnumType e = RadiusData.EnumType.THREE; avoid generate duplicated RadiusData, like org.xxx.RadiusData.RadiusData.EnumType
1 parent 25ef603 commit eac6fde

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

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

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import org.eclipse.jdt.core.dom.ForStatement;
3939
import org.eclipse.jdt.core.dom.IBinding;
4040
import org.eclipse.jdt.core.dom.IMethodBinding;
41-
import org.eclipse.jdt.core.dom.IPackageBinding;
41+
//import org.eclipse.jdt.core.dom.IPackageBinding;
4242
import org.eclipse.jdt.core.dom.ITypeBinding;
4343
import org.eclipse.jdt.core.dom.IVariableBinding;
4444
import org.eclipse.jdt.core.dom.IfStatement;
@@ -1001,6 +1001,7 @@ public boolean visit(QualifiedName node) {
10011001
}
10021002
}
10031003
ASTNode parent = node.getParent();
1004+
boolean qualifierVisited = false;
10041005
if (parent != null && !(parent instanceof QualifiedName)) {
10051006
Name qualifier = node.getQualifier();
10061007
while (qualifier instanceof QualifiedName) {
@@ -1022,18 +1023,21 @@ public boolean visit(QualifiedName node) {
10221023
if (!(binding instanceof IVariableBinding)) {
10231024
ITypeBinding typeBinding = qualifier.resolveTypeBinding();
10241025
if (typeBinding != null) {
1025-
String name = null;
1026-
ITypeBinding declaringClass = typeBinding.getDeclaringClass();
1027-
if (declaringClass != null) {
1028-
name = declaringClass.getQualifiedName();
1029-
} else {
1030-
IPackageBinding pkg = typeBinding.getPackage();
1031-
if (pkg != null) {
1032-
name = pkg.getName();
1033-
} else {
1034-
name = "";
1035-
}
1036-
}
1026+
// Compiling inner Class or enum type, like:
1027+
// RadiusData.EnumType e = RadiusData.EnumType.THREE;
1028+
// avoid generate duplicated RadiusData
1029+
String name = typeBinding.getQualifiedName();
1030+
// ITypeBinding declaringClass = typeBinding.getDeclaringClass();
1031+
// if (declaringClass != null) {
1032+
// name = declaringClass.getQualifiedName();
1033+
// } else {
1034+
// IPackageBinding pkg = typeBinding.getPackage();
1035+
// if (pkg != null) {
1036+
// name = pkg.getName();
1037+
// } else {
1038+
// name = "";
1039+
// }
1040+
// }
10371041
String xhtml = "net.sf.j2s.html.";
10381042
if (name.indexOf(xhtml) == 0) {
10391043
name = name.substring(xhtml.length());
@@ -1044,6 +1048,7 @@ public boolean visit(QualifiedName node) {
10441048
if (name.length() != 0) {
10451049
buffer.append(name);
10461050
buffer.append('.');
1051+
qualifierVisited = true;
10471052
}
10481053
}
10491054
}
@@ -1056,8 +1061,10 @@ public boolean visit(QualifiedName node) {
10561061
node.getName().accept(this);
10571062
return false;
10581063
}
1059-
qName.accept(this);
1060-
buffer.append('.');
1064+
if (!qualifierVisited) {
1065+
qName.accept(this);
1066+
buffer.append('.');
1067+
}
10611068
node.getName().accept(this);
10621069
return false;
10631070
}

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

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public boolean visit(QualifiedName node) {
126126
}
127127
}
128128
ASTNode parent = node.getParent();
129+
boolean qualifierVisited = false;
129130
if (parent != null && !(parent instanceof QualifiedName)) {
130131
Name qualifier = node.getQualifier();
131132
while (qualifier instanceof QualifiedName) {
@@ -147,13 +148,16 @@ public boolean visit(QualifiedName node) {
147148
if (!(binding instanceof IVariableBinding)) {
148149
ITypeBinding typeBinding = qualifier.resolveTypeBinding();
149150
if (typeBinding != null) {
150-
String name = null;
151-
ITypeBinding declaringClass = typeBinding.getDeclaringClass();
152-
if (declaringClass != null) {
153-
name = declaringClass.getQualifiedName();
154-
} else {
155-
name = "";
156-
}
151+
// Compiling inner Class or enum type, like:
152+
// RadiusData.EnumType e = RadiusData.EnumType.THREE;
153+
// avoid generate duplicated RadiusData
154+
String name = typeBinding.getQualifiedName();
155+
// ITypeBinding declaringClass = typeBinding.getDeclaringClass();
156+
// if (declaringClass != null) {
157+
// name = declaringClass.getQualifiedName();
158+
// } else {
159+
// name = "";
160+
// }
157161
name = shortenQualifiedName(name);
158162
if (name.indexOf("java.lang.") == 0) {
159163
name = name.substring(10);
@@ -178,6 +182,7 @@ public boolean visit(QualifiedName node) {
178182
if (name.length() != 0) {
179183
buffer.append(name);
180184
buffer.append('.');
185+
qualifierVisited = true;
181186
}
182187
}
183188
}
@@ -190,8 +195,10 @@ public boolean visit(QualifiedName node) {
190195
node.getName().accept(this);
191196
return false;
192197
}
193-
node.getQualifier().accept(this);
194-
buffer.append('.');
198+
if (!qualifierVisited) {
199+
node.getQualifier().accept(this);
200+
buffer.append('.');
201+
}
195202
node.getName().accept(this);
196203
return false;
197204
}

0 commit comments

Comments
 (0)