mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-09-13 15:45:38 +02:00
189 lines
5.4 KiB
Java
189 lines
5.4 KiB
Java
|
import org.aspectj.tools.ajdb.Main;
|
||
|
import org.aspectj.debugger.tty.CommandLineDebugger;
|
||
|
import org.aspectj.debugger.base.*;
|
||
|
import com.sun.jdi.*;
|
||
|
import com.sun.jdi.event.*;
|
||
|
import java.io.*;
|
||
|
import java.util.*;
|
||
|
import org.aspectj.testing.Tester;
|
||
|
|
||
|
public class AJDBTest implements StopListener, VMListener {
|
||
|
|
||
|
String classpath;
|
||
|
{
|
||
|
classpath = "\"" + Tester.outputDir();
|
||
|
String javaClasspath = System.getProperty("java.class.path");
|
||
|
if (javaClasspath != null) {
|
||
|
classpath += ";" + javaClasspath;
|
||
|
}
|
||
|
classpath += "\"";
|
||
|
}
|
||
|
|
||
|
protected String[] stringCommands() {
|
||
|
return new String[] {
|
||
|
"workingdir " + Tester.workingDir(),
|
||
|
"use " + "./new",
|
||
|
"stop on AJDBClass.java:24",
|
||
|
"run -classpath " + classpath + " AJDBClass",
|
||
|
};
|
||
|
}
|
||
|
protected String getSourceName() {
|
||
|
return "AJDBClass.java";
|
||
|
}
|
||
|
|
||
|
// Methods for VMListener
|
||
|
protected void death(VMDeathEvent e) {
|
||
|
System.out.println("*** Death: " + e);
|
||
|
}
|
||
|
protected void disconnect(VMDisconnectEvent e) {
|
||
|
System.out.println("*** Disconnect: " + e);
|
||
|
}
|
||
|
protected void start(VMStartEvent e) {
|
||
|
System.out.println("*** Start: " + e);
|
||
|
}
|
||
|
|
||
|
// Methods for StopListener
|
||
|
protected void access(AccessWatchpointEvent e) {
|
||
|
}
|
||
|
protected void breakpoint(BreakpointEvent e) {
|
||
|
checkLines((List) ex("where"), "next");
|
||
|
}
|
||
|
protected void exception(ExceptionEvent e) {
|
||
|
}
|
||
|
protected void modification(ModificationWatchpointEvent e) {
|
||
|
}
|
||
|
protected void step(StepEvent e) {
|
||
|
List lines = (List) ex("where");
|
||
|
checkLines(lines);
|
||
|
try {
|
||
|
StackFrame frame = (StackFrame) lines.get(0);
|
||
|
Location loc = frame.location();
|
||
|
if (loc.sourceName().equals("Thread.java") &&
|
||
|
loc.method().name().equals("exit")) {
|
||
|
isRunning = false;
|
||
|
}
|
||
|
} catch (Throwable t) {}
|
||
|
ex("next");
|
||
|
|
||
|
}
|
||
|
|
||
|
public void checkLines(Collection lines, Object then) {
|
||
|
checkLines(lines);
|
||
|
if (then != null) ex(then);
|
||
|
}
|
||
|
|
||
|
public void checkLines(Collection lines) {
|
||
|
Iterator iter = lines.iterator();
|
||
|
while (iter.hasNext()) {
|
||
|
StackFrame frame = (StackFrame) iter.next();
|
||
|
String source = "no.source";
|
||
|
try {
|
||
|
source = debugger.sourceName(frame.location());
|
||
|
} catch (Throwable t) {}
|
||
|
int line = debugger.lineNumber(frame.location());
|
||
|
if (source.equals(getSourceName())) {
|
||
|
Tester.check(line>0, "non-mapping line for " + frame);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// VMListener
|
||
|
public void vmDeathEvent(VMDeathEvent e) {
|
||
|
death(e);
|
||
|
}
|
||
|
public void vmDisconnectEvent(VMDisconnectEvent e) {
|
||
|
disconnect(e);
|
||
|
}
|
||
|
public void vmStartEvent(VMStartEvent e) {
|
||
|
start(e);
|
||
|
}
|
||
|
|
||
|
// StopListener
|
||
|
public final void accessWatchpointEvent(AccessWatchpointEvent e) {
|
||
|
access(e);
|
||
|
}
|
||
|
public final void breakpointEvent(BreakpointEvent e) {
|
||
|
breakpoint(e);
|
||
|
}
|
||
|
public final void exceptionEvent(ExceptionEvent e) {
|
||
|
exception(e);
|
||
|
}
|
||
|
public final void modificationWatchpointEvent(ModificationWatchpointEvent e) {
|
||
|
modification(e);
|
||
|
}
|
||
|
public final void stepEvent(StepEvent e) {
|
||
|
step(e);
|
||
|
}
|
||
|
|
||
|
AJDebugger debugger;
|
||
|
CommandLineDebugger ajdb;
|
||
|
|
||
|
public void realMain(String[] args) {
|
||
|
String fileName = null;
|
||
|
String[] newArgs = args;
|
||
|
if (args.length > 0) {
|
||
|
fileName = args[0];
|
||
|
newArgs = new String[args.length-1];
|
||
|
System.arraycopy(args, 1, newArgs, 0, newArgs.length);
|
||
|
}
|
||
|
realMain(fileName, newArgs);
|
||
|
}
|
||
|
|
||
|
private void realMain(String fileName, String[] args) {
|
||
|
debugger = (ajdb = new Main().debug(args)).getDebugger();
|
||
|
debugger.addStopListener(this);
|
||
|
debugger.addVMListener(this);
|
||
|
ex(fileName == null ? commands() : commands(fileName));
|
||
|
while (isRunning) {
|
||
|
//System.out.println(">>>>>>>> " + debugger.isRunning());
|
||
|
}
|
||
|
}
|
||
|
private boolean isRunning = true;
|
||
|
|
||
|
public final Collection commands() {
|
||
|
Collection list = new Vector();
|
||
|
String[] commands = stringCommands();
|
||
|
for (int i = 0; i < commands.length; i++) {
|
||
|
list.add(commands[i]);
|
||
|
}
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
Object ex(Object command) {
|
||
|
return ajdb.executeCommand(command+"");
|
||
|
}
|
||
|
|
||
|
void ex(Collection list) {
|
||
|
Iterator iter = list.iterator();
|
||
|
while (iter.hasNext()) {
|
||
|
ex(iter.next());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
final static String COMMENT = "#";
|
||
|
final static String FILENAME = "script.txt";
|
||
|
Collection commands(String fileName) {
|
||
|
Collection list = new Vector();
|
||
|
try {
|
||
|
BufferedReader in = new BufferedReader(new FileReader(fileName));
|
||
|
String line;
|
||
|
while ((line = in.readLine()) != null) {
|
||
|
line = line.trim();
|
||
|
if (line.startsWith(COMMENT)) {
|
||
|
continue;
|
||
|
}
|
||
|
list.add(line);
|
||
|
}
|
||
|
in.close();
|
||
|
} catch (IOException ioe) {
|
||
|
ioe.printStackTrace();
|
||
|
System.exit(-1);
|
||
|
}
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
public static void main(String[] args) {
|
||
|
new AJDBTest().realMain(args);
|
||
|
}
|
||
|
}
|