Skip to content

Commit 3edb5f1

Browse files
author
emmanue1
committed
Fix syntax errors in decompiled sources
1 parent 30c89a4 commit 3edb5f1

File tree

1 file changed

+56
-3
lines changed

1 file changed

+56
-3
lines changed

src/main/java/org/jd/core/v1/service/fragmenter/javasyntaxtojavafragment/visitor/SearchImportsVisitor.java

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class SearchImportsVisitor extends AbstractJavaSyntaxVisitor {
2323
protected String internalPackagePrefix;
2424
protected ImportsFragment importsFragment = JavaFragmentFactory.newImportsFragment();
2525
protected int maxLineNumber = 0;
26+
protected HashSet<String> mainTypeNames = new HashSet<>();
2627
protected HashSet<String> internalTypeNames = new HashSet<>();
2728

2829
public SearchImportsVisitor(String mainInternalName) {
@@ -44,12 +45,27 @@ public void visit(AnnotationElementValue reference) {
4445

4546
@Override
4647
public void visit(BodyDeclaration declaration) {
48+
if (mainTypeNames.isEmpty()) {
49+
mainTypeNames.add(getTypeName(declaration.getInternalTypeName()));
50+
declaration.accept(new MainTypeVisitor(mainTypeNames));
51+
}
4752
if (!internalTypeNames.contains(declaration.getInternalTypeName())) {
48-
internalTypeNames.add(declaration.getInternalTypeName());
4953
safeAccept(declaration.getMemberDeclarations());
5054
}
5155
}
5256

57+
protected static String getTypeName(String internalTypeName) {
58+
int index = internalTypeName.lastIndexOf('$');
59+
if (index != -1) {
60+
return internalTypeName.substring(index + 1);
61+
}
62+
index = internalTypeName.lastIndexOf('/');
63+
if (index != -1) {
64+
return internalTypeName.substring(index + 1);
65+
}
66+
return internalTypeName;
67+
}
68+
5369
public ImportsFragment getImportsFragment() {
5470
importsFragment.initLineCounts();
5571
return importsFragment;
@@ -67,8 +83,9 @@ public void visit(ObjectType type) {
6783

6884
@Override
6985
public void visit(ArrayExpression expression) {
70-
if (maxLineNumber < expression.getLineNumber())
86+
if (maxLineNumber < expression.getLineNumber()) {
7187
maxLineNumber = expression.getLineNumber();
88+
}
7289
expression.getExpression().accept(this);
7390
expression.getIndex().accept(this);
7491
}
@@ -288,9 +305,45 @@ protected void add(ObjectType type) {
288305
if (internalName.indexOf('/', internalPackagePrefix.length()) != -1) {
289306
importsFragment.addImport(internalName, qualifiedName);
290307
}
291-
} else {
308+
} else if (!mainTypeNames.contains(getTypeName(internalName))) {
292309
importsFragment.addImport(internalName, qualifiedName);
293310
}
294311
}
295312
}
313+
314+
protected static class MainTypeVisitor extends AbstractJavaSyntaxVisitor {
315+
HashSet<String> mainTypeNames;
316+
317+
public MainTypeVisitor(HashSet<String> mainTypeNames) {
318+
this.mainTypeNames = mainTypeNames;
319+
}
320+
321+
@Override
322+
public void visit(AnnotationDeclaration declaration) {
323+
mainTypeNames.add(getTypeName(declaration.getInternalTypeName()));
324+
safeAccept(declaration.getBodyDeclaration());
325+
}
326+
327+
@Override
328+
public void visit(ClassDeclaration declaration) {
329+
mainTypeNames.add(getTypeName(declaration.getInternalTypeName()));
330+
safeAccept(declaration.getBodyDeclaration());
331+
}
332+
333+
@Override
334+
public void visit(EnumDeclaration declaration) {
335+
mainTypeNames.add(getTypeName(declaration.getInternalTypeName()));
336+
safeAccept(declaration.getBodyDeclaration());
337+
}
338+
339+
@Override
340+
public void visit(InterfaceDeclaration declaration) {
341+
mainTypeNames.add(getTypeName(declaration.getInternalTypeName()));
342+
safeAccept(declaration.getBodyDeclaration());
343+
}
344+
345+
@Override public void visit(FieldDeclaration declaration) {}
346+
@Override public void visit(ConstructorDeclaration declaration) {}
347+
@Override public void visit(MethodDeclaration declaration) {}
348+
}
296349
}

0 commit comments

Comments
 (0)