Skip to content

Commit c2962e6

Browse files
author
emmanue1
committed
Improve recognition of switch-enum statements
1 parent 686185b commit c2962e6

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util/StatementMaker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ protected void parseSwitch(WatchDog watchdog, BasicBlock basicBlock, Statements<
375375
if ((size > 3) && (conditionClass == ClassFileLocalVariableReferenceExpression.class) && (statements.get(size-2).getClass() == SwitchStatement.class)) {
376376
// Check pattern & make 'switch-string'
377377
SwitchStatementMaker.makeSwitchString(localVariableMaker, statements, switchStatement);
378-
} else if ((bodyDeclaration.getInnerTypeDeclarations() != null) && (conditionClass == ArrayExpression.class)) {
378+
} else if (conditionClass == ArrayExpression.class) {
379379
// Check pattern & make 'switch-enum'
380380
SwitchStatementMaker.makeSwitchEnum(bodyDeclaration, switchStatement);
381381
}

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util/SwitchStatementMaker.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,14 @@ public static void makeSwitchEnum(ClassFileBodyDeclaration bodyDeclaration, Swit
187187
FieldReferenceExpression fre = (FieldReferenceExpression)ae.getExpression();
188188

189189
if (fre.getDescriptor().equals("[I") && fre.getName().startsWith("$SwitchMap$")) {
190-
// Javac switch-enum pattern
191-
ClassFileClassDeclaration syntheticClass = (ClassFileClassDeclaration)bodyDeclaration.getInnerTypeDeclaration(fre.getInternalTypeName());
190+
ClassFileClassDeclaration syntheticClass = (ClassFileClassDeclaration)bodyDeclaration.getInnerTypeDeclaration(fre.getInternalTypeName());
192191

193-
bodyDeclaration = (ClassFileBodyDeclaration)syntheticClass.getBodyDeclaration();
194-
195-
DefaultList<Statement> statements = (DefaultList)bodyDeclaration.getMethodDeclarations().get(0).getStatements();
196-
updateSwitchStatement(switchStatement, statements.listIterator(1));
192+
if (syntheticClass != null) {
193+
// Javac switch-enum pattern
194+
bodyDeclaration = (ClassFileBodyDeclaration) syntheticClass.getBodyDeclaration();
195+
DefaultList<Statement> statements = (DefaultList) bodyDeclaration.getMethodDeclarations().get(0).getStatements();
196+
updateSwitchStatement(switchStatement, statements.listIterator(1));
197+
}
197198
}
198199
} else if (expressionClass == ClassFileMethodInvocationExpression.class) {
199200
MethodInvocationExpression mie = (MethodInvocationExpression)ae.getExpression();

0 commit comments

Comments
 (0)