1 package jp.sourceforge.ea2ddl.dao.allcommon.helper.stacktrace.impl;
\r
3 import jp.sourceforge.ea2ddl.dao.allcommon.helper.stacktrace.InvokeNameResult;
\r
4 import jp.sourceforge.ea2ddl.dao.allcommon.helper.stacktrace.InvokeNameExtractingResource;
\r
5 import jp.sourceforge.ea2ddl.dao.allcommon.helper.stacktrace.InvokeNameExtractor;
\r
8 * @author DBFlute(AutoGenerator)
\r
10 public class InvokeNameExtractorImpl implements InvokeNameExtractor {
\r
12 // ==========================================================================================
\r
15 protected StackTraceElement[] _stackTrace;
\r
17 // ==========================================================================================
\r
21 * @param resource the call-back resource for invoke-name-extracting. (NotNull)
\r
22 * @return Invoke name. (NotNull: If not found, returns empty string.)
\r
24 public InvokeNameResult extractInvokeName(InvokeNameExtractingResource resource) {
\r
25 if (_stackTrace == null) {
\r
26 String msg = "The attribute 'stackTrace' should not be null: resource=" + resource;
\r
27 throw new IllegalStateException(msg);
\r
29 String targetSimpleClassName = null;
\r
30 String targetMethodName = null;
\r
32 int foundIndex = -1; // The minus one means 'Not Found'.
\r
33 int foundFirstIndex = -1; // The minus one means 'Not Found'.
\r
34 boolean onTarget = false;
\r
35 for (int i=resource.getStartIndex(); i < _stackTrace.length; i++) {
\r
36 final StackTraceElement element = _stackTrace[i];
\r
37 if (i > resource.getStartIndex() + resource.getLoopSize()) {
\r
40 final String className = element.getClassName();
\r
41 if (className.startsWith("sun.") || className.startsWith("java.")) {
\r
47 final String methodName = element.getMethodName();
\r
48 if (resource.isTargetElement(className, methodName)) {
\r
49 if (methodName.equals("invoke")) {
\r
52 targetSimpleClassName = className.substring(className.lastIndexOf(".") + 1);
\r
53 targetMethodName = methodName;
\r
54 if (resource.isUseAdditionalInfo()) {
\r
55 lineNumber = element.getLineNumber();
\r
58 if (foundFirstIndex == -1) {
\r
59 foundFirstIndex = i;
\r
68 final InvokeNameResult result = new InvokeNameResult();
\r
69 if (targetSimpleClassName == null) {
\r
70 result.beEmptyResult(); // Not Found! It sets empty result.
\r
73 final String filteredClassName = resource.filterSimpleClassName(targetSimpleClassName);
\r
74 result.setSimpleClassName(resource.filterSimpleClassName(targetSimpleClassName));
\r
75 result.setMethodName(targetMethodName);
\r
76 if (lineNumber > 0) {
\r
77 result.setInvokeName(filteredClassName + "." + targetMethodName + "():" + lineNumber + " --> ");
\r
79 result.setInvokeName(filteredClassName + "." + targetMethodName + "() --> ");
\r
81 result.setFoundIndex(foundIndex);
\r
82 result.setFoundFirstIndex(foundFirstIndex);
\r
86 // ==========================================================================================
\r
89 public void setStackTrace(StackTraceElement[] stackTrace) {
\r
90 _stackTrace = stackTrace;
\r