diff --git a/TracerOnJavassist/src/_arraySample/A.java b/TracerOnJavassist/src/_arraySample/A.java new file mode 100644 index 0000000..2d43b0a --- /dev/null +++ b/TracerOnJavassist/src/_arraySample/A.java @@ -0,0 +1,16 @@ +package _arraySample; + + +public class A { + Object array[] = new Object[1]; + D d = new D(); + + public void init() { + array[0] = new B(); + } + + public void start() { + d.setC(((B)array[0]).getC()); + } + +} diff --git a/TracerOnJavassist/src/_arraySample/B.java b/TracerOnJavassist/src/_arraySample/B.java new file mode 100644 index 0000000..7d5c740 --- /dev/null +++ b/TracerOnJavassist/src/_arraySample/B.java @@ -0,0 +1,11 @@ +package _arraySample; + + +public class B { + C c = new C(); + + public C getC() { + return c; + } + +} diff --git a/TracerOnJavassist/src/_arraySample/C.java b/TracerOnJavassist/src/_arraySample/C.java new file mode 100644 index 0000000..aab5034 --- /dev/null +++ b/TracerOnJavassist/src/_arraySample/C.java @@ -0,0 +1,5 @@ +package _arraySample; + +public class C { + +} diff --git a/TracerOnJavassist/src/_arraySample/D.java b/TracerOnJavassist/src/_arraySample/D.java new file mode 100644 index 0000000..bed6be2 --- /dev/null +++ b/TracerOnJavassist/src/_arraySample/D.java @@ -0,0 +1,9 @@ +package _arraySample; + +public class D { + C c; + + void setC(C c) { + this.c = c; + } +} diff --git a/TracerOnJavassist/src/_arraySample/Main.java b/TracerOnJavassist/src/_arraySample/Main.java new file mode 100644 index 0000000..1dacf75 --- /dev/null +++ b/TracerOnJavassist/src/_arraySample/Main.java @@ -0,0 +1,15 @@ +package _arraySample; + + +public class Main { + + /** + * @param args + */ + public static void main(String[] args) { + A a = new A(); + a.init(); + a.start(); + } + +} diff --git a/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java b/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java index 4f9eefb..76682f7 100644 --- a/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java +++ b/TracerOnJavassist/src/tracer/OutputStatementsGenerator.java @@ -123,13 +123,13 @@ String thisClass; String thisObject; String methodSignature = null; - if ((m.getModifiers() & Modifier.STATIC) != 0) { + if ((m.getModifiers() & Modifier.STATIC) != 0 && m instanceof CtMethod) { // static���\�b�h�̏ꍇ methodSignature = "\"" + modifiers + ((CtMethod)m).getReturnType().getName() + " " + m.getLongName().replace('$', '.') + "\""; // AspectJ�ł̓��\�b�h�V�O�j�`�����ł͖����N���X�̓h�b�g�ŋ�؂��� thisClass = "\"" + declaredClassName + "\""; thisObject = "\"0\""; } else if (m instanceof CtConstructor) { - // �R���X�g���N�^�̏ꍇ + // �R���X�g���N�^�̏ꍇ(�N���X�������q�̏ꍇ������) methodSignature = "\"" + modifiers + m.getLongName().replace('$', '.') + "\""; // AspectJ�ł̓��\�b�h�V�O�j�`�����ł͖����N���X�̓h�b�g�ŋ�؂��� thisClass = "\"" + declaredClassName + "\""; thisObject = "\"0\""; @@ -173,7 +173,7 @@ String returnedObject; String thisClass; String thisObject; - if ((m.getModifiers() & Modifier.STATIC) != 0) { + if ((m.getModifiers() & Modifier.STATIC) != 0 && m instanceof CtMethod) { // static���\�b�h�̏ꍇ if (!((CtMethod)m).getReturnType().isPrimitive() || ((CtMethod)m).getReturnType() == CtClass.voidType) { returnedClass = "(($_ != null)?$_.getClass().getName():\"void\")"; @@ -187,13 +187,22 @@ thisObject = "\"0\""; } } else if (m instanceof CtConstructor) { - // �R���X�g���N�^�̏ꍇ + // �R���X�g���N�^�̏ꍇ(�N���X�������q�̏ꍇ������) if (!isCallerSideInstrumentation) { - // �Ăяo����ɖ��ߍ��ޏꍇ(�ʏ�) - returnedClass = "$0.getClass().getName()"; - returnedObject = "System.identityHashCode($0)"; - thisClass = "\"" + declaredClassName + "\""; - thisObject = "System.identityHashCode($0)"; + // �Ăяo����ɖ��ߍ��ޏꍇ + if ((m.getModifiers() & Modifier.STATIC) == 0) { + // �ʏ�̃R���X�g���N�^�̏ꍇ + returnedClass = "$0.getClass().getName()"; + returnedObject = "System.identityHashCode($0)"; + thisClass = "\"" + declaredClassName + "\""; + thisObject = "System.identityHashCode($0)"; + } else { + // �N���X�������q�̏ꍇ + returnedClass = "\"void\""; + returnedObject = "\"0\""; + thisClass = "\"" + declaredClassName + "\""; + thisObject = "\"0\""; + } } else { // �ďo�����ɖ��ߍ��ޏꍇ(�W���N���X�������̓f�t�H���g�R���X�g���N�^�̌ďo���A�܂��͐e�R���X�g���N�^�̌ďo��) returnedClass = "(($_ != null)?$_.getClass().getName():$0.getClass().getName())"; diff --git a/TracerOnJavassist/traces/__arraySample.txt b/TracerOnJavassist/traces/__arraySample.txt new file mode 100644 index 0000000..e56665a --- /dev/null +++ b/TracerOnJavassist/traces/__arraySample.txt @@ -0,0 +1,47 @@ +{"type":"classDef","name":"arraySample.Main","path":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/arraySample/Main.class","loaderPath":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/"}, +{"type":"methodEntry","signature":"public static void arraySample.Main.main(java.lang.String[])","receiver":{"class":"arraySample.Main","id":0},"args":[{"class":"[Ljava.lang.String;","id":865101683}],"threadId":1,"time":1929123793164451}, +{"type":"blockEntry","methodSignature":"arraySample.Main.main(java.lang.String[])","blockId":0,"incomings":0,"threadId":1,"lineNum":10,"time":1929123793181024}, +{"type":"methodCall","callerSideSignature":"arraySample.A()","threadId":1,"lineNum":10}, +{"type":"classDef","name":"arraySample.A","path":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/arraySample/A.class","loaderPath":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/"}, +{"type":"constructorEntry","signature":"public arraySample.A()","class":"arraySample.A","args":[],"threadId":1,"time":1929123793858048}, +{"type":"arrayCreate","array":{"class":"[Ljava.lang.Object;","id":1127555950},"dimension":1,"threadId":1,"lineNum":5,"time":1929123793886610}, +{"type":"fieldSet","fieldName":"arraySample.A.array","container":{"class":"arraySample.A","id":1437150522},"value":{"class":"[Ljava.lang.Object;","id":1127555950},"threadId":1,"lineNum":5,"time":1929123793904946}, +{"type":"methodCall","callerSideSignature":"arraySample.D()","threadId":1,"lineNum":6}, +{"type":"classDef","name":"arraySample.D","path":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/arraySample/D.class","loaderPath":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/"}, +{"type":"constructorEntry","signature":"public arraySample.D()","class":"arraySample.D","args":[],"threadId":1,"time":1929123794328439}, +{"type":"constructorExit","shortSignature":"arraySample.D()","returnValue":{"class":"arraySample.D","id":542899160},"threadId":1,"time":1929123794359469}, +{"type":"fieldSet","fieldName":"arraySample.A.d","container":{"class":"arraySample.A","id":1437150522},"value":{"class":"arraySample.D","id":542899160},"threadId":1,"lineNum":6,"time":1929123794374984}, +{"type":"constructorExit","shortSignature":"arraySample.A()","returnValue":{"class":"arraySample.A","id":1437150522},"threadId":1,"time":1929123794384858}, +{"type":"methodCall","callerSideSignature":"arraySample.A.init()","threadId":1,"lineNum":11}, +{"type":"methodEntry","signature":"public void arraySample.A.init()","receiver":{"class":"arraySample.A","id":1437150522},"args":[],"threadId":1,"time":1929123794402841}, +{"type":"blockEntry","methodSignature":"arraySample.A.init()","blockId":0,"incomings":0,"threadId":1,"lineNum":9,"time":1929123794411657}, +{"type":"fieldGet","fieldName":"arraySample.A.array","this":{"class":"arraySample.A","id":1437150522},"container":{"class":"arraySample.A","id":1437150522},"value":{"class":"[Ljava.lang.Object;","id":1127555950},"threadId":1,"lineNum":9,"time":1929123794426819}, +{"type":"methodCall","callerSideSignature":"arraySample.B()","threadId":1,"lineNum":9}, +{"type":"classDef","name":"arraySample.B","path":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/arraySample/B.class","loaderPath":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/"}, +{"type":"constructorEntry","signature":"public arraySample.B()","class":"arraySample.B","args":[],"threadId":1,"time":1929123794838676}, +{"type":"methodCall","callerSideSignature":"arraySample.C()","threadId":1,"lineNum":5}, +{"type":"classDef","name":"arraySample.C","path":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/arraySample/C.class","loaderPath":"/C:/Users/Nitta/git/TracerOnJavassist/TracerOnJavassist/bin/"}, +{"type":"constructorEntry","signature":"public arraySample.C()","class":"arraySample.C","args":[],"threadId":1,"time":1929123795158852}, +{"type":"constructorExit","shortSignature":"arraySample.C()","returnValue":{"class":"arraySample.C","id":1777161954},"threadId":1,"time":1929123795182125}, +{"type":"fieldSet","fieldName":"arraySample.B.c","container":{"class":"arraySample.B","id":1558398402},"value":{"class":"arraySample.C","id":1777161954},"threadId":1,"lineNum":5,"time":1929123795204692}, +{"type":"constructorExit","shortSignature":"arraySample.B()","returnValue":{"class":"arraySample.B","id":1558398402},"threadId":1,"time":1929123795214918}, +{"type":"arraySet","array":{"class":"[Ljava.lang.Object;","id":1127555950},"index":0,"value":{"class":"arraySample.B","id":1558398402},"threadId":1,"time":1929123795627832}, +{"type":"methodExit","shortSignature":"arraySample.A.init()","receiver":{"class":"arraySample.A","id":1437150522},"returnValue":{"class":"void","id":0},"threadId":1,"time":1929123796710366}, +{"type":"methodCall","callerSideSignature":"arraySample.A.start()","threadId":1,"lineNum":12}, +{"type":"methodEntry","signature":"public void arraySample.A.start()","receiver":{"class":"arraySample.A","id":1437150522},"args":[],"threadId":1,"time":1929123796730113}, +{"type":"blockEntry","methodSignature":"arraySample.A.start()","blockId":0,"incomings":0,"threadId":1,"lineNum":13,"time":1929123796738576}, +{"type":"fieldGet","fieldName":"arraySample.A.d","this":{"class":"arraySample.A","id":1437150522},"container":{"class":"arraySample.A","id":1437150522},"value":{"class":"arraySample.D","id":542899160},"threadId":1,"lineNum":13,"time":1929123796753033}, +{"type":"fieldGet","fieldName":"arraySample.A.array","this":{"class":"arraySample.A","id":1437150522},"container":{"class":"arraySample.A","id":1437150522},"value":{"class":"[Ljava.lang.Object;","id":1127555950},"threadId":1,"lineNum":13,"time":1929123796767137}, +{"type":"arrayGet","array":{"class":"[Ljava.lang.Object;","id":1127555950},"index":0,"value":{"class":"arraySample.B","id":1558398402},"threadId":1,"time":1929123796774895}, +{"type":"methodCall","callerSideSignature":"arraySample.B.getC()","threadId":1,"lineNum":13}, +{"type":"methodEntry","signature":"public arraySample.C arraySample.B.getC()","receiver":{"class":"arraySample.B","id":1558398402},"args":[],"threadId":1,"time":1929123796829903}, +{"type":"blockEntry","methodSignature":"arraySample.B.getC()","blockId":0,"incomings":0,"threadId":1,"lineNum":8,"time":1929123796838719}, +{"type":"fieldGet","fieldName":"arraySample.B.c","this":{"class":"arraySample.B","id":1558398402},"container":{"class":"arraySample.B","id":1558398402},"value":{"class":"arraySample.C","id":1777161954},"threadId":1,"lineNum":8,"time":1929123796853881}, +{"type":"methodExit","shortSignature":"arraySample.B.getC()","receiver":{"class":"arraySample.B","id":1558398402},"returnValue":{"class":"arraySample.C","id":1777161954},"threadId":1,"time":1929123796866223}, +{"type":"methodCall","callerSideSignature":"arraySample.D.setC(arraySample.C)","threadId":1,"lineNum":13}, +{"type":"methodEntry","signature":"void arraySample.D.setC(arraySample.C)","receiver":{"class":"arraySample.D","id":542899160},"args":[{"class":"arraySample.C","id":1777161954}],"threadId":1,"time":1929123796887027}, +{"type":"blockEntry","methodSignature":"arraySample.D.setC(arraySample.C)","blockId":0,"incomings":0,"threadId":1,"lineNum":7,"time":1929123796895843}, +{"type":"fieldSet","fieldName":"arraySample.D.c","container":{"class":"arraySample.D","id":542899160},"value":{"class":"arraySample.C","id":1777161954},"threadId":1,"lineNum":7,"time":1929123796910300}, +{"type":"methodExit","shortSignature":"arraySample.D.setC(arraySample.C)","receiver":{"class":"arraySample.D","id":542899160},"returnValue":{"class":"void","id":0},"threadId":1,"time":1929123796920878}, +{"type":"methodExit","shortSignature":"arraySample.A.start()","receiver":{"class":"arraySample.A","id":1437150522},"returnValue":{"class":"void","id":0},"threadId":1,"time":1929123796932162}, +{"type":"methodExit","shortSignature":"arraySample.Main.main(java.lang.String[])","receiver":{"class":"arraySample.Main","id":0},"returnValue":{"class":"void","id":0},"threadId":1,"time":1929123796940978},