Skip to content

Commit

Permalink
support use function pointer in curated template query (finos#2955)
Browse files Browse the repository at this point in the history
  • Loading branch information
yannan-gao authored Jul 23, 2024
1 parent a20778f commit 1bb29aa
Show file tree
Hide file tree
Showing 15 changed files with 698 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public PackageableElementSixthPassBuilder(CompileContext context)
@Override
public PackageableElement visit(org.finos.legend.engine.protocol.pure.v1.model.packageableElement.PackageableElement element)
{
this.context.getExtraProcessorOrThrow(element).processSixthPass(element, this.context);
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ public final void processFifthPass(PackageableElement element, CompileContext co
processElementFifthPass(castElement(element), context);
}

public final void processSixthPass(PackageableElement element, CompileContext context)
{
processElementSixthPass(castElement(element), context);
}

@Override
public final boolean equals(Object other)
{
Expand Down Expand Up @@ -96,6 +101,12 @@ protected void processElementFifthPass(T element, CompileContext context)
// nothing by default
}

protected void processElementSixthPass(T element, CompileContext context)
{
// nothing by default
}


private T castElement(PackageableElement element)
{
return getElementClass().cast(element);
Expand Down Expand Up @@ -258,4 +269,81 @@ protected void processElementFifthPass(T element, CompileContext context)
}
};
}

public static <T extends PackageableElement> Processor<T> newProcessor(Class<T> elementClass,
Collection<? extends Class<? extends PackageableElement>> prerequisiteClasses,
BiFunction<? super T, CompileContext, org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.PackageableElement> firstPass,
BiConsumer<? super T, CompileContext> secondPass,
BiConsumer<? super T, CompileContext> thirdPass,
BiConsumer<? super T, CompileContext> fourthPass,
BiConsumer<? super T, CompileContext> fifthPass,
BiConsumer<? super T, CompileContext> sixthPass)
{
Collection<? extends Class<? extends PackageableElement>> resolvedPrerequisiteClasses = (prerequisiteClasses == null) ? Collections.emptyList() : prerequisiteClasses;
return new Processor<T>()
{
@Override
public Class<T> getElementClass()
{
return elementClass;
}

@Override
public Collection<? extends Class<? extends PackageableElement>> getPrerequisiteClasses()
{
return resolvedPrerequisiteClasses;
}

@Override
protected org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.PackageableElement processElementFirstPass(T element, CompileContext context)
{
return firstPass.apply(element, context);
}

@Override
protected void processElementSecondPass(T element, CompileContext context)
{
if (secondPass != null)
{
secondPass.accept(element, context);
}
}

@Override
protected void processElementThirdPass(T element, CompileContext context)
{
if (thirdPass != null)
{
thirdPass.accept(element, context);
}
}

@Override
protected void processElementFourthPass(T element, CompileContext context)
{
if (fourthPass != null)
{
fourthPass.accept(element, context);
}
}

@Override
protected void processElementFifthPass(T element, CompileContext context)
{
if (fifthPass != null)
{
fifthPass.accept(element, context);
}
}

@Override
protected void processElementSixthPass(T element, CompileContext context)
{
if (sixthPass != null)
{
sixthPass.accept(element, context);
}
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-protocol-pure</artifactId>
</dependency>
<dependency>
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-pure-platform-java</artifactId>
</dependency>
<dependency>
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-xt-data-space-protocol</artifactId>
Expand All @@ -79,6 +83,10 @@
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-language-pure-compiler</artifactId>
</dependency>
<dependency>
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-pure-platform-dsl-store-java</artifactId>
</dependency>
<dependency>
<groupId>org.finos.legend.engine</groupId>
<artifactId>legend-engine-xt-diagram-compiler</artifactId>
Expand Down
Loading

0 comments on commit 1bb29aa

Please sign in to comment.