<commit_before>#Classfinder

Classpath scanner to find / filter specific classes

This library is largely based on https://github.com/bmc/javautil.
I extracted only the ```ClassFinder``` related portion of that library and updated
it to work with asm 4.1 (there's binary incompatibility between asm 3.x and 4.x
so this library didn't work together with projects that use asm 4.x)

#Filters
The following filters are available:

*Aggergate filters* - used to combine different concrete filters together with logical operators (AND, OR, NOT)
* NotClassFilter.java
* AndClassFilter.java
* OrClassFilter.java

*Concrete filters* - used to filter classes either by their modifiers (abstract, interface) or name
* SubclassClassFilter.java - matches classes that are assignable to the base class
* RegexClassFilter.java - matches classes by name
* InterfaceOnlyClassFilter.java - matches classes that implement given interface
* AbstractClassFilter.java - matches only abstract classes

#Examples
* Find all non abstract non interface classes implementing ```SomeInterface.class``` in ```someFolder```

```java
ClassFinder classFinder = new ClassFinder();
classFinder.add(someFolder);

ClassFilter filter = new AndClassFilter(
    new SubclassClassFilter(SomeInterface.class),
    new NotClassFilter(new InterfaceOnlyClassFilter()),
    new NotClassFilter(new AbstractClassFilter()));

Collection<ClassInfo> foundClasses = classFinder.findClasses(filter);
```

#Acknowlegement
This product includes software developed by <NAME><commit_msg>modified readme, use bold not intalic<commit_after>#Classfinder

Classpath scanner to find / filter specific classes

This library is largely based on https://github.com/bmc/javautil.
I extracted only the ```ClassFinder``` related portion of that library and updated
it to work with asm 4.1 (there's binary incompatibility between asm 3.x and 4.x
so this library didn't work together with projects that use asm 4.x)

#Filters
The following filters are available:

**Aggergate filters** - used to combine different concrete filters together with logical operators (AND, OR, NOT)
* NotClassFilter.java
* AndClassFilter.java
* OrClassFilter.java

**Concrete filters** - used to filter classes either by their modifiers (abstract, interface) or name
* SubclassClassFilter.java - matches classes that are assignable to the base class
* RegexClassFilter.java - matches classes by name
* InterfaceOnlyClassFilter.java - matches classes that implement given interface
* AbstractClassFilter.java - matches only abstract classes

#Examples
* Find all non abstract non interface classes implementing ```SomeInterface.class``` in ```someFolder```

```java
ClassFinder classFinder = new ClassFinder();
classFinder.add(someFolder);

ClassFilter filter = new AndClassFilter(
    new SubclassClassFilter(SomeInterface.class),
    new NotClassFilter(new InterfaceOnlyClassFilter()),
    new NotClassFilter(new AbstractClassFilter()));

Collection<ClassInfo> foundClasses = classFinder.findClasses(filter);
```

#Acknowlegement
This product includes software developed by <NAME>
{'fraction_non_alphanumeric': 0.0760025873221216, 'fraction_numerical': 0.003234152652005175, 'mean_word_length': 5.723913043478261, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2906321', 'n_tokens_mistral': 797, 'n_tokens_neox': 786, 'n_words': 322}