diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java index 503b2a7..89ce1f9 100644 --- a/src/org/ntlab/traceDebugger/DebuggingController.java +++ b/src/org/ntlab/traceDebugger/DebuggingController.java @@ -144,6 +144,7 @@ boolean isReturned; while (!(isReturned = !(debuggingTp.stepOver()))) { if (currentLineNo != debuggingTp.getStatement().getLineNo()) break; + previousTp = debuggingTp.duplicate(); } if (debuggingTp.getStatement() instanceof BlockEnter) { debuggingTp.stepFull(); diff --git a/src/org/ntlab/traceDebugger/JavaEditorOperator.java b/src/org/ntlab/traceDebugger/JavaEditorOperator.java index 5a2802c..f6ec6ef 100644 --- a/src/org/ntlab/traceDebugger/JavaEditorOperator.java +++ b/src/org/ntlab/traceDebugger/JavaEditorOperator.java @@ -246,6 +246,22 @@ return false; } + public static String resolveType(IType type, String typeName) { + try { + String[][] resolveTypes = type.resolveType(typeName); + if (resolveTypes != null) { + if (resolveTypes[0][0].isEmpty()) { + return (resolveTypes[0][1]); // �f�t�H���g�p�b�P�[�W�̏ꍇ�̓p�b�P�[�W����.�͓���Ȃ� + } else { + return (resolveTypes[0][0] + "." + resolveTypes[0][1]); // ���S����N���X�� + } + } + } catch (JavaModelException e) { + e.printStackTrace(); + } + return null; + } + /** * IMethod����擾�ł���S�����̃V�O�l�`�������S����N���X���ɒu�������Ċi�[�������X�g��Ԃ� * @@ -266,16 +282,45 @@ readableTypeSplit[0] = readableType.substring(0, firstBracketIndex); // �^�� readableTypeSplit[1] = readableType.substring(firstBracketIndex); // �^���̌���[]�S�� } - String[][] resolveType = type.resolveType(readableTypeSplit[0]); // �p�b�P�[�W���ƃN���X���̑g�ݍ��킹���擾 - if (resolveType != null) { - if (resolveType[0][0].isEmpty()) { - readableTypeSplit[0] = (resolveType[0][1]); // �f�t�H���g�p�b�P�[�W�̏ꍇ�̓p�b�P�[�W����.�͓���Ȃ� - } else { - readableTypeSplit[0] = (resolveType[0][0] + "." + resolveType[0][1]); // ���S����N���X�� - } - } + String tmp = resolveType(type, readableTypeSplit[0]); + if (tmp != null) { + readableTypeSplit[0] = tmp; + } parameters.add(readableTypeSplit[0] + readableTypeSplit[1]); } return parameters; } + +// /** +// * IMethod����擾�ł���S�����̃V�O�l�`�������S����N���X���ɒu�������Ċi�[�������X�g��Ԃ� +// * +// * @param type +// * @param method +// * @return +// */ +// private static List parseFQCNParameters(IType type, IMethod method) throws JavaModelException { +// List parameters = new ArrayList<>(); +// for (String parameterType : method.getParameterTypes()) { +// String readableType = Signature.toString(parameterType); // �V�O�l�`���̕�������^���̕�����ɕϊ� (�z��͌���[]���‚�) +// String[] readableTypeSplit = { "", "" }; // �^����[]�̕����p +// int firstBracketIndex = readableType.indexOf("[]"); +// final int NO_BRACKET_INDEX = -1; +// if (firstBracketIndex == NO_BRACKET_INDEX) { +// readableTypeSplit[0] = readableType; // �^�� +// } else { +// readableTypeSplit[0] = readableType.substring(0, firstBracketIndex); // �^�� +// readableTypeSplit[1] = readableType.substring(firstBracketIndex); // �^���̌���[]�S�� +// } +// String[][] resolveType = type.resolveType(readableTypeSplit[0]); // �p�b�P�[�W���ƃN���X���̑g�ݍ��킹���擾 +// if (resolveType != null) { +// if (resolveType[0][0].isEmpty()) { +// readableTypeSplit[0] = (resolveType[0][1]); // �f�t�H���g�p�b�P�[�W�̏ꍇ�̓p�b�P�[�W����.�͓���Ȃ� +// } else { +// readableTypeSplit[0] = (resolveType[0][0] + "." + resolveType[0][1]); // ���S����N���X�� +// } +// } +// parameters.add(readableTypeSplit[0] + readableTypeSplit[1]); +// } +// return parameters; +// } } diff --git a/src/org/ntlab/traceDebugger/Variable.java b/src/org/ntlab/traceDebugger/Variable.java index f927176..4bd9e15 100644 --- a/src/org/ntlab/traceDebugger/Variable.java +++ b/src/org/ntlab/traceDebugger/Variable.java @@ -168,16 +168,30 @@ } alreadyCreatedChildHierarchy = true; } - + private void getFieldsState() { // �t�B�[���h��ID��Type���擾���ĕ\�� - TraceJSON trace = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); - String declaringClassName = className; - IType type = JavaEditorOperator.findIType(null, declaringClassName); - if (type == null) { - System.out.println("IType == null: " + declaringClassName); - return; - } + IType type = JavaEditorOperator.findIType(null, className); + if (type == null) return; + getFieldsState(type); + + // �e�N���X��k���Ă����A�����̃N���X�Œ�`���ꂽ�t�B�[���h�̏����擾���Ă��� (�������������������Ĕ��ɏd���Ȃ�) +// try { +// while (true) { +// String superClassName = type.getSuperclassName(); +// if (superClassName == null) break; +// String fullyQualifiedSuperClassName = JavaEditorOperator.resolveType(type, superClassName); +// if (fullyQualifiedSuperClassName == null) break; +// type = JavaEditorOperator.findIType(null, fullyQualifiedSuperClassName); +// if (type == null) break; +// getFieldsState(type); +// } +// } catch (JavaModelException e) { +// e.printStackTrace(); +// } + } + + private void getFieldsState(IType type) { try { for (IField field : type.getFields()) { if (Flags.isStatic(field.getFlags())) continue; @@ -185,6 +199,7 @@ String fullyQualifiedFieldName = field.getDeclaringType().getFullyQualifiedName() + "." + field.getElementName(); // ���S����N���X�� // ���̃t�B�[���h�ɂ‚��Ă̍ŐV�̍X�V�����擾(FieldUpdate) + TraceJSON trace = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); // FieldUpdate fieldUpdate = trace.getRecentlyFieldUpdate(thisObjData.getId(), fieldName, tp); // FieldUpdate fieldUpdate = trace.getFieldUpdate(id, fullyQualifiedFieldName, before, isReturned); TracePoint updateTracePoint = trace.getFieldUpdateTracePoint(id, fullyQualifiedFieldName, before, isReturned); @@ -203,9 +218,46 @@ } } catch (JavaModelException e) { e.printStackTrace(); - } + } } +// private void getFieldsState() { +// // �t�B�[���h��ID��Type���擾���ĕ\�� +// TraceJSON trace = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); +// String declaringClassName = className; +// IType type = JavaEditorOperator.findIType(null, declaringClassName); +// if (type == null) { +// System.out.println("IType == null: " + declaringClassName); +// return; +// } +// try { +// for (IField field : type.getFields()) { +// if (Flags.isStatic(field.getFlags())) continue; +// String fieldName = field.getDeclaringType().getElementName() + "." + field.getElementName(); // ���S����N���X�� +// String fullyQualifiedFieldName = field.getDeclaringType().getFullyQualifiedName() + "." + field.getElementName(); // ���S����N���X�� +// +// // ���̃t�B�[���h�ɂ‚��Ă̍ŐV�̍X�V�����擾(FieldUpdate) +//// FieldUpdate fieldUpdate = trace.getRecentlyFieldUpdate(thisObjData.getId(), fieldName, tp); +//// FieldUpdate fieldUpdate = trace.getFieldUpdate(id, fullyQualifiedFieldName, before, isReturned); +// TracePoint updateTracePoint = trace.getFieldUpdateTracePoint(id, fullyQualifiedFieldName, before, isReturned); +//// if (updateTracePoint == null) continue; +// if (updateTracePoint != null) { +// FieldUpdate fieldUpdate = (FieldUpdate)updateTracePoint.getStatement(); +// // �t�B�[���h��ID��Type���擾(String) +// String fieldObjId = (fieldUpdate != null) ? fieldUpdate.getValueObjId() : "0"; +// String fieldType = (fieldUpdate != null) ? fieldUpdate.getValueClassName() : "---"; +// Variable fieldData = new Variable(fieldName, className, id, fieldType, fieldObjId, updateTracePoint, before, isReturned); +// this.addChild(fieldData); +// } else { +// Variable fieldData = new Variable(fieldName, className, id, "?", "???", updateTracePoint, before, isReturned); +// this.addChild(fieldData); +// } +// } +// } catch (JavaModelException e) { +// e.printStackTrace(); +// } +// } + private void getArrayState() { TraceJSON trace = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); for (int i = 0;; i++){