Skip to content

Instantly share code, notes, and snippets.

@lptr
Created December 1, 2022 15:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lptr/6dd6b890b760306fa5d9070a014d0ece to your computer and use it in GitHub Desktop.
Save lptr/6dd6b890b760306fa5d9070a014d0ece to your computer and use it in GitHub Desktop.
diff --git a/subprojects/model-core/src/main/java/org/gradle/internal/properties/annotations/TypeMetadataWalker.java b/subprojects/model-core/src/main/java/org/gradle/internal/properties/annotations/TypeMetadataWalker.java
index d902fa578f0..48b4ef6b5ff 100644
--- a/subprojects/model-core/src/main/java/org/gradle/internal/properties/annotations/TypeMetadataWalker.java
+++ b/subprojects/model-core/src/main/java/org/gradle/internal/properties/annotations/TypeMetadataWalker.java
@@ -22,24 +22,29 @@
import java.lang.annotation.Annotation;
import java.util.function.Supplier;
-public interface TypeMetadataWalker<T> {
- static TypeMetadataWalker<Object> instanceWalker(TypeMetadataStore typeMetadataStore, Class<? extends Annotation> nestedAnnotation) {
+public interface TypeMetadataWalker<T, V extends TypeMetadataWalker.NodeMetadataVisitor<T>> {
+ static InstanceMetadataWalker instanceWalker(TypeMetadataStore typeMetadataStore, Class<? extends Annotation> nestedAnnotation) {
return new AbstractTypeMetadataWalker.InstanceTypeMetadataWalker(typeMetadataStore, nestedAnnotation);
}
- static TypeMetadataWalker<TypeToken<?>> typeWalker(TypeMetadataStore typeMetadataStore, Class<? extends Annotation> nestedAnnotation) {
+ static StaticMetadataWalker typeWalker(TypeMetadataStore typeMetadataStore, Class<? extends Annotation> nestedAnnotation) {
return new AbstractTypeMetadataWalker.StaticTypeMetadataWalker(typeMetadataStore, nestedAnnotation);
}
- void walk(T root, NodeMetadataVisitor<T> visitor);
+ void walk(T root, V visitor);
+ interface StaticMetadataWalker extends TypeMetadataWalker<TypeToken<?>, StaticMetadataVisitor> {}
+ interface InstanceMetadataWalker extends TypeMetadataWalker<Object, InstanceMetadataVisitor> {}
interface NodeMetadataVisitor<T> {
void visitRoot(TypeMetadata typeMetadata, T value);
void visitNested(TypeMetadata typeMetadata, String qualifiedName, PropertyMetadata propertyMetadata, T value);
void visitLeaf(String qualifiedName, PropertyMetadata propertyMetadata, Supplier<T> value);
- default void visitUnpackNestedError(String qualifiedName, Exception e) {
- throw UncheckedException.throwAsUncheckedException(e);
- }
+ }
+
+ interface StaticMetadataVisitor extends NodeMetadataVisitor<TypeToken<?>> {}
+ interface InstanceMetadataVisitor extends NodeMetadataVisitor<Object> {
+ void visitMissingNested(String qualifiedName, Exception e);
+ void visitUnpackNestedError(String qualifiedName, Exception e);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment