highlighting refactored

This commit is contained in:
Honfika
2013-11-01 01:07:19 +01:00
parent 2cf26a4c31
commit d23c2dbe63
242 changed files with 1572 additions and 1075 deletions
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphPart;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphSourceItemPos;
@@ -47,7 +47,7 @@ public abstract class BinaryOpItem extends GraphTargetItem implements BinaryOp {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
if (leftSide.getPrecedence() > precedence) {
writer.append("(");
leftSide.toString(writer, localData);
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.Graph;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -37,7 +37,7 @@ public class BlockItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
writer.append("{").newLine();
writer.indent();
Graph.graphToString(commands, writer, localData);
@@ -1,6 +1,7 @@
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
@@ -13,6 +14,7 @@ import java.util.List;
public class BreakItem extends GraphTargetItem {
public long loopId;
private boolean labelRequired;
public BreakItem(GraphSourceItem src, long loopId) {
super(src, NOPRECEDENCE);
@@ -20,9 +22,16 @@ public class BreakItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
writer.append("break");
if (loopId != writer.getLoop()) {
if (writer instanceof NulWriter) {
NulWriter nulWriter = (NulWriter) writer;
labelRequired = loopId != nulWriter.getLoop();
if (labelRequired) {
nulWriter.setLoopUsed(loopId);
}
}
if (labelRequired) {
writer.append(" loop" + loopId);
}
return writer;
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
@@ -36,7 +36,7 @@ public class CommaExpressionItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
boolean first = true;
for (GraphTargetItem t : commands) {
if (!first) {
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphTargetItem;
/**
@@ -33,7 +33,7 @@ public class CommentItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
return writer.append("/* " + comment + " */");
}
@@ -1,6 +1,7 @@
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
@@ -13,6 +14,7 @@ import java.util.List;
public class ContinueItem extends GraphTargetItem {
public long loopId;
private boolean labelRequired;
public ContinueItem(GraphSourceItem src, long loopId) {
super(src, NOPRECEDENCE);
@@ -20,9 +22,16 @@ public class ContinueItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
writer.append("continue");
if (loopId != writer.getNonSwitchLoop()) {
if (writer instanceof NulWriter) {
NulWriter nulWriter = (NulWriter) writer;
labelRequired = loopId != nulWriter.getNonSwitchLoop();
if (labelRequired) {
nulWriter.setLoopUsed(loopId);
}
}
if (labelRequired) {
writer.append(" loop" + loopId);
}
return writer;
@@ -16,8 +16,9 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.LoopWithType;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.graph.Block;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -30,6 +31,7 @@ public class DoWhileItem extends LoopItem implements Block {
public List<GraphTargetItem> commands;
public List<GraphTargetItem> expression;
private boolean labelUsed;
@Override
public boolean needsSemicolon() {
@@ -50,9 +52,13 @@ public class DoWhileItem extends LoopItem implements Block {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
writer.startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
writer.append("loop" + loop.id + ":").newLine();
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
if (writer instanceof NulWriter) {
((NulWriter)writer).startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
}
if (labelUsed) {
writer.append("loop" + loop.id + ":").newLine();
}
writer.append("do").newLine();
writer.append("{").newLine();
writer.indent();
@@ -76,8 +82,10 @@ public class DoWhileItem extends LoopItem implements Block {
}
writer.append(");").newLine();
writer.append(":loop" + loop.id);
writer.endLoop(loop.id);
if (writer instanceof NulWriter) {
LoopWithType loopOjb = ((NulWriter)writer).endLoop(loop.id);
labelUsed = loopOjb.used;
}
return writer;
}
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
@@ -39,7 +39,7 @@ public class DuplicateItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
return value.toString(writer, localData);
}
@@ -16,8 +16,9 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.LoopWithType;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.graph.Block;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -32,6 +33,7 @@ public class ForItem extends LoopItem implements Block {
public GraphTargetItem expression;
public List<GraphTargetItem> finalCommands;
public List<GraphTargetItem> commands;
private boolean labelUsed;
@Override
public List<List<GraphTargetItem>> getSubs() {
@@ -51,9 +53,13 @@ public class ForItem extends LoopItem implements Block {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
writer.startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
writer.append("loop" + loop.id + ":").newLine();
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
if (writer instanceof NulWriter) {
((NulWriter)writer).startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
}
if (labelUsed) {
writer.append("loop" + loop.id + ":").newLine();
}
writer.append("for(");
int p = 0;
for (int i = 0; i < firstCommands.size(); i++) {
@@ -93,8 +99,10 @@ public class ForItem extends LoopItem implements Block {
}
writer.unindent();
writer.append("}").newLine();
writer.append(":loop" + loop.id).newLine();
writer.endLoop(loop.id);
if (writer instanceof NulWriter) {
LoopWithType loopOjb = ((NulWriter)writer).endLoop(loop.id);
labelUsed = loopOjb.used;
}
return writer;
}
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.Block;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -51,7 +51,7 @@ public class IfItem extends GraphTargetItem implements Block {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
GraphTargetItem expr = expression;
List<GraphTargetItem> ifBranch = onTrue;
List<GraphTargetItem> elseBranch = onFalse;
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -34,7 +34,7 @@ public class IntegerValueItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
return writer.append("" + intValue);
}
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
@@ -34,7 +34,7 @@ public class ParenthesisItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
writer.append("(");
value.toString(writer, localData);
return writer.append(")");
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphTargetItem;
/**
@@ -30,7 +30,7 @@ public class ScriptEndItem extends GraphTargetItem implements ExitItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
return writer;
}
@@ -16,8 +16,9 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.LoopWithType;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.graph.Block;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -33,6 +34,7 @@ public class SwitchItem extends LoopItem implements Block {
public List<List<GraphTargetItem>> caseCommands;
public List<GraphTargetItem> defaultCommands;
public List<Integer> valuesMapping;
private boolean labelUsed;
@Override
public List<List<GraphTargetItem>> getSubs() {
@@ -52,9 +54,18 @@ public class SwitchItem extends LoopItem implements Block {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
writer.startLoop(loop.id, LoopWithType.LOOP_TYPE_SWITCH);
writer.append("loopswitch" + loop.id + ":").newLine();
public boolean needsSemicolon() {
return false;
}
@Override
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
if (writer instanceof NulWriter) {
((NulWriter)writer).startLoop(loop.id, LoopWithType.LOOP_TYPE_SWITCH);
}
if (labelUsed) {
writer.append("loopswitch" + loop.id + ":").newLine();
}
writer.append("switch(");
switchedObject.toString(writer, localData);
writer.append(")").newLine();
@@ -91,8 +102,10 @@ public class SwitchItem extends LoopItem implements Block {
}
writer.unindent();
writer.append("}").newLine();
writer.append(":loop" + loop.id);
writer.endLoop(loop.id);
if (writer instanceof NulWriter) {
LoopWithType loopOjb = ((NulWriter)writer).endLoop(loop.id);
labelUsed = loopOjb.used;
}
return writer;
}
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
@@ -36,7 +36,7 @@ public class TernarOpItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
expression.toString(writer, localData);
writer.append("?");
onTrue.toString(writer, localData);
@@ -1,6 +1,6 @@
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -15,7 +15,7 @@ public class TrueItem extends GraphTargetItem {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
return writer.append("true");
}
@@ -16,7 +16,7 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphSourceItemPos;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -34,7 +34,7 @@ public abstract class UnaryOpItem extends GraphTargetItem implements UnaryOp {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
writer.append(operator);
if (value != null) {
if (value.precedence > precedence) {
@@ -16,8 +16,9 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.LoopWithType;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.graph.Block;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -32,15 +33,25 @@ import java.util.List;
public class UniversalLoopItem extends LoopItem implements Block {
public List<GraphTargetItem> commands;
private boolean labelUsed;
public UniversalLoopItem(GraphSourceItem src, Loop loop) {
super(src, loop);
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
writer.startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
writer.append("loop" + loop.id + ":").newLine();
public boolean needsSemicolon() {
return false;
}
@Override
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
if (writer instanceof NulWriter) {
((NulWriter)writer).startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
}
if (labelUsed) {
writer.append("loop" + loop.id + ":").newLine();
}
writer.append("while(true)").newLine();
writer.append("{").newLine();
writer.indent();
@@ -51,8 +62,10 @@ public class UniversalLoopItem extends LoopItem implements Block {
}
writer.unindent();
writer.append("}").newLine();
writer.append(":loop" + loop.id);
writer.endLoop(loop.id);
if (writer instanceof NulWriter) {
LoopWithType loopOjb = ((NulWriter)writer).endLoop(loop.id);
labelUsed = loopOjb.used;
}
return writer;
}
@@ -16,8 +16,9 @@
*/
package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.HilightedTextWriter;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.LoopWithType;
import com.jpexs.decompiler.flash.helpers.NulWriter;
import com.jpexs.decompiler.graph.Block;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
@@ -30,6 +31,7 @@ public class WhileItem extends LoopItem implements Block {
public List<GraphTargetItem> expression;
public List<GraphTargetItem> commands;
private boolean labelUsed;
@Override
public List<List<GraphTargetItem>> getSubs() {
@@ -45,9 +47,13 @@ public class WhileItem extends LoopItem implements Block {
}
@Override
protected HilightedTextWriter appendTo(HilightedTextWriter writer, LocalData localData) {
writer.startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
writer.append("loop" + loop.id + ":").newLine();
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
if (writer instanceof NulWriter) {
((NulWriter)writer).startLoop(loop.id, LoopWithType.LOOP_TYPE_LOOP);
}
if (labelUsed) {
writer.append("loop" + loop.id + ":").newLine();
}
writer.append("while(");
for (int i = 0; i < expression.size(); i++) {
if (expression.get(i).isEmpty()) {
@@ -68,8 +74,10 @@ public class WhileItem extends LoopItem implements Block {
}
writer.unindent();
writer.append("}").newLine();
writer.append(":loop" + loop.id);
writer.endLoop(loop.id);
if (writer instanceof NulWriter) {
LoopWithType loopOjb = ((NulWriter)writer).endLoop(loop.id);
labelUsed = loopOjb.used;
}
return writer;
}