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