Home | History | Annotate | Download | only in debugging
      1 /*
      2  * Copyright (c) 2007 Mockito contributors
      3  * This program is made available under the terms of the MIT License.
      4  */
      5 package org.mockito.internal.debugging;
      6 
      7 import java.io.Serializable;
      8 import org.mockito.internal.exceptions.stacktrace.StackTraceFilter;
      9 import org.mockito.invocation.Location;
     10 
     11 public class LocationImpl implements Location, Serializable {
     12 
     13     private static final long serialVersionUID = -9054861157390980624L;
     14     //Limit the amount of objects being created, as this class is heavily instantiated:
     15     private static final StackTraceFilter defaultStackTraceFilter = new StackTraceFilter();
     16 
     17     private final Throwable stackTraceHolder;
     18     private final StackTraceFilter stackTraceFilter;
     19 
     20     public LocationImpl() {
     21         this(defaultStackTraceFilter);
     22     }
     23 
     24     public LocationImpl(StackTraceFilter stackTraceFilter) {
     25         this(stackTraceFilter, new Throwable());
     26     }
     27 
     28     public LocationImpl(Throwable stackTraceHolder) {
     29         this(defaultStackTraceFilter, stackTraceHolder);
     30     }
     31 
     32     private LocationImpl(StackTraceFilter stackTraceFilter, Throwable stackTraceHolder) {
     33         this.stackTraceFilter = stackTraceFilter;
     34         this.stackTraceHolder = stackTraceHolder;
     35     }
     36 
     37     @Override
     38     public String toString() {
     39         //TODO SF perhaps store the results after invocation?
     40         StackTraceElement[] filtered = stackTraceFilter.filter(stackTraceHolder.getStackTrace(), false);
     41         if (filtered.length == 0) {
     42             return "-> at <<unknown line>>";
     43         }
     44         return "-> at " + filtered[0].toString();
     45     }
     46 }
     47