This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-tracer.git

commit 1ac117b0cc7453373e0d14fe5294a4b2e0886b34
Author: Chetan Mehrotra <[email protected]>
AuthorDate: Thu Feb 11 04:05:55 2016 +0000

    SLING-5507 - Collect more details around query execution
    
    Simplify the logic for determining the caller
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1729759 
13f79535-47bb-0310-9956-ffa450edef68
---
 .../apache/sling/tracer/internal/CallerFinder.java | 29 +++++++++-------------
 .../sling/tracer/internal/CallerFinderTest.java    | 18 ++++++++++++++
 2 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/apache/sling/tracer/internal/CallerFinder.java 
b/src/main/java/org/apache/sling/tracer/internal/CallerFinder.java
index f08e8e7..5c688c7 100644
--- a/src/main/java/org/apache/sling/tracer/internal/CallerFinder.java
+++ b/src/main/java/org/apache/sling/tracer/internal/CallerFinder.java
@@ -19,15 +19,8 @@
 
 package org.apache.sling.tracer.internal;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
 import javax.annotation.CheckForNull;
 
-import com.google.common.collect.Iterators;
-import com.google.common.collect.PeekingIterator;
-
 /**
  * Utility to find out the real caller by excluding stack elements belonging to
  * API classes. Say for a query it would exclude the call stack which is part 
of Oak
@@ -36,6 +29,11 @@ import com.google.common.collect.PeekingIterator;
 class CallerFinder {
     private final String[] apiPkgs;
 
+    /**
+     * Array of package names which form the API
+     * @param apiPkgs package names in the order they can appear in caller 
stack. For e.g.
+     *                Sling API package would always come before Oak api 
package for query evaluation
+     */
     public CallerFinder(String[] apiPkgs) {
         this.apiPkgs = apiPkgs;
     }
@@ -46,17 +44,13 @@ class CallerFinder {
             return null;
         }
 
-        //Reverse the stack trace so as to start from bottom
-        List<StackTraceElement> stackList = Arrays.asList(stack);
-        Collections.reverse(stackList);
-        PeekingIterator<StackTraceElement> pit = 
Iterators.peekingIterator(stackList.iterator());
-        while (pit.hasNext()) {
-            StackTraceElement current = pit.next();
+        for (int i = stack.length - 1; i >= 0; i--) {
+            StackTraceElement current = stack[i];
+            if (i > 0) {
+                StackTraceElement next = stack[i - 1];
 
-            //now scan each element and check if the *next* stack element 
belongs to any
-            //api package. If yes then current stack would be the caller
-            if (pit.hasNext()) {
-                StackTraceElement next = pit.peek();
+                //now scan each element and check if the *next* stack element 
belongs to any
+                //api package. If yes then current stack would be the caller
                 for (String pkg : apiPkgs) {
                     if (next.getClassName().startsWith(pkg)) {
                         return current;
@@ -64,6 +58,7 @@ class CallerFinder {
                 }
             }
         }
+
         return null;
     }
 }
diff --git 
a/src/test/java/org/apache/sling/tracer/internal/CallerFinderTest.java 
b/src/test/java/org/apache/sling/tracer/internal/CallerFinderTest.java
index 51d4ba2..29906ef 100644
--- a/src/test/java/org/apache/sling/tracer/internal/CallerFinderTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/CallerFinderTest.java
@@ -86,6 +86,24 @@ public class CallerFinderTest {
         assertNull(cf.determineCaller(null));
     }
 
+    @Test
+    public void nullCaller() throws Exception{
+        CallerFinder cf = new CallerFinder(new String[] {"o.a1.s", 
"o.a1.j.o"});
+        StackTraceElement[] stack = createStack(
+                "o.a.j.o.a",
+                "o.a.j.o.b",
+                "o.a.s.a",
+                "o.a.s.b",
+                "c.a.g.w",
+                "o.e.j",
+                "o.e.j",
+                "o.e.j"
+        );
+
+        StackTraceElement caller = cf.determineCaller(stack);
+        assertNull(caller);
+    }
+
     private static StackTraceElement[] createStack(String ... stack){
         StackTraceElement[] result = new StackTraceElement[stack.length];
         for (int i = 0; i < stack.length; i++) {

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to