Compare commits

..

2 Commits

Author SHA1 Message Date
Jesse Brault
8821e39a24 Remove util dir. 2025-06-28 12:39:22 -05:00
Jesse Brault
ac420ce109 Use new extensible with new package name. 2025-06-28 12:38:45 -05:00
11 changed files with 6 additions and 131 deletions

View File

@ -5,6 +5,7 @@
antlr = '4.13.2'
asm = '9.8'
di = '0.1.0'
extensible = '0.1.0'
groovy = '4.0.27'
jakarta-inject = '2.0.1'
jansi = '2.4.2'
@ -22,6 +23,7 @@ antlr = { module = 'org.antlr:antlr4', version.ref = 'antlr' }
antlr-runtime = { module = 'org.antlr:antlr4-runtime', version.ref = 'antlr' }
asm = { module = 'org.ow2.asm:asm', version.ref = 'asm' }
di = { module = 'com.jessebrault.di:di', version.ref = 'di' }
extensible = { module = 'com.jessebrault.extensible:extensible', version.ref = 'extensible' }
groovy = { module = 'org.apache.groovy:groovy', version.ref = 'groovy' }
groovy-console = { module = 'org.apache.groovy:groovy-console', version.ref = 'groovy' }
groovy-templates = { module = 'org.apache.groovy:groovy-templates', version.ref = 'groovy' }

View File

@ -7,8 +7,3 @@ pluginManagement {
rootProject.name = 'groowt'
include 'views', 'view-components', 'web-view-components', 'web-view-components-compiler'
file('util').eachDir {
include it.name
project(":$it.name").projectDir = it
}

View File

@ -1,26 +0,0 @@
plugins {
id 'groowt-conventions'
id 'groowt-publish'
id 'java-library'
}
dependencies {
compileOnlyApi libs.jetbrains.anotations
}
java {
withSourcesJar()
}
jar {
archiveBaseName = 'groowt-util-extensible'
}
publishing {
publications {
create('extensible', MavenPublication) {
artifactId = 'util-extensible'
from components.java
}
}
}

View File

@ -1,68 +0,0 @@
package groowt.util.extensible;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public abstract class AbstractExtensionContainer<E, F> implements ExtensionContainer<E, F> {
private final F extensionFactory;
private final Collection<E> extensions = new ArrayList<>();
public AbstractExtensionContainer(F extensionFactory) {
this.extensionFactory = extensionFactory;
}
/**
* @return A <strong>copy</strong> of the registered extensions.
*/
protected Collection<E> getRegisteredExtensions() {
return new ArrayList<>(this.extensions);
}
protected void registerExtension(E extension) {
this.extensions.add(extension);
}
@Override
public <T extends E> @Nullable T findExtension(Class<T> extensionClass) {
return this.extensions.stream()
.filter(extensionClass::isInstance)
.findFirst()
.map(extensionClass::cast)
.orElse(null);
}
/**
* @implNote While this {@link AbstractExtensionContainer} calls
* {@link #getExtension}, which will throw if there is no registered
* extension, this method may be overridden to not use {@link #getExtension}
* and instead implement custom handling logic to avoid throwing, etc.
*/
@Override
public <T extends E> void configureExtension(Class<T> extensionClass, Consumer<? super T> configure) {
configure.accept(this.getExtension(extensionClass));
}
@Override
public <T extends E> T getExtension(Class<T> extensionClass) {
return this.extensions.stream()
.filter(extensionClass::isInstance)
.findFirst()
.map(extensionClass::cast)
.orElseThrow(() -> new IllegalArgumentException("There is no registered extension for " + extensionClass.getName()));
}
@Override
public boolean hasExtension(Class<? extends E> extensionClass) {
return this.extensions.stream().anyMatch(extensionClass::isInstance);
}
@Override
public F getExtensionFactory() {
return this.extensionFactory;
}
}

View File

@ -1,11 +0,0 @@
package groowt.util.extensible;
import org.jetbrains.annotations.Nullable;
import java.util.function.Consumer;
// TODO: groovy methods to handle getting extensions via property accessors
public interface Extensible<E, F, C extends ExtensionContainer<E, F>> extends ExtensionAware<E> {
<T extends E> T createExtension(Class<T> extensionClass, Object... constructorArgs);
C getExtensionContainer();
}

View File

@ -1,12 +0,0 @@
package groowt.util.extensible;
import org.jetbrains.annotations.Nullable;
import java.util.function.Consumer;
public interface ExtensionAware<E> {
@Nullable <T extends E> T findExtension(Class<T> extensionClass);
<T extends E> void configureExtension(Class<T> extensionClass, Consumer<? super T> configure);
<T extends E> T getExtension(Class<T> extensionClass);
boolean hasExtension(Class<? extends E> extensionClass);
}

View File

@ -1,5 +0,0 @@
package groowt.util.extensible;
public interface ExtensionContainer<E, F> extends ExtensionAware<E> {
F getExtensionFactory();
}

View File

@ -63,7 +63,7 @@ dependencies {
implementation libs.jansi
implementation libs.asm
implementation libs.di
implementation project(':extensible')
implementation libs.extensible
groowtAntlr libs.antlr

View File

@ -1,6 +1,6 @@
package groowt.view.component.web.ast.extension;
import groowt.util.extensible.ExtensionContainer;
import com.jessebrault.extensible.ExtensionContainer;
import groowt.view.component.web.ast.node.Node;
public interface NodeExtensionContainer extends ExtensionContainer<NodeExtension, NodeExtensionFactory> {

View File

@ -1,6 +1,6 @@
package groowt.view.component.web.ast.extension;
import groowt.util.extensible.AbstractExtensionContainer;
import com.jessebrault.extensible.AbstractExtensionContainer;
import groowt.view.component.web.ast.node.Node;
public class SimpleNodeExtensionContainer extends AbstractExtensionContainer<NodeExtension, NodeExtensionFactory>

View File

@ -1,6 +1,6 @@
package groowt.view.component.web.ast.node;
import groowt.util.extensible.Extensible;
import com.jessebrault.extensible.Extensible;
import groowt.view.component.web.antlr.TokenList;
import groowt.view.component.web.ast.extension.NodeExtension;
import groowt.view.component.web.ast.extension.NodeExtensionContainer;