package org.gridkit.jvmtool.stacktrace.analytics; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class ClassificatorAST { public Root newRoot() { return new Root(); } public static Filter disjunction(Collection<Filter> filters) { if (filters.isEmpty()) { return new FalseFilter(); } else if (filters.size() == 1) { return filters.iterator().next(); } else { return new AndCombinatorFilter(filters); } } public static Filter conjunction(Collection<Filter> filters) { if (filters.isEmpty()) { return new FalseFilter(); } else if (filters.size() == 1) { return filters.iterator().next(); } else { return new OrCombinatorFilter(filters); } } public static class Root { public Map<String, Classification> classifications = new LinkedHashMap<String, Classification>(); } public static class Classification { public String name; public Map<String, Filter> subclasses = new LinkedHashMap<String, Filter>(); public Filter rootFilter; } public static interface Filter { } public static interface FrameMatcher { } public static class AnyOfFrameMatcher implements FrameMatcher { public List<FrameMatcher> submatchers = new ArrayList<FrameMatcher>(); public AnyOfFrameMatcher() { } public AnyOfFrameMatcher(List<FrameMatcher> submatchers) { this.submatchers.addAll(submatchers); } } public static class OrCombinatorFilter implements Filter { public List<Filter> subfilters = new ArrayList<Filter>(); public OrCombinatorFilter() { } public OrCombinatorFilter(Collection<Filter> subfilters) { this.subfilters.addAll(subfilters); } } public static class AndCombinatorFilter implements Filter { public List<Filter> subfilters = new ArrayList<Filter>(); public AndCombinatorFilter() { } public AndCombinatorFilter(Collection<Filter> subfilters) { this.subfilters.addAll(subfilters); } } public static class PatternFilter implements Filter, FrameMatcher { public List<String> patterns = new ArrayList<String>(); } public static class TrueFilter implements Filter, FrameMatcher { } public static class FalseFilter implements Filter, FrameMatcher { } public static class NotFilter { public Filter nested; } public static class LastFollowedFilter implements Filter { public FrameMatcher snippet; public Filter followFilter; } public static class LastNotFollowedFilter implements Filter { public FrameMatcher snippet; public Filter followFilter; } }