diff --git a/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/storage/impl/SQLStackDataStorage.java b/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/storage/impl/SQLStackDataStorage.java --- a/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/storage/impl/SQLStackDataStorage.java +++ b/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/storage/impl/SQLStackDataStorage.java @@ -1100,7 +1100,10 @@ FunctionCallImpl(Function function, long offset, Map metrics) { super(function, offset); this.metrics = metrics; - SourceFileInfo sourceFileInfo = FunctionNameUtils.getSourceFileInfo(function.getSignature()); + SourceFileInfo sourceFileInfo = null; + try{ + sourceFileInfo = FunctionNameUtils.getSourceFileInfo(function.getSignature()); + }catch(Throwable e){} lineNumber = sourceFileInfo == null ? -1 : sourceFileInfo.getLine(); setLineNumber(lineNumber); diff --git a/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/utils/FunctionNameUtils.java b/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/utils/FunctionNameUtils.java --- a/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/utils/FunctionNameUtils.java +++ b/dlight.core.stack/src/org/netbeans/modules/dlight/core/stack/utils/FunctionNameUtils.java @@ -53,17 +53,29 @@ } public static SourceFileInfo getSourceFileInfo(String functionSignature) { - int indexOf = functionSignature.lastIndexOf("+"); //NOI18N + int indexOf = functionSignature.indexOf("+"); //NOI18N + int functionOffsetIndex = -1; //now we should get source file info (if presented) while (indexOf > 0) { - if (functionSignature.length() > indexOf + 1 - && functionSignature.charAt(indexOf + 1) == '0') { //NOI18N - break; + if (functionSignature.length() > indexOf + 2 + && functionSignature.charAt(indexOf + 1) == '0' && //NOI18N + functionSignature.charAt(indexOf + 2) == 'x') { //NOI18N + functionOffsetIndex = indexOf; } indexOf = functionSignature.indexOf("+", indexOf + 1); //NOI18N } + //find function qualififed name + String functionQualifiedName = getFunctionQName(functionSignature); + int prev = indexOf; + indexOf = functionSignature.indexOf(functionQualifiedName); + if (indexOf >= 0 ){ + indexOf = indexOf + functionQualifiedName.length(); + } + if (indexOf == 0){ + indexOf = prev; + } //here we are: after the function offset there could be : which starts file:line - int indexOfFile = functionSignature.indexOf(":", indexOf); //NOI18N + int indexOfFile = functionSignature.indexOf(":", functionOffsetIndex); //NOI18N if (indexOfFile < 0) { return null; }