Stack Trace Cut
This commit is contained in:
parent
d4d95b5642
commit
3a894cb8a4
@ -0,0 +1,26 @@
|
|||||||
|
package com.massivecraft.massivecore.predicate;
|
||||||
|
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class PredicateElementGarbage extends PredicateElementRegexes
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static PredicateElementGarbage i = new PredicateElementGarbage();
|
||||||
|
public static PredicateElementGarbage get() { return i; }
|
||||||
|
public PredicateElementGarbage()
|
||||||
|
{
|
||||||
|
super(
|
||||||
|
"^" + Pattern.quote("com.massivecraft.massivelag.inject") + ".*$", // MassiveLag - Injected stuff for commands, tasks and events.
|
||||||
|
|
||||||
|
"^" + Pattern.quote("com.massivecraft.massivecore.command.MassiveCoreBukkitCommand.execute") + ".*$", // MassiveCommand - Execution Garbage
|
||||||
|
"^" + Pattern.quote("com.massivecraft.massivecore.command.MassiveCommand.execute") + ".*$", // MassiveCommand - Execution Garbage
|
||||||
|
|
||||||
|
"^" + Pattern.quote("sun.reflect") + ".*$", // Event Reflection
|
||||||
|
"^" + Pattern.quote("java.lang.reflect") + ".*$" // Event Reflection
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
package com.massivecraft.massivecore.predicate;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.collections.MassiveList;
|
||||||
|
|
||||||
|
public class PredicateElementRegexes implements Predicate<StackTraceElement>
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// FIELDS
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private List<Pattern> patterns = Collections.emptyList();
|
||||||
|
public List<Pattern> getPatterns() { return this.patterns; }
|
||||||
|
public void setPatterns(Collection<Pattern> patterns) { this.patterns = new MassiveList<>(patterns); }
|
||||||
|
public void setPatterns(Iterable<String> regexes) { this.setPatterns(asPatterns(regexes));}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public PredicateElementRegexes(String... regexes)
|
||||||
|
{
|
||||||
|
this.setPatterns(Arrays.asList(regexes));
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// OVERRIDE
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply(StackTraceElement element)
|
||||||
|
{
|
||||||
|
if (element == null) return false;
|
||||||
|
String string = element.toString();
|
||||||
|
for (Pattern pattern : this.getPatterns())
|
||||||
|
{
|
||||||
|
if (pattern.matcher(string).matches()) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// UTIL
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
protected List<Pattern> asPatterns(Iterable<String> regexes)
|
||||||
|
{
|
||||||
|
// Create
|
||||||
|
List<Pattern> ret = new MassiveList<>();
|
||||||
|
|
||||||
|
// Fill
|
||||||
|
for (String regex : regexes)
|
||||||
|
{
|
||||||
|
Pattern pattern = Pattern.compile(regex);
|
||||||
|
ret.add(pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package com.massivecraft.massivecore.predicate;
|
||||||
|
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class PredicateElementSignificant extends PredicateElementRegexes
|
||||||
|
{
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// INSTANCE & CONSTRUCT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
private static PredicateElementSignificant i = new PredicateElementSignificant();
|
||||||
|
public static PredicateElementSignificant get() { return i; }
|
||||||
|
public PredicateElementSignificant()
|
||||||
|
{
|
||||||
|
super(
|
||||||
|
// Command
|
||||||
|
"^" + Pattern.quote("org.bukkit.craftbukkit.") + ".*" +Pattern.quote(".CraftServer.dispatchCommand") + ".*$", // CraftBukkit
|
||||||
|
|
||||||
|
// Task
|
||||||
|
"^" + Pattern.quote("org.bukkit.craftbukkit.") + ".*" +Pattern.quote(".scheduler.CraftTask.run") + ".*$", // CraftBukkit
|
||||||
|
|
||||||
|
// Event
|
||||||
|
"^" + Pattern.quote("org.bukkit.plugin.RegisteredListener.callEvent") + ".*$", // Bukkit
|
||||||
|
"^" + Pattern.quote("us.Myles.PWP.TransparentListeners") + ".*$", // PerWorldPlugins <= 1.2.4
|
||||||
|
"^" + Pattern.quote("me.incomprehendable.dev.pwp.transparentlisteners") + ".*$" // PerWorldPlugins >= 1.2.5
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -68,6 +68,8 @@ import com.massivecraft.massivecore.engine.EngineMassiveCoreWorldNameSet;
|
|||||||
import com.massivecraft.massivecore.mixin.MixinMessage;
|
import com.massivecraft.massivecore.mixin.MixinMessage;
|
||||||
import com.massivecraft.massivecore.nms.NmsEntityGet;
|
import com.massivecraft.massivecore.nms.NmsEntityGet;
|
||||||
import com.massivecraft.massivecore.predicate.Predicate;
|
import com.massivecraft.massivecore.predicate.Predicate;
|
||||||
|
import com.massivecraft.massivecore.predicate.PredicateElementGarbage;
|
||||||
|
import com.massivecraft.massivecore.predicate.PredicateElementSignificant;
|
||||||
import com.massivecraft.massivecore.util.extractor.Extractor;
|
import com.massivecraft.massivecore.util.extractor.Extractor;
|
||||||
import com.massivecraft.massivecore.util.extractor.ExtractorPlayer;
|
import com.massivecraft.massivecore.util.extractor.ExtractorPlayer;
|
||||||
import com.massivecraft.massivecore.util.extractor.ExtractorPlayerName;
|
import com.massivecraft.massivecore.util.extractor.ExtractorPlayerName;
|
||||||
@ -344,7 +346,7 @@ public class MUtil
|
|||||||
|
|
||||||
StackTraceElement[] elements = thread.getStackTrace();
|
StackTraceElement[] elements = thread.getStackTrace();
|
||||||
elements = Arrays.copyOfRange(elements, skip, elements.length);
|
elements = Arrays.copyOfRange(elements, skip, elements.length);
|
||||||
return new ArrayList<StackTraceElement>(Arrays.asList(elements));
|
return new MassiveList<>(Arrays.asList(elements));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<StackTraceElement> getStackTrace(Thread thread)
|
public static List<StackTraceElement> getStackTrace(Thread thread)
|
||||||
@ -380,6 +382,39 @@ public class MUtil
|
|||||||
return getStackTrace(thread, skip);
|
return getStackTrace(thread, skip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// STACK TRACE: CUT
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public static void cutStackTrace(List<StackTraceElement> trace)
|
||||||
|
{
|
||||||
|
// Cut Significant
|
||||||
|
int index = 0;
|
||||||
|
while (index < trace.size())
|
||||||
|
{
|
||||||
|
StackTraceElement element = trace.get(index);
|
||||||
|
if (PredicateElementSignificant.get().apply(element)) break;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
trace.subList(index, trace.size()).clear();
|
||||||
|
|
||||||
|
// Reverse
|
||||||
|
Collections.reverse(trace);
|
||||||
|
|
||||||
|
// Eat Garbage
|
||||||
|
for (Iterator<StackTraceElement> iterator = trace.iterator(); iterator.hasNext();)
|
||||||
|
{
|
||||||
|
StackTraceElement element = iterator.next();
|
||||||
|
if (PredicateElementGarbage.get().apply(element))
|
||||||
|
{
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unreverse
|
||||||
|
Collections.reverse(trace);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// STACK TRACE STRING: MANY
|
// STACK TRACE STRING: MANY
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
Loading…
Reference in New Issue
Block a user