diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/ITraceGenerator.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/ITraceGenerator.java index a39f372..27c8c28 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/ITraceGenerator.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/ITraceGenerator.java @@ -48,4 +48,7 @@ CtMethod m, String blockId, String incomings, String threadId, String lineNum, String timeStamp); + public abstract String generateInsertBeforeStatementsForClassDefinition( + String className, String classPath, String loaderPath); + } diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/JSONTraceGenerator.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/JSONTraceGenerator.java index 0d67a0c..473bd23 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/JSONTraceGenerator.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/JSONTraceGenerator.java @@ -151,6 +151,17 @@ keys.add("time"); values.add(timeStamp); return Tracer.TRACER + "MyPrintStream.println(" + generateJSONMapGenerator(keys, values) + " + \",\");"; } + + @Override + public String generateInsertBeforeStatementsForClassDefinition(String className, String classPath, String loaderPath) { + ArrayList keys = new ArrayList<>(); + ArrayList values = new ArrayList<>(); + keys.add("type"); values.add(DQ_GEN + " + \"classDef\" + " + DQ_GEN); + keys.add("name"); values.add(DQ_GEN + " + " + className + " + " + DQ_GEN); + keys.add("path"); values.add(DQ_GEN + " + " + classPath + " + " + DQ_GEN); + keys.add("loaderPath"); values.add(DQ_GEN + " + " + loaderPath + " + " + DQ_GEN); + return Tracer.TRACER + "MyPrintStream.println(" + generateJSONMapGenerator(keys, values) + " + \",\");"; + } private String generateJSONObjectGenerator(String className, String objectId) { ArrayList keys = new ArrayList<>(); diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/OutputStatementsGenerator.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/OutputStatementsGenerator.java index 50c0bb5..baf5c72 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/OutputStatementsGenerator.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/OutputStatementsGenerator.java @@ -252,4 +252,11 @@ String timeStamp = "System.nanoTime()"; return generator.generateInsertStatementsForBlockEntry(m, blockId, incomings, threadId, lineNum, timeStamp); } + + public String generateInsertBeforeStatementsForClassDefinition(CtClass cc, CtConstructor classInitializer) throws NotFoundException { + String className = "\"" + cc.getName() + "\""; + String classPath = "\"" + cc.getURL().getPath() + "\""; + String loaderPath = "\"" + cc.getClassPool().getClassLoader().getResource("").getPath() + "\""; + return generator.generateInsertBeforeStatementsForClassDefinition(className, classPath, loaderPath); + } } diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/PlainTextTraceGenerator.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/PlainTextTraceGenerator.java index 0da32cd..781f69f 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/PlainTextTraceGenerator.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/PlainTextTraceGenerator.java @@ -101,8 +101,7 @@ } @Override - public String generateInsertStatementsForCall(CtBehavior m, String lineNum, - String threadId) { + public String generateInsertStatementsForCall(CtBehavior m, String lineNum, String threadId) { return ""; } @@ -112,4 +111,10 @@ String threadId, String lineNum, String timeStamp) { return ""; } + + @Override + public String generateInsertBeforeStatementsForClassDefinition( + String className, String classPath, String loaderPath) { + return ""; + } } diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/Tracer.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/Tracer.java index 731e727..2f7453d 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/Tracer.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/Tracer.java @@ -117,8 +117,10 @@ * @param cc Javassist�̃N���X�I�u�W�F�N�g */ public static void classInstrumentation(CtClass cc) throws BadBytecode, NotFoundException, CannotCompileException, IOException { + classInitializerInstrumentation(cc, cc.getClassInitializer()); + for (final CtConstructor c : cc.getDeclaredConstructors()) { - methodInstrumentation(cc, c); + methodInstrumentation(cc, c); } for (final CtMethod m : cc.getDeclaredMethods()) { methodInstrumentation(cc, m); @@ -126,6 +128,15 @@ cc.instrument(conv); } + private static void classInitializerInstrumentation(CtClass cc, CtConstructor classInitializer) throws BadBytecode, NotFoundException, CannotCompileException { + if (classInitializer != null) { + methodInstrumentation(cc, classInitializer); + } else { + classInitializer = cc.makeClassInitializer(); + } + classInitializer.insertBefore(outputStatementsGenerator.generateInsertBeforeStatementsForClassDefinition(cc, classInitializer)); + } + private static void methodInstrumentation(final CtClass cc, final CtBehavior m) throws BadBytecode, NotFoundException, CannotCompileException { // ���\�b�h�{�̓��̊e�u���b�N�̍ŏ��ɏo�͕���}������(�o�͕��̑}���Ńu���b�N�������Ă��܂��̂ŁA��ɑ}�����Ă���) Block[] blocks = null;