mirror of
https://github.com/moparisthebest/fernflower
synced 2024-11-27 03:32:14 -05:00
Handling of certain loop types in a finally block
This commit is contained in:
parent
b668038ed9
commit
b3a1c41244
@ -165,13 +165,14 @@ public class ClassesProcessor {
|
||||
|
||||
HashSet<String> setNestedClasses = mapNestedClassReferences.get(superClass);
|
||||
if(setNestedClasses != null) {
|
||||
StructClass scl = supernode.classStruct;
|
||||
StructInnerClassesAttribute inner = (StructInnerClassesAttribute)scl.getAttributes().getWithKey("InnerClasses");
|
||||
for(int i=0;i<inner.getStringentries().size();i++) {
|
||||
String nestedClass = inner.getStringentries().get(i)[0];
|
||||
if(!setNestedClasses.contains(nestedClass)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
StructClass scl = supernode.classStruct;
|
||||
StructInnerClassesAttribute inner = (StructInnerClassesAttribute) scl.getAttributes().getWithKey("InnerClasses");
|
||||
for(int i = 0; i < inner.getStringentries().size(); i++) {
|
||||
String nestedClass = inner.getStringentries().get(i)[0];
|
||||
if (!setNestedClasses.contains(nestedClass)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(setVisited.contains(nestedClass)) {
|
||||
continue;
|
||||
|
@ -35,15 +35,15 @@ public class PrintStreamLogger implements IFernflowerLogger {
|
||||
|
||||
|
||||
public void writeMessage(String message, int severity) {
|
||||
if(severity >= this.severity) {
|
||||
stream.println(InterpreterUtil.getIndentString(indent)+names[severity]+": "+message);
|
||||
}
|
||||
if (severity >= this.severity) {
|
||||
stream.println(InterpreterUtil.getIndentString(indent) + names[severity] + ": " + message);
|
||||
}
|
||||
}
|
||||
|
||||
public void writeMessage(String message, Throwable t) {
|
||||
t.printStackTrace(stream);
|
||||
writeMessage(message, ERROR);
|
||||
}
|
||||
public void writeMessage(String message, Throwable t) {
|
||||
t.printStackTrace(stream);
|
||||
writeMessage(message, ERROR);
|
||||
}
|
||||
|
||||
public void startClass(String classname) {
|
||||
stream.println(InterpreterUtil.getIndentString(indent++)+"Processing class "+classname+" ...");
|
||||
|
@ -129,9 +129,11 @@ public class ExprProcessor implements CodeConstants {
|
||||
FlattenStatementsHelper flatthelper = new FlattenStatementsHelper();
|
||||
DirectGraph dgraph = flatthelper.buildDirectGraph(root);
|
||||
|
||||
// try {
|
||||
// DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot"));
|
||||
// } catch(Exception ex) {ex.printStackTrace();}
|
||||
// try {
|
||||
// DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot"));
|
||||
// } catch (Exception ex) {
|
||||
// ex.printStackTrace();
|
||||
// }
|
||||
|
||||
// collect finally entry points
|
||||
Set<String> setFinallyShortRangeEntryPoints = new HashSet<String>();
|
||||
@ -212,6 +214,14 @@ public class ExprProcessor implements CodeConstants {
|
||||
// not be null at this point
|
||||
}
|
||||
|
||||
// handling of entry point loops
|
||||
int succ_entry_index = ndentrypoints.indexOf(nd.id);
|
||||
if(succ_entry_index >= 0) { // we are in a loop (e.g. continue in a finally block), drop all entry points in the list beginning with succ_entry_index
|
||||
for(int elements_to_remove = ndentrypoints.size() - succ_entry_index; elements_to_remove > 0; elements_to_remove--) {
|
||||
ndentrypoints.removeLast();
|
||||
}
|
||||
}
|
||||
|
||||
String ndentrykey = buildEntryPointKey(ndentrypoints);
|
||||
if (!mapSucc.containsKey(ndentrykey)) {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user