public final class SpecificationBuilder
extends java.lang.Object
PBody
instances from Pattern
definitions. A single instance of this
builder is used during construction, that maintains the mapping between Pattern
and PQuery
objects,
and can be initialized with a pre-defined set of mappings.
The SpecificationBuilder is stateful: it stores all previously built specifications, allowing further re-use.
Constructor and Description |
---|
SpecificationBuilder()
Initializes a query builder with no previously known query specifications
|
SpecificationBuilder(java.util.Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> specifications)
Sets up a query builder with a predefined collection of specifications
|
SpecificationBuilder(IQuerySpecification<?>... specifications)
Sets up a query builder with a predefined set of specifications
|
SpecificationBuilder(org.eclipse.viatra.query.patternlanguage.emf.specification.internal.NameToSpecificationMap patternMap) |
Modifier and Type | Method and Description |
---|---|
protected void |
buildAnnotations(Pattern pattern,
InitializablePQuery query) |
java.util.Set<PBody> |
buildBodies(Pattern pattern,
InitializablePQuery query) |
IQuerySpecification<?> |
buildErroneousSpecification(Pattern pattern,
java.util.stream.Stream<org.eclipse.xtext.validation.Issue> issues,
boolean storeInMaps)
Creates an erroneous query specification from a given pattern object with a stream of precalculated issues.
|
IQuerySpecification<?> |
buildErroneousSpecification(Pattern pattern,
java.lang.String errorMessage,
boolean storeInMaps)
Creates an erroneous query specification from a given pattern object with a stream of precalculated issues.
|
protected QueryEvaluationHint |
buildHints(Pattern pattern)
Build a
QueryEvaluationHint based on the pattern modifiers and annotations. |
protected IQuerySpecification<?> |
buildSpecification(Pattern pattern) |
protected IQuerySpecification<?> |
buildSpecification(Pattern pattern,
boolean skipPatternValidation,
java.util.List<IQuerySpecification<?>> newSpecifications) |
protected IQuerySpecification<?> |
buildSpecification(Pattern pattern,
java.util.List<IQuerySpecification<?>> newSpecifications) |
void |
forgetSpecification(IQuerySpecification<?> specification)
Forgets a specification in the builder.
|
java.util.Set<IQuerySpecification<?>> |
forgetSpecificationTransitively(IQuerySpecification<?> specification)
Forgets a specification in the builder, and also removes anything that depends on it.
|
void |
forgetURI(org.eclipse.emf.common.util.URI uri)
Removes
IQuerySpecification objects from the cache that originate from a given URI |
java.util.Set<PBody> |
getBodies(Pattern pattern,
PQuery query) |
IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> |
getOrCreateSpecification(Pattern pattern)
Creates a new or returns an existing query specification for the pattern.
|
IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> |
getOrCreateSpecification(Pattern pattern,
boolean skipPatternValidation)
Creates a new or returns an existing query specification for the pattern.
|
IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> |
getOrCreateSpecification(Pattern pattern,
java.util.List<IQuerySpecification<?>> createdPatternList,
boolean skipPatternValidation) |
java.util.Optional<IQuerySpecification<?>> |
getSpecification(Pattern pattern) |
java.util.Optional<IQuerySpecification<?>> |
getSpecification(java.lang.String fqn) |
boolean |
hasSpecification(Pattern pattern)
Returns whether the builder knows a specification with the selected name
|
boolean |
hasSpecification(java.lang.String fqn)
Returns whether the builder knows a specification with the selected name
|
public SpecificationBuilder()
public SpecificationBuilder(IQuerySpecification<?>... specifications)
public SpecificationBuilder(java.util.Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> specifications)
public SpecificationBuilder(org.eclipse.viatra.query.patternlanguage.emf.specification.internal.NameToSpecificationMap patternMap)
public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getOrCreateSpecification(Pattern pattern)
pattern
- ViatraQueryRuntimeException
public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getOrCreateSpecification(Pattern pattern, boolean skipPatternValidation)
pattern
- skipPatternValidation
- if set to true, detailed pattern validation is skipped - true for model inferrer; not recommended for
generic APIViatraQueryRuntimeException
public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getOrCreateSpecification(Pattern pattern, java.util.List<IQuerySpecification<?>> createdPatternList, boolean skipPatternValidation)
protected IQuerySpecification<?> buildSpecification(Pattern pattern)
protected IQuerySpecification<?> buildSpecification(Pattern pattern, java.util.List<IQuerySpecification<?>> newSpecifications)
protected IQuerySpecification<?> buildSpecification(Pattern pattern, boolean skipPatternValidation, java.util.List<IQuerySpecification<?>> newSpecifications)
public IQuerySpecification<?> buildErroneousSpecification(Pattern pattern, java.lang.String errorMessage, boolean storeInMaps)
pattern
- the pattern definition to start fromerrorMessage
- an error message to fill the erroneous specificationstoreInMaps
- if true, all future references for this query, including references by fqn; if a query is already
stored with this name, an IllegalStateException
is thrown.public IQuerySpecification<?> buildErroneousSpecification(Pattern pattern, java.util.stream.Stream<org.eclipse.xtext.validation.Issue> issues, boolean storeInMaps)
pattern
- the pattern definition to start fromissues
- a stream of issues that are to be stored in the created specificationstoreInMaps
- if true, all future references for this query, including references by fqn; if a query is already
stored with this name, an IllegalStateException
is thrown.protected void buildAnnotations(Pattern pattern, InitializablePQuery query)
public java.util.Set<PBody> buildBodies(Pattern pattern, InitializablePQuery query)
ViatraQueryRuntimeException
public java.util.Set<PBody> getBodies(Pattern pattern, PQuery query)
ViatraQueryRuntimeException
public boolean hasSpecification(Pattern pattern)
public boolean hasSpecification(java.lang.String fqn)
public java.util.Optional<IQuerySpecification<?>> getSpecification(Pattern pattern)
public java.util.Optional<IQuerySpecification<?>> getSpecification(java.lang.String fqn)
public void forgetSpecification(IQuerySpecification<?> specification)
Warning! Removing a specification does not change any specification created previously, even if
they are referring to the old version of the specification. Only use this if you are sure all dependant queries
are also removed, otherwise use forgetSpecificationTransitively(IQuerySpecification)
instead.
public void forgetURI(org.eclipse.emf.common.util.URI uri)
IQuerySpecification
objects from the cache that originate from a given URIpublic java.util.Set<IQuerySpecification<?>> forgetSpecificationTransitively(IQuerySpecification<?> specification)
specification
- protected QueryEvaluationHint buildHints(Pattern pattern)
QueryEvaluationHint
based on the pattern modifiers and annotations.