com.googlecode.d2j.node.DexDebugNode Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle Show documentation
Show all versions of gradle Show documentation
fakeradnroid gradle builder
/*
* dex2jar - Tools to work with android .dex and java .class files
* Copyright (c) 2009-2014 Panxiaobo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.googlecode.d2j.node;
import java.util.ArrayList;
import java.util.List;
import com.googlecode.d2j.DexLabel;
import com.googlecode.d2j.visitors.DexDebugVisitor;
public class DexDebugNode extends DexDebugVisitor {
public List debugNodes = new ArrayList<>();
public List parameterNames;
public String fineName;
protected void addDebug(DexDebugOpNode dexDebugNode) {
debugNodes.add(dexDebugNode);
}
@Override
public void visitSetFile(String file) {
this.fineName = file;
}
@Override
public void visitRestartLocal(int reg, DexLabel label) {
addDebug(new DexDebugOpNode.RestartLocal(label, reg));
}
@Override
public void visitParameterName(final int parameterIndex, final String name) {
if (parameterNames == null) {
parameterNames = new ArrayList<>();
}
while (parameterNames.size() <= parameterIndex) {
parameterNames.add(null);
}
parameterNames.set(parameterIndex, name);
}
@Override
public void visitLineNumber(final int line, final DexLabel label) {
addDebug(new DexDebugOpNode.LineNumber(label, line));
}
@Override
public void visitStartLocal(int reg, DexLabel label, String name, String type, String signature) {
addDebug(new DexDebugOpNode.StartLocalNode(label, reg, name, type, signature));
}
@Override
public void visitEndLocal(int reg, DexLabel label) {
addDebug(new DexDebugOpNode.EndLocal(label, reg));
}
public void accept(DexDebugVisitor v) {
if (parameterNames != null) {
for (int i = 0; i < parameterNames.size(); i++) {
String name = parameterNames.get(i);
if (name != null) {
v.visitParameterName(i, name);
}
}
}
if (debugNodes != null) {
for (DexDebugOpNode n : debugNodes) {
n.accept(v);
}
}
if (fineName != null) {
v.visitSetFile(fineName);
}
}
@Override
public void visitPrologue(DexLabel dexLabel) {
addDebug(new DexDebugOpNode.Prologue(dexLabel));
}
@Override
public void visitEpiogue(DexLabel dexLabel) {
addDebug(new DexDebugOpNode.Epiogue(dexLabel));
}
public abstract static class DexDebugOpNode {
public DexLabel label;
protected DexDebugOpNode(DexLabel label) {
this.label = label;
}
public abstract void accept(DexDebugVisitor cv);
public static class StartLocalNode extends DexDebugOpNode {
public int reg;
public String name;
public String type;
public String signature;
public StartLocalNode(DexLabel label, int reg, String name, String type, String signature) {
super(label);
this.reg = reg;
this.name = name;
this.type = type;
this.signature = signature;
}
@Override
public void accept(DexDebugVisitor cv) {
cv.visitStartLocal(reg, label, name, type, signature);
}
}
public static class EndLocal extends DexDebugOpNode {
public int reg;
public EndLocal(DexLabel label, int reg) {
super(label);
this.reg = reg;
}
@Override
public void accept(DexDebugVisitor cv) {
cv.visitEndLocal(reg, label);
}
}
public static class Epiogue extends DexDebugOpNode {
public Epiogue(DexLabel label) {
super(label);
}
@Override
public void accept(DexDebugVisitor cv) {
cv.visitEpiogue(label);
}
}
public static class Prologue extends DexDebugOpNode {
public Prologue(DexLabel label) {
super(label);
}
@Override
public void accept(DexDebugVisitor cv) {
cv.visitPrologue(label);
}
}
public static class RestartLocal extends DexDebugOpNode {
public int reg;
public RestartLocal(DexLabel label, int reg) {
super(label);
this.reg = reg;
}
@Override
public void accept(DexDebugVisitor cv) {
cv.visitRestartLocal(reg, label);
}
}
public static class LineNumber extends DexDebugOpNode {
public int line;
public LineNumber(DexLabel label, int line) {
super(label);
this.line = line;
}
@Override
public void accept(DexDebugVisitor cv) {
cv.visitLineNumber(line, label);
}
}
}
}