diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/FHIRPathEngine.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/FHIRPathEngine.java
index 4a7dc0c14..d493cf8cf 100644
--- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/FHIRPathEngine.java
+++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/FHIRPathEngine.java
@@ -59,6 +59,7 @@ import org.hl7.fhir.r4.utils.FHIRLexer.FHIRLexerException;
import org.hl7.fhir.r4.utils.FHIRPathUtilityClasses.FHIRConstant;
import org.hl7.fhir.r4.utils.FHIRPathUtilityClasses.ClassTypeInfo;
import org.hl7.fhir.r4.utils.FHIRPathUtilityClasses.TypedElementDefinition;
+import org.hl7.fhir.r4.utils.FHIRPathEngine;
import org.hl7.fhir.r4.utils.FHIRPathUtilityClasses.FunctionDetails;
import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
import org.hl7.fhir.utilities.MergedList;
@@ -150,9 +151,9 @@ public class FHIRPathEngine {
* @return the value of the reference (or null, if it's not valid, though can
* throw an exception if desired)
*/
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException;
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException;
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException;
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException;
/**
* when the .log() function is called
@@ -169,7 +170,7 @@ public class FHIRPathEngine {
* @param functionName
* @return null if the function is not known
*/
- public FunctionDetails resolveFunction(String functionName);
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName);
/**
* Check the function parameters, and throw an error if they are incorrect, or
@@ -179,7 +180,7 @@ public class FHIRPathEngine {
* @param parameters
* @return
*/
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException;
/**
@@ -188,7 +189,7 @@ public class FHIRPathEngine {
* @param parameters
* @return
*/
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters);
/**
@@ -200,14 +201,14 @@ public class FHIRPathEngine {
* @return
* @throws FHIRException
*/
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException;
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException;
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException;
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException;
/*
* return the value set referenced by the url, which has been used in memberOf()
*/
- public ValueSet resolveValueSet(Object appContext, String url);
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url);
}
/**
@@ -1032,7 +1033,7 @@ public class FHIRPathEngine {
FunctionDetails details = null;
if (f == null) {
if (hostServices != null) {
- details = hostServices.resolveFunction(result.getName());
+ details = hostServices.resolveFunction(this, result.getName());
}
if (details == null) {
throw lexer.error("The name " + result.getName() + " is not a valid function name");
@@ -1473,7 +1474,7 @@ public class FHIRPathEngine {
work.addAll(work2);
break;
case Constant:
- work.addAll(resolveConstant(context, exp.getConstant(), false, exp));
+ work.addAll(resolveConstant(context, exp.getConstant(), false, exp, true));
break;
case Group:
work2 = execute(context, focus, exp.getGroup(), atEntry);
@@ -1563,7 +1564,7 @@ public class FHIRPathEngine {
} else if (atEntry && exp.getName().equals("$index")) {
result.addType(TypeDetails.FP_Integer);
} else if (atEntry && focus == null) {
- result.update(executeContextType(context, exp.getName(), exp));
+ result.update(executeContextType(context, exp.getName(), exp, false));
} else {
for (String s : focus.getTypes()) {
result.update(executeType(s, exp, atEntry));
@@ -1582,7 +1583,7 @@ public class FHIRPathEngine {
result.addType(TypeDetails.FP_Quantity);
break;
case Constant:
- result.update(resolveConstantType(context, exp.getConstant(), exp));
+ result.update(resolveConstantType(context, exp.getConstant(), exp, true));
break;
case Group:
result.update(executeType(context, focus, exp.getGroup(), atEntry));
@@ -1612,8 +1613,7 @@ public class FHIRPathEngine {
return result;
}
- private List resolveConstant(ExecutionContext context, Base constant, boolean beforeContext,
- ExpressionNode expr) throws PathEngineException {
+ private List resolveConstant(ExecutionContext context, Base constant, boolean beforeContext, ExpressionNode expr, boolean explicitConstant) throws PathEngineException {
if (constant == null) {
return new ArrayList();
}
@@ -1622,7 +1622,7 @@ public class FHIRPathEngine {
}
FHIRConstant c = (FHIRConstant) constant;
if (c.getValue().startsWith("%")) {
- return resolveConstant(context, c.getValue(), beforeContext, expr);
+ return resolveConstant(context, c.getValue(), beforeContext, expr, explicitConstant);
} else if (c.getValue().startsWith("@")) {
return new ArrayList(Arrays.asList(processDateConstant(context.appInfo, c.getValue().substring(1), expr)));
} else {
@@ -1692,7 +1692,7 @@ public class FHIRPathEngine {
}
}
- private List resolveConstant(ExecutionContext context, String s, boolean beforeContext, ExpressionNode expr)
+ private List resolveConstant(ExecutionContext context, String s, boolean beforeContext, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException {
if (s.equals("%sct")) {
return new ArrayList(Arrays.asList(new StringType("http://snomed.info/sct").noExtensions()));
@@ -1726,7 +1726,7 @@ public class FHIRPathEngine {
} else if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_CONSTANT, s);
} else {
- return hostServices.resolveConstant(context.appInfo, s.substring(1), beforeContext);
+ return hostServices.resolveConstant(this, context.appInfo, s.substring(1), beforeContext, explicitConstant);
}
}
@@ -2549,7 +2549,7 @@ public class FHIRPathEngine {
throws FHIRException {
boolean ans = false;
String url = right.get(0).primitiveValue();
- ValueSet vs = hostServices != null ? hostServices.resolveValueSet(context.appInfo, url)
+ ValueSet vs = hostServices != null ? hostServices.resolveValueSet(this, context.appInfo, url)
: worker.fetchResource(ValueSet.class, url);
if (vs != null) {
for (Base l : left) {
@@ -3079,7 +3079,7 @@ public class FHIRPathEngine {
return result;
}
- private TypeDetails resolveConstantType(ExecutionTypeContext context, Base constant, ExpressionNode expr)
+ private TypeDetails resolveConstantType(ExecutionTypeContext context, Base constant, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException {
if (constant instanceof BooleanType) {
return new TypeDetails(CollectionStatus.SINGLETON, TypeDetails.FP_Boolean);
@@ -3090,7 +3090,7 @@ public class FHIRPathEngine {
} else if (constant instanceof Quantity) {
return new TypeDetails(CollectionStatus.SINGLETON, TypeDetails.FP_Quantity);
} else if (constant instanceof FHIRConstant) {
- return resolveConstantType(context, ((FHIRConstant) constant).getValue(), expr);
+ return resolveConstantType(context, ((FHIRConstant) constant).getValue(), expr, explicitConstant);
} else if (constant == null) {
return new TypeDetails(CollectionStatus.SINGLETON);
} else {
@@ -3098,7 +3098,7 @@ public class FHIRPathEngine {
}
}
- private TypeDetails resolveConstantType(ExecutionTypeContext context, String s, ExpressionNode expr)
+ private TypeDetails resolveConstantType(ExecutionTypeContext context, String s, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException {
if (s.startsWith("@")) {
if (s.startsWith("@T")) {
@@ -3137,7 +3137,7 @@ public class FHIRPathEngine {
} else if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_CONSTANT, s);
} else {
- return hostServices.resolveConstantType(context.appInfo, s);
+ return hostServices.resolveConstantType(this, context.appInfo, s, explicitConstant);
}
}
@@ -3146,7 +3146,7 @@ public class FHIRPathEngine {
List result = new ArrayList();
if (atEntry && context.appInfo != null && hostServices != null) {
// we'll see if the name matches a constant known by the context.
- List temp = hostServices.resolveConstant(context.appInfo, exp.getName(), true);
+ List temp = hostServices.resolveConstant(this, context.appInfo, exp.getName(), true, false);
if (!temp.isEmpty()) {
result.addAll(temp);
return result;
@@ -3177,7 +3177,7 @@ public class FHIRPathEngine {
// constant known by the context.
// (if the name does match, and the user wants to get the constant value,
// they'll have to try harder...
- result.addAll(hostServices.resolveConstant(context.appInfo, exp.getName(), false));
+ result.addAll(hostServices.resolveConstant(this, context.appInfo, exp.getName(), false, false));
}
return result;
}
@@ -3186,12 +3186,12 @@ public class FHIRPathEngine {
return null;
}
- private TypeDetails executeContextType(ExecutionTypeContext context, String name, ExpressionNode expr)
+ private TypeDetails executeContextType(ExecutionTypeContext context, String name, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException, DefinitionException {
if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_HO_HOST_SERVICES, "Context Reference");
}
- return hostServices.resolveConstantType(context.appInfo, name);
+ return hostServices.resolveConstantType(this, context.appInfo, name, explicitConstant);
}
private TypeDetails executeType(String type, ExpressionNode exp, boolean atEntry)
@@ -3607,7 +3607,7 @@ public class FHIRPathEngine {
}
case Custom: {
- return hostServices.checkFunction(context.appInfo, exp.getName(), paramTypes);
+ return hostServices.checkFunction(this, context.appInfo, exp.getName(), focus, paramTypes);
}
default:
break;
@@ -3932,7 +3932,7 @@ public class FHIRPathEngine {
for (ExpressionNode p : exp.getParameters()) {
params.add(execute(context, focus, p, true));
}
- return hostServices.executeFunction(context.appInfo, focus, exp.getName(), params);
+ return hostServices.executeFunction(this, context.appInfo, focus, exp.getName(), params);
}
default:
throw new Error("not Implemented yet");
@@ -4605,7 +4605,7 @@ public class FHIRPathEngine {
}
String url = nl.get(0).primitiveValue();
- ValueSet vs = hostServices != null ? hostServices.resolveValueSet(context.appInfo, url)
+ ValueSet vs = hostServices != null ? hostServices.resolveValueSet(this, context.appInfo, url)
: worker.fetchResource(ValueSet.class, url);
if (vs == null) {
return new ArrayList();
@@ -5210,7 +5210,7 @@ public class FHIRPathEngine {
}
} else if (hostServices != null) {
try {
- res = hostServices.resolveReference(context.appInfo, s, refContext);
+ res = hostServices.resolveReference(this, context.appInfo, s, refContext);
} catch (Exception e) {
res = null;
}
@@ -5740,7 +5740,7 @@ public class FHIRPathEngine {
result.add(new BooleanType(false).noExtensions());
} else {
String url = convertToString(execute(context, focus, expr.getParameters().get(0), true));
- result.add(new BooleanType(hostServices.conformsToProfile(context.appInfo, focus.get(0), url)).noExtensions());
+ result.add(new BooleanType(hostServices.conformsToProfile(this, context.appInfo, focus.get(0), url)).noExtensions());
}
return result;
}
diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/LiquidEngine.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/LiquidEngine.java
index eb73998a9..c4c21baf2 100644
--- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/LiquidEngine.java
+++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/LiquidEngine.java
@@ -369,21 +369,21 @@ public class LiquidEngine implements IEvaluationContext {
}
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
if (ctxt.vars.containsKey(name))
return new ArrayList<>(Arrays.asList(ctxt.vars.get(name)));
if (externalHostServices == null)
return null;
- return externalHostServices.resolveConstant(ctxt.externalContext, name, beforeContext);
+ return externalHostServices.resolveConstant(engine, ctxt.externalContext, name, beforeContext, explicitConstant);
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.resolveConstantType(ctxt.externalContext, name);
+ return externalHostServices.resolveConstantType(engine, ctxt.externalContext, name, explicitConstant);
}
@Override
@@ -394,51 +394,51 @@ public class LiquidEngine implements IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
if (externalHostServices == null)
return null;
- return externalHostServices.resolveFunction(functionName);
+ return externalHostServices.resolveFunction(engine, functionName);
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.checkFunction(ctxt.externalContext, functionName, parameters);
+ return externalHostServices.checkFunction(engine, ctxt.externalContext, functionName, focus, parameters);
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.executeFunction(ctxt.externalContext, focus, functionName, parameters);
+ return externalHostServices.executeFunction(engine, ctxt.externalContext, focus, functionName, parameters);
}
@Override
- public Base resolveReference(Object appContext, String url, Base base) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base base) throws FHIRException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return resolveReference(ctxt.externalContext, url, base);
+ return resolveReference(engine, ctxt.externalContext, url, base);
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
if (externalHostServices == null)
return false;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return conformsToProfile(ctxt.externalContext, item, url);
+ return conformsToProfile(engine, ctxt.externalContext, item, url);
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
if (externalHostServices != null)
- return externalHostServices.resolveValueSet(ctxt.externalContext, url);
+ return externalHostServices.resolveValueSet(engine, ctxt.externalContext, url);
else
return engine.getWorker().fetchResource(ValueSet.class, url);
}
diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/StructureMapUtilities.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/StructureMapUtilities.java
index fea611d93..d83edeb05 100644
--- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/StructureMapUtilities.java
+++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/utils/StructureMapUtilities.java
@@ -177,7 +177,7 @@ public class StructureMapUtilities {
private class FHIRPathHostServices implements IEvaluationContext {
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
Variables vars = (Variables) appContext;
Base res = vars.get(VariableMode.INPUT, name);
@@ -190,7 +190,7 @@ public class StructureMapUtilities {
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
if (!(appContext instanceof VariablesForProfiling))
throw new Error(
"Internal Logic Error (wrong type '" + appContext.getClass().getName() + "' in resolveConstantType)");
@@ -207,31 +207,31 @@ public class StructureMapUtilities {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
return null; // throw new Error("Not Implemented Yet");
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
throw new Error("Not Implemented Yet");
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
throw new Error("Not Implemented Yet");
}
@Override
- public Base resolveReference(Object appContext, String url, Base base) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base base) throws FHIRException {
if (services == null)
return null;
return services.resolveReference(appContext, url);
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = worker.newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -245,7 +245,7 @@ public class StructureMapUtilities {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not Implemented Yet");
}
diff --git a/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/FHIRPathTests.java b/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/FHIRPathTests.java
index 51e3105ab..e8bbd622e 100644
--- a/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/FHIRPathTests.java
+++ b/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/FHIRPathTests.java
@@ -58,14 +58,14 @@ public class FHIRPathTests {
public class FHIRPathTestEvaluationServices implements IEvaluationContext {
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveConstant), when item is element");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveConstantType), when item is element");
}
@@ -76,34 +76,34 @@ public class FHIRPathTests {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveFunction), when item is element (for " + functionName
+ ")");
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.checkFunction), when item is element");
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.executeFunction), when item is element");
}
@Override
- public Base resolveReference(Object appContext, String url, Base base) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base base) throws FHIRException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveReference), when item is element");
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
if (url.equals("http://hl7.org/fhir/StructureDefinition/Patient"))
return true;
if (url.equals("http://hl7.org/fhir/StructureDefinition/Person"))
@@ -113,7 +113,7 @@ public class FHIRPathTests {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
return TestingUtilities.context().fetchResource(ValueSet.class, url);
}
@@ -323,7 +323,7 @@ public class FHIRPathTests {
final String DUMMY_CONSTANT_2 = "dummyConstant2";
fp.setHostServices(new FHIRPathTestEvaluationServices() {
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
return Arrays.asList(new StringType(DUMMY_CONSTANT_1).noExtensions(),
diff --git a/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/SnapShotGenerationTests.java b/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/SnapShotGenerationTests.java
index 3077c83e2..f1a504778 100644
--- a/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/SnapShotGenerationTests.java
+++ b/org.hl7.fhir.r4/src/test/java/org/hl7/fhir/r4/test/SnapShotGenerationTests.java
@@ -300,13 +300,13 @@ public class SnapShotGenerationTests {
// FHIRPath methods
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
throw new Error("Not implemented yet");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet");
}
@@ -317,14 +317,14 @@ public class SnapShotGenerationTests {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
if ("fixture".equals(functionName))
return new FunctionDetails("Access a fixture defined in the testing context", 0, 1);
return null;
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
if ("fixture".equals(functionName))
return new TypeDetails(CollectionStatus.SINGLETON, TestingUtilities.context().getResourceNamesAsSet());
@@ -332,7 +332,7 @@ public class SnapShotGenerationTests {
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
if ("fixture".equals(functionName)) {
String id = fp.convertToString(parameters.get(0));
@@ -348,13 +348,13 @@ public class SnapShotGenerationTests {
}
@Override
- public Base resolveReference(Object appContext, String url, Base base) {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base base) {
// TODO Auto-generated method stub
return null;
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = TestingUtilities.context().newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -381,7 +381,7 @@ public class SnapShotGenerationTests {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not implemented yet");
}
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/comparison/ComparisonRenderer.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/comparison/ComparisonRenderer.java
index 4a355f1b6..65d4f3d58 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/comparison/ComparisonRenderer.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/comparison/ComparisonRenderer.java
@@ -14,6 +14,7 @@ import java.util.Set;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.exceptions.PathEngineException;
+import org.hl7.fhir.r4b.utils.FHIRPathEngine;
import org.hl7.fhir.r4b.comparison.CodeSystemComparer.CodeSystemComparison;
import org.hl7.fhir.r4b.comparison.ProfileComparer.ProfileComparison;
import org.hl7.fhir.r4b.comparison.ResourceComparer.PlaceHolderComparison;
@@ -231,7 +232,7 @@ public class ComparisonRenderer implements IEvaluationContext {
}
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
@SuppressWarnings("unchecked")
Map vars = (Map) appContext;
List res = new ArrayList<>();
@@ -242,7 +243,7 @@ public class ComparisonRenderer implements IEvaluationContext {
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
@SuppressWarnings("unchecked")
Map vars = (Map) appContext;
Base b = vars.get(name);
@@ -255,34 +256,34 @@ public class ComparisonRenderer implements IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
return null;
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
return null;
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
return null;
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
return null;
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
return false;
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
return null;
}
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/FHIRPathEngine.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/FHIRPathEngine.java
index ba05b69e6..99cc200f3 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/FHIRPathEngine.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/FHIRPathEngine.java
@@ -152,9 +152,9 @@ public class FHIRPathEngine {
* @return the value of the reference (or null, if it's not valid, though can
* throw an exception if desired)
*/
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException;
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException;
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException;
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException;
/**
* when the .log() function is called
@@ -171,7 +171,7 @@ public class FHIRPathEngine {
* @param functionName
* @return null if the function is not known
*/
- public FunctionDetails resolveFunction(String functionName);
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName);
/**
* Check the function parameters, and throw an error if they are incorrect, or
@@ -181,7 +181,7 @@ public class FHIRPathEngine {
* @param parameters
* @return
*/
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException;
/**
@@ -190,7 +190,7 @@ public class FHIRPathEngine {
* @param parameters
* @return
*/
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters);
/**
@@ -202,14 +202,14 @@ public class FHIRPathEngine {
* @return
* @throws FHIRException
*/
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException;
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException;
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException;
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException;
/*
* return the value set referenced by the url, which has been used in memberOf()
*/
- public ValueSet resolveValueSet(Object appContext, String url);
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url);
}
/**
@@ -1034,7 +1034,7 @@ public class FHIRPathEngine {
FunctionDetails details = null;
if (f == null) {
if (hostServices != null) {
- details = hostServices.resolveFunction(result.getName());
+ details = hostServices.resolveFunction(this, result.getName());
}
if (details == null) {
throw lexer.error("The name " + result.getName() + " is not a valid function name");
@@ -1474,7 +1474,7 @@ public class FHIRPathEngine {
work.addAll(work2);
break;
case Constant:
- work.addAll(resolveConstant(context, exp.getConstant(), false, exp));
+ work.addAll(resolveConstant(context, exp.getConstant(), false, exp, true));
break;
case Group:
work2 = execute(context, focus, exp.getGroup(), atEntry);
@@ -1564,7 +1564,7 @@ public class FHIRPathEngine {
} else if (atEntry && exp.getName().equals("$index")) {
result.addType(TypeDetails.FP_Integer);
} else if (atEntry && focus == null) {
- result.update(executeContextType(context, exp.getName(), exp));
+ result.update(executeContextType(context, exp.getName(), exp, false));
} else {
for (String s : focus.getTypes()) {
result.update(executeType(s, exp, atEntry));
@@ -1583,7 +1583,7 @@ public class FHIRPathEngine {
result.addType(TypeDetails.FP_Quantity);
break;
case Constant:
- result.update(resolveConstantType(context, exp.getConstant(), exp));
+ result.update(resolveConstantType(context, exp.getConstant(), exp, true));
break;
case Group:
result.update(executeType(context, focus, exp.getGroup(), atEntry));
@@ -1614,7 +1614,7 @@ public class FHIRPathEngine {
}
private List resolveConstant(ExecutionContext context, Base constant, boolean beforeContext,
- ExpressionNode expr) throws PathEngineException {
+ ExpressionNode expr, boolean explicitConstant) throws PathEngineException {
if (constant == null) {
return new ArrayList();
}
@@ -1623,7 +1623,7 @@ public class FHIRPathEngine {
}
FHIRConstant c = (FHIRConstant) constant;
if (c.getValue().startsWith("%")) {
- return resolveConstant(context, c.getValue(), beforeContext, expr);
+ return resolveConstant(context, c.getValue(), beforeContext, expr, explicitConstant);
} else if (c.getValue().startsWith("@")) {
return new ArrayList(Arrays.asList(processDateConstant(context.appInfo, c.getValue().substring(1), expr)));
} else {
@@ -1693,7 +1693,7 @@ public class FHIRPathEngine {
}
}
- private List resolveConstant(ExecutionContext context, String s, boolean beforeContext, ExpressionNode expr)
+ private List resolveConstant(ExecutionContext context, String s, boolean beforeContext, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException {
if (s.equals("%sct")) {
return new ArrayList(Arrays.asList(new StringType("http://snomed.info/sct").noExtensions()));
@@ -1727,7 +1727,7 @@ public class FHIRPathEngine {
} else if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_CONSTANT, s);
} else {
- return hostServices.resolveConstant(context.appInfo, s.substring(1), beforeContext);
+ return hostServices.resolveConstant(this, context.appInfo, s.substring(1), beforeContext, explicitConstant);
}
}
@@ -2550,7 +2550,7 @@ public class FHIRPathEngine {
throws FHIRException {
boolean ans = false;
String url = right.get(0).primitiveValue();
- ValueSet vs = hostServices != null ? hostServices.resolveValueSet(context.appInfo, url)
+ ValueSet vs = hostServices != null ? hostServices.resolveValueSet(this, context.appInfo, url)
: worker.fetchResource(ValueSet.class, url);
if (vs != null) {
for (Base l : left) {
@@ -3081,7 +3081,7 @@ public class FHIRPathEngine {
return result;
}
- private TypeDetails resolveConstantType(ExecutionTypeContext context, Base constant, ExpressionNode expr)
+ private TypeDetails resolveConstantType(ExecutionTypeContext context, Base constant, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException {
if (constant instanceof BooleanType) {
return new TypeDetails(CollectionStatus.SINGLETON, TypeDetails.FP_Boolean);
@@ -3092,7 +3092,7 @@ public class FHIRPathEngine {
} else if (constant instanceof Quantity) {
return new TypeDetails(CollectionStatus.SINGLETON, TypeDetails.FP_Quantity);
} else if (constant instanceof FHIRConstant) {
- return resolveConstantType(context, ((FHIRConstant) constant).getValue(), expr);
+ return resolveConstantType(context, ((FHIRConstant) constant).getValue(), expr, explicitConstant);
} else if (constant == null) {
return new TypeDetails(CollectionStatus.SINGLETON);
} else {
@@ -3100,7 +3100,7 @@ public class FHIRPathEngine {
}
}
- private TypeDetails resolveConstantType(ExecutionTypeContext context, String s, ExpressionNode expr)
+ private TypeDetails resolveConstantType(ExecutionTypeContext context, String s, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException {
if (s.startsWith("@")) {
if (s.startsWith("@T")) {
@@ -3139,7 +3139,7 @@ public class FHIRPathEngine {
} else if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_CONSTANT, s);
} else {
- return hostServices.resolveConstantType(context.appInfo, s);
+ return hostServices.resolveConstantType(this, context.appInfo, s, explicitConstant);
}
}
@@ -3148,7 +3148,7 @@ public class FHIRPathEngine {
List result = new ArrayList();
if (atEntry && context.appInfo != null && hostServices != null) {
// we'll see if the name matches a constant known by the context.
- List temp = hostServices.resolveConstant(context.appInfo, exp.getName(), true);
+ List temp = hostServices.resolveConstant(this, context.appInfo, exp.getName(), true, false);
if (!temp.isEmpty()) {
result.addAll(temp);
return result;
@@ -3179,7 +3179,7 @@ public class FHIRPathEngine {
// constant known by the context.
// (if the name does match, and the user wants to get the constant value,
// they'll have to try harder...
- result.addAll(hostServices.resolveConstant(context.appInfo, exp.getName(), false));
+ result.addAll(hostServices.resolveConstant(this, context.appInfo, exp.getName(), false, false));
}
return result;
}
@@ -3188,12 +3188,12 @@ public class FHIRPathEngine {
return null;
}
- private TypeDetails executeContextType(ExecutionTypeContext context, String name, ExpressionNode expr)
+ private TypeDetails executeContextType(ExecutionTypeContext context, String name, ExpressionNode expr, boolean explicitConstant)
throws PathEngineException, DefinitionException {
if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_HO_HOST_SERVICES, "Context Reference");
}
- return hostServices.resolveConstantType(context.appInfo, name);
+ return hostServices.resolveConstantType(this, context.appInfo, name, explicitConstant);
}
private TypeDetails executeType(String type, ExpressionNode exp, boolean atEntry)
@@ -3609,7 +3609,7 @@ public class FHIRPathEngine {
}
case Custom: {
- return hostServices.checkFunction(context.appInfo, exp.getName(), paramTypes);
+ return hostServices.checkFunction(this, context.appInfo, exp.getName(), focus, paramTypes);
}
default:
break;
@@ -3934,7 +3934,7 @@ public class FHIRPathEngine {
for (ExpressionNode p : exp.getParameters()) {
params.add(execute(context, focus, p, true));
}
- return hostServices.executeFunction(context.appInfo, focus, exp.getName(), params);
+ return hostServices.executeFunction(this, context.appInfo, focus, exp.getName(), params);
}
default:
throw new Error("not Implemented yet");
@@ -4607,7 +4607,7 @@ public class FHIRPathEngine {
}
String url = nl.get(0).primitiveValue();
- ValueSet vs = hostServices != null ? hostServices.resolveValueSet(context.appInfo, url)
+ ValueSet vs = hostServices != null ? hostServices.resolveValueSet(this, context.appInfo, url)
: worker.fetchResource(ValueSet.class, url);
if (vs == null) {
return new ArrayList();
@@ -5213,7 +5213,7 @@ public class FHIRPathEngine {
}
} else if (hostServices != null) {
try {
- res = hostServices.resolveReference(context.appInfo, s, refContext);
+ res = hostServices.resolveReference(this, context.appInfo, s, refContext);
} catch (Exception e) {
res = null;
}
@@ -5743,7 +5743,7 @@ public class FHIRPathEngine {
result.add(new BooleanType(false).noExtensions());
} else {
String url = convertToString(execute(context, focus, expr.getParameters().get(0), true));
- result.add(new BooleanType(hostServices.conformsToProfile(context.appInfo, focus.get(0), url)).noExtensions());
+ result.add(new BooleanType(hostServices.conformsToProfile(this, context.appInfo, focus.get(0), url)).noExtensions());
}
return result;
}
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/LiquidEngine.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/LiquidEngine.java
index 5a94f53af..b07fa8c79 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/LiquidEngine.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/LiquidEngine.java
@@ -738,7 +738,7 @@ public class LiquidEngine implements IEvaluationContext {
}
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
if (ctxt.loopVars.containsKey(name))
return new ArrayList(Arrays.asList(ctxt.loopVars.get(name)));
@@ -746,15 +746,15 @@ public class LiquidEngine implements IEvaluationContext {
return new ArrayList(Arrays.asList(ctxt.globalVars.get(name)));
if (externalHostServices == null)
return new ArrayList();
- return externalHostServices.resolveConstant(ctxt.externalContext, name, beforeContext);
+ return externalHostServices.resolveConstant(engine, ctxt.externalContext, name, beforeContext, explicitConstant);
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.resolveConstantType(ctxt.externalContext, name);
+ return externalHostServices.resolveConstantType(engine, ctxt.externalContext, name, explicitConstant);
}
@Override
@@ -765,49 +765,49 @@ public class LiquidEngine implements IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
if (externalHostServices == null)
return null;
- return externalHostServices.resolveFunction(functionName);
+ return externalHostServices.resolveFunction(engine, functionName);
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.checkFunction(ctxt.externalContext, functionName, parameters);
+ return externalHostServices.checkFunction(engine, ctxt.externalContext, functionName, focus, parameters);
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.executeFunction(ctxt.externalContext, focus, functionName, parameters);
+ return externalHostServices.executeFunction(engine, ctxt.externalContext, focus, functionName, parameters);
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return resolveReference(ctxt.externalContext, url, refContext);
+ return resolveReference(engine, ctxt.externalContext, url, refContext);
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
if (externalHostServices == null)
return false;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return conformsToProfile(ctxt.externalContext, item, url);
+ return conformsToProfile(engine, ctxt.externalContext, item, url);
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
if (externalHostServices != null)
- return externalHostServices.resolveValueSet(ctxt.externalContext, url);
+ return externalHostServices.resolveValueSet(engine, ctxt.externalContext, url);
else
return engine.getWorker().fetchResource(ValueSet.class, url);
}
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/FHIRPathHostServices.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/FHIRPathHostServices.java
index 76f27269e..a779f7786 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/FHIRPathHostServices.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/FHIRPathHostServices.java
@@ -24,7 +24,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
this.structureMapUtilities = structureMapUtilities;
}
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
Variables vars = (Variables) appContext;
Base res = vars.get(VariableMode.INPUT, name);
if (res == null)
@@ -36,7 +36,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
if (!(appContext instanceof VariablesForProfiling))
throw new Error(
"Internal Logic Error (wrong type '" + appContext.getClass().getName() + "' in resolveConstantType)");
@@ -53,24 +53,24 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
return null; // throw new Error("Not Implemented Yet");
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
throw new Error("Not Implemented Yet");
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
throw new Error("Not Implemented Yet");
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
if (structureMapUtilities.getServices() == null)
return null;
return structureMapUtilities.getServices().resolveReference(appContext, url);
@@ -84,7 +84,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = structureMapUtilities.getWorker().newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -100,7 +100,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not Implemented Yet");
}
diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/StructureMapUtilities.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/StructureMapUtilities.java
index bb60ace80..208182c96 100644
--- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/StructureMapUtilities.java
+++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/utils/structuremap/StructureMapUtilities.java
@@ -111,7 +111,7 @@ public class StructureMapUtilities {
private class FHIRPathHostServices implements IEvaluationContext {
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
Variables vars = (Variables) appContext;
List list = new ArrayList();
@@ -126,7 +126,7 @@ public class StructureMapUtilities {
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
if (!(appContext instanceof VariablesForProfiling))
throw new Error(
"Internal Logic Error (wrong type '" + appContext.getClass().getName() + "' in resolveConstantType)");
@@ -143,31 +143,31 @@ public class StructureMapUtilities {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
return null; // throw new Error("Not Implemented Yet");
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
throw new Error("Not Implemented Yet");
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
throw new Error("Not Implemented Yet");
}
@Override
- public Base resolveReference(Object appContext, String url, Base base) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base base) throws FHIRException {
if (services == null)
return null;
return services.resolveReference(appContext, url);
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = worker.newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -181,7 +181,7 @@ public class StructureMapUtilities {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not Implemented Yet");
}
diff --git a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/FHIRPathTests.java b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/FHIRPathTests.java
index b600f79e1..fbb32f2dd 100644
--- a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/FHIRPathTests.java
+++ b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/FHIRPathTests.java
@@ -44,14 +44,14 @@ public class FHIRPathTests {
public class FHIRPathTestEvaluationServices implements IEvaluationContext {
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveConstant), when item is element");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveConstantType), when item is element");
}
@@ -62,34 +62,34 @@ public class FHIRPathTests {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveFunction), when item is element (for " + functionName
+ ")");
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.checkFunction), when item is element");
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.executeFunction), when item is element");
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
throw new NotImplementedException(
"Not done yet (FHIRPathTestEvaluationServices.resolveReference), when item is element");
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
if (url.equals("http://hl7.org/fhir/StructureDefinition/Patient"))
return true;
if (url.equals("http://hl7.org/fhir/StructureDefinition/Person"))
@@ -99,7 +99,7 @@ public class FHIRPathTests {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
return TestingUtilities.context().fetchResource(ValueSet.class, url);
}
@@ -310,7 +310,7 @@ public class FHIRPathTests {
final String DUMMY_CONSTANT_2 = "dummyConstant2";
fp.setHostServices(new FHIRPathTestEvaluationServices() {
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
return Arrays.asList(new StringType(DUMMY_CONSTANT_1).noExtensions(),
diff --git a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/SnapShotGenerationTests.java b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/SnapShotGenerationTests.java
index 6ef70764f..2e3a2b580 100644
--- a/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/SnapShotGenerationTests.java
+++ b/org.hl7.fhir.r4b/src/test/java/org/hl7/fhir/r4b/test/SnapShotGenerationTests.java
@@ -368,13 +368,13 @@ public class SnapShotGenerationTests {
// FHIRPath methods
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext)
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant)
throws PathEngineException {
throw new Error("Not implemented yet");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet");
}
@@ -385,14 +385,14 @@ public class SnapShotGenerationTests {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
if ("fixture".equals(functionName))
return new FunctionDetails("Access a fixture defined in the testing context", 0, 1);
return null;
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters)
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters)
throws PathEngineException {
if ("fixture".equals(functionName))
return new TypeDetails(CollectionStatus.SINGLETON, TestingUtilities.context().getResourceNamesAsSet());
@@ -400,7 +400,7 @@ public class SnapShotGenerationTests {
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName,
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName,
List> parameters) {
if ("fixture".equals(functionName)) {
String id = fp.convertToString(parameters.get(0));
@@ -416,13 +416,13 @@ public class SnapShotGenerationTests {
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) {
// TODO Auto-generated method stub
return null;
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = TestingUtilities.context().newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -451,7 +451,7 @@ public class SnapShotGenerationTests {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not implemented yet");
}
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/comparison/ComparisonRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/comparison/ComparisonRenderer.java
index 71963825a..9a3bd1882 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/comparison/ComparisonRenderer.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/comparison/ComparisonRenderer.java
@@ -14,6 +14,7 @@ import java.util.Set;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.exceptions.PathEngineException;
+import org.hl7.fhir.r5.utils.FHIRPathEngine;
import org.hl7.fhir.r5.comparison.CapabilityStatementComparer.CapabilityStatementComparison;
import org.hl7.fhir.r5.comparison.CodeSystemComparer.CodeSystemComparison;
import org.hl7.fhir.r5.comparison.ResourceComparer.PlaceHolderComparison;
@@ -255,7 +256,7 @@ public class ComparisonRenderer implements IEvaluationContext {
}
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
@SuppressWarnings("unchecked")
Map vars = (Map) appContext;
List res = new ArrayList<>();
@@ -266,7 +267,7 @@ public class ComparisonRenderer implements IEvaluationContext {
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
@SuppressWarnings("unchecked")
Map vars = (Map) appContext;
Base b = vars.get(name);
@@ -279,32 +280,32 @@ public class ComparisonRenderer implements IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
return null;
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
return null;
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
return null;
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
return null;
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
return false;
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
return null;
}
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/FHIRPathEngine.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/FHIRPathEngine.java
index 5def56759..b51bc171d 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/FHIRPathEngine.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/FHIRPathEngine.java
@@ -153,8 +153,8 @@ public class FHIRPathEngine {
* @param beforeContext - whether this is being called before the name is resolved locally, or not
* @return the value of the reference (or null, if it's not valid, though can throw an exception if desired)
*/
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException;
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException;
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException;
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException;
/**
* when the .log() function is called
@@ -171,7 +171,7 @@ public class FHIRPathEngine {
* @param functionName
* @return null if the function is not known
*/
- public FunctionDetails resolveFunction(String functionName);
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName);
/**
* Check the function parameters, and throw an error if they are incorrect, or return the type for the function
@@ -179,7 +179,7 @@ public class FHIRPathEngine {
* @param parameters
* @return
*/
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException;
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException;
/**
* @param appContext
@@ -187,7 +187,7 @@ public class FHIRPathEngine {
* @param parameters
* @return
*/
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters);
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters);
/**
* Implementation of resolve() function. Passed a string, return matching resource, if one is known - else null
@@ -196,14 +196,14 @@ public class FHIRPathEngine {
* @return
* @throws FHIRException
*/
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException;
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException;
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException;
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException;
/*
* return the value set referenced by the url, which has been used in memberOf()
*/
- public ValueSet resolveValueSet(Object appContext, String url);
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url);
/**
* For the moment, there can only be one parameter if it's a type parameter
@@ -1112,7 +1112,7 @@ public class FHIRPathEngine {
FunctionDetails details = null;
if (f == null) {
if (hostServices != null) {
- details = hostServices.resolveFunction(result.getName());
+ details = hostServices.resolveFunction(this, result.getName());
}
if (details == null) {
throw lexer.error("The name "+result.getName()+" is not a valid function name");
@@ -1536,7 +1536,7 @@ public class FHIRPathEngine {
} else if (atEntry && exp.getName().equals("$index")) {
result.addType(TypeDetails.FP_Integer);
} else if (atEntry && focus == null) {
- result.update(executeContextType(context, exp.getName(), exp));
+ result.update(executeContextType(context, exp.getName(), exp, false));
} else {
for (String s : focus.getTypes()) {
result.update(executeType(s, exp, atEntry, focus, elementDependencies));
@@ -1560,7 +1560,7 @@ public class FHIRPathEngine {
result.addType(TypeDetails.FP_Quantity);
break;
case Constant:
- result.update(resolveConstantType(context, exp.getConstant(), exp));
+ result.update(resolveConstantType(context, exp.getConstant(), exp, true));
break;
case Group:
result.update(executeType(context, focus, exp.getGroup(), elementDependencies, atEntry, canBeNone, exp));
@@ -1612,7 +1612,7 @@ public class FHIRPathEngine {
}
FHIRConstant c = (FHIRConstant) constant;
if (c.getValue().startsWith("%")) {
- return resolveConstant(context, c.getValue(), beforeContext, expr);
+ return resolveConstant(context, c.getValue(), beforeContext, expr, true);
} else if (c.getValue().startsWith("@")) {
return new ArrayList(Arrays.asList(processDateConstant(context.appInfo, c.getValue().substring(1), expr)));
} else {
@@ -1683,7 +1683,7 @@ public class FHIRPathEngine {
}
- private List resolveConstant(ExecutionContext context, String s, boolean beforeContext, ExpressionNode expr) throws PathEngineException {
+ private List resolveConstant(ExecutionContext context, String s, boolean beforeContext, ExpressionNode expr, boolean explicitConstant) throws PathEngineException {
if (s.equals("%sct")) {
return new ArrayList(Arrays.asList(new StringType("http://snomed.info/sct").noExtensions()));
} else if (s.equals("%loinc")) {
@@ -1713,7 +1713,7 @@ public class FHIRPathEngine {
} else if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_CONSTANT, s);
} else {
- return hostServices.resolveConstant(context.appInfo, s.substring(1), beforeContext);
+ return hostServices.resolveConstant(this, context.appInfo, s.substring(1), beforeContext, explicitConstant);
}
}
@@ -2532,7 +2532,7 @@ public class FHIRPathEngine {
private List opMemberOf(ExecutionContext context, List left, List right, ExpressionNode expr) throws FHIRException {
boolean ans = false;
String url = right.get(0).primitiveValue();
- ValueSet vs = hostServices != null ? hostServices.resolveValueSet(context.appInfo, url) : worker.fetchResource(ValueSet.class, url);
+ ValueSet vs = hostServices != null ? hostServices.resolveValueSet(this, context.appInfo, url) : worker.fetchResource(ValueSet.class, url);
if (vs != null) {
for (Base l : left) {
if (Utilities.existsInList(l.fhirType(), "code", "string", "uri")) {
@@ -3031,7 +3031,7 @@ public class FHIRPathEngine {
}
- private TypeDetails resolveConstantType(ExecutionTypeContext context, Base constant, ExpressionNode expr) throws PathEngineException {
+ private TypeDetails resolveConstantType(ExecutionTypeContext context, Base constant, ExpressionNode expr, boolean explicitConstant) throws PathEngineException {
if (constant instanceof BooleanType) {
return new TypeDetails(CollectionStatus.SINGLETON, TypeDetails.FP_Boolean);
} else if (constant instanceof IntegerType) {
@@ -3041,7 +3041,7 @@ public class FHIRPathEngine {
} else if (constant instanceof Quantity) {
return new TypeDetails(CollectionStatus.SINGLETON, TypeDetails.FP_Quantity);
} else if (constant instanceof FHIRConstant) {
- return resolveConstantType(context, ((FHIRConstant) constant).getValue(), expr);
+ return resolveConstantType(context, ((FHIRConstant) constant).getValue(), expr, explicitConstant);
} else if (constant == null) {
return new TypeDetails(CollectionStatus.SINGLETON);
} else {
@@ -3049,7 +3049,7 @@ public class FHIRPathEngine {
}
}
- private TypeDetails resolveConstantType(ExecutionTypeContext context, String s, ExpressionNode expr) throws PathEngineException {
+ private TypeDetails resolveConstantType(ExecutionTypeContext context, String s, ExpressionNode expr, boolean explicitConstant) throws PathEngineException {
if (s.startsWith("@")) {
if (s.startsWith("@T")) {
return new TypeDetails(CollectionStatus.SINGLETON, TypeDetails.FP_Time);
@@ -3087,7 +3087,7 @@ public class FHIRPathEngine {
} else if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_UNKNOWN_CONSTANT, s);
} else {
- return hostServices.resolveConstantType(context.appInfo, s);
+ return hostServices.resolveConstantType(this, context.appInfo, s, explicitConstant);
}
}
@@ -3095,7 +3095,7 @@ public class FHIRPathEngine {
List result = new ArrayList();
if (atEntry && context.appInfo != null && hostServices != null) {
// we'll see if the name matches a constant known by the context.
- List temp = hostServices.resolveConstant(context.appInfo, exp.getName(), true);
+ List temp = hostServices.resolveConstant(this, context.appInfo, exp.getName(), true, false);
if (!temp.isEmpty()) {
result.addAll(temp);
return result;
@@ -3123,7 +3123,7 @@ public class FHIRPathEngine {
if (atEntry && context.appInfo != null && hostServices != null && result.isEmpty()) {
// well, we didn't get a match on the name - we'll see if the name matches a constant known by the context.
// (if the name does match, and the user wants to get the constant value, they'll have to try harder...
- result.addAll(hostServices.resolveConstant(context.appInfo, exp.getName(), false));
+ result.addAll(hostServices.resolveConstant(this, context.appInfo, exp.getName(), false, false));
}
return result;
}
@@ -3133,11 +3133,11 @@ public class FHIRPathEngine {
}
- private TypeDetails executeContextType(ExecutionTypeContext context, String name, ExpressionNode expr) throws PathEngineException, DefinitionException {
+ private TypeDetails executeContextType(ExecutionTypeContext context, String name, ExpressionNode expr, boolean explicitConstant) throws PathEngineException, DefinitionException {
if (hostServices == null) {
throw makeException(expr, I18nConstants.FHIRPATH_HO_HOST_SERVICES, "Context Reference");
}
- return hostServices.resolveConstantType(context.appInfo, name);
+ return hostServices.resolveConstantType(this, context.appInfo, name, explicitConstant);
}
private TypeDetails executeType(String type, ExpressionNode exp, boolean atEntry, TypeDetails focus, Set elementDependencies) throws PathEngineException, DefinitionException {
@@ -3585,7 +3585,7 @@ public class FHIRPathEngine {
}
case Custom : {
- return hostServices.checkFunction(context.appInfo, exp.getName(), paramTypes);
+ return hostServices.checkFunction(this, context.appInfo,exp.getName(), focus, paramTypes);
}
default:
break;
@@ -3818,7 +3818,7 @@ public class FHIRPathEngine {
params.add(execute(context, focus, p, true));
}
}
- return hostServices.executeFunction(context.appInfo, focus, exp.getName(), params);
+ return hostServices.executeFunction(this, context.appInfo, focus, exp.getName(), params);
}
default:
throw new Error("not Implemented yet");
@@ -4481,7 +4481,7 @@ public class FHIRPathEngine {
}
String url = nl.get(0).primitiveValue();
- ValueSet vs = hostServices != null ? hostServices.resolveValueSet(context.appInfo, url) : worker.fetchResource(ValueSet.class, url);
+ ValueSet vs = hostServices != null ? hostServices.resolveValueSet(this, context.appInfo, url) : worker.fetchResource(ValueSet.class, url);
if (vs == null) {
return new ArrayList();
}
@@ -5108,7 +5108,7 @@ public class FHIRPathEngine {
}
} else if (hostServices != null) {
try {
- res = hostServices.resolveReference(context.appInfo, s, refContext);
+ res = hostServices.resolveReference(this, context.appInfo, s, refContext);
} catch (Exception e) {
res = null;
}
@@ -5616,7 +5616,7 @@ public class FHIRPathEngine {
result.add(new BooleanType(false).noExtensions());
} else {
String url = convertToString(execute(context, focus, expr.getParameters().get(0), true));
- result.add(new BooleanType(hostServices.conformsToProfile(context.appInfo, focus.get(0), url)).noExtensions());
+ result.add(new BooleanType(hostServices.conformsToProfile(this, context.appInfo, focus.get(0), url)).noExtensions());
}
return result;
}
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/LiquidEngine.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/LiquidEngine.java
index 32ba081b9..091491246 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/LiquidEngine.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/LiquidEngine.java
@@ -741,7 +741,7 @@ public class LiquidEngine implements IEvaluationContext {
}
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
if (ctxt.loopVars.containsKey(name))
return new ArrayList(Arrays.asList(ctxt.loopVars.get(name)));
@@ -749,15 +749,15 @@ public class LiquidEngine implements IEvaluationContext {
return new ArrayList(Arrays.asList(ctxt.globalVars.get(name)));
if (externalHostServices == null)
return new ArrayList();
- return externalHostServices.resolveConstant(ctxt.externalContext, name, beforeContext);
+ return externalHostServices.resolveConstant(engine, ctxt.externalContext, name, beforeContext, explicitConstant);
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.resolveConstantType(ctxt.externalContext, name);
+ return externalHostServices.resolveConstantType(engine, ctxt.externalContext, name, explicitConstant);
}
@Override
@@ -768,49 +768,49 @@ public class LiquidEngine implements IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
if (externalHostServices == null)
return null;
- return externalHostServices.resolveFunction(functionName);
+ return externalHostServices.resolveFunction(engine, functionName);
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.checkFunction(ctxt.externalContext, functionName, parameters);
+ return externalHostServices.checkFunction(engine, ctxt.externalContext, functionName, focus, parameters);
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return externalHostServices.executeFunction(ctxt.externalContext, focus, functionName, parameters);
+ return externalHostServices.executeFunction(engine, ctxt.externalContext, focus, functionName, parameters);
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
if (externalHostServices == null)
return null;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return resolveReference(ctxt.externalContext, url, refContext);
+ return resolveReference(engine, ctxt.externalContext, url, refContext);
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
if (externalHostServices == null)
return false;
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
- return conformsToProfile(ctxt.externalContext, item, url);
+ return conformsToProfile(engine, ctxt.externalContext, item, url);
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
LiquidEngineContext ctxt = (LiquidEngineContext) appContext;
if (externalHostServices != null)
- return externalHostServices.resolveValueSet(ctxt.externalContext, url);
+ return externalHostServices.resolveValueSet(engine, ctxt.externalContext, url);
else
return engine.getWorker().fetchResource(ValueSet.class, url);
}
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/sql/Runner.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/sql/Runner.java
index 4c293d895..1e1a7671f 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/sql/Runner.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/sql/Runner.java
@@ -318,12 +318,12 @@ public class Runner implements IEvaluationContext {
}
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet: resolveConstant");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet: resolveConstantType");
}
@@ -333,7 +333,7 @@ public class Runner implements IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
switch (functionName) {
case "getResourceKey" : return new FunctionDetails("Unique Key for resource", 0, 0);
case "getReferenceKey" : return new FunctionDetails("Unique Key for resource that is the target of the reference", 0, 1);
@@ -341,7 +341,7 @@ public class Runner implements IEvaluationContext {
}
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
switch (functionName) {
case "getResourceKey" : return new TypeDetails(CollectionStatus.SINGLETON, "string");
case "getReferenceKey" : return new TypeDetails(CollectionStatus.SINGLETON, "string");
@@ -350,7 +350,7 @@ public class Runner implements IEvaluationContext {
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
switch (functionName) {
case "getResourceKey" : return executeResourceKey(focus);
case "getReferenceKey" : return executeReferenceKey(focus, parameters);
@@ -420,17 +420,17 @@ public class Runner implements IEvaluationContext {
return null;
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
throw new Error("Not implemented yet: resolveReference");
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
throw new Error("Not implemented yet: conformsToProfile");
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not implemented yet: resolveValueSet");
}
@Override
diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServices.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServices.java
index 678d2b357..fce5c072c 100644
--- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServices.java
+++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServices.java
@@ -24,7 +24,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
this.structureMapUtilities = structureMapUtilities;
}
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
Variables vars = (Variables) appContext;
Base res = vars.get(VariableMode.INPUT, name);
if (res == null)
@@ -36,7 +36,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
if (!(appContext instanceof VariablesForProfiling))
throw new Error("Internal Logic Error (wrong type '" + appContext.getClass().getName() + "' in resolveConstantType)");
VariablesForProfiling vars = (VariablesForProfiling) appContext;
@@ -52,22 +52,22 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
return null; // throw new Error("Not Implemented Yet");
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
throw new Error("Not Implemented Yet");
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
throw new Error("Not Implemented Yet");
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
if (structureMapUtilities.getServices() == null)
return null;
return structureMapUtilities.getServices().resolveReference(appContext, url);
@@ -81,7 +81,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = structureMapUtilities.getWorker().newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -96,7 +96,7 @@ public class FHIRPathHostServices implements FHIRPathEngine.IEvaluationContext {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
return structureMapUtilities.getWorker().fetchResource(ValueSet.class, url);
}
diff --git a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/FHIRPathTests.java b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/FHIRPathTests.java
index b82d84db9..88de6464e 100644
--- a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/FHIRPathTests.java
+++ b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/FHIRPathTests.java
@@ -46,12 +46,12 @@ public class FHIRPathTests {
public class FHIRPathTestEvaluationServices implements IEvaluationContext {
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
throw new NotImplementedException("Not done yet (FHIRPathTestEvaluationServices.resolveConstant), when item is element");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new NotImplementedException("Not done yet (FHIRPathTestEvaluationServices.resolveConstantType), when item is element");
}
@@ -61,27 +61,27 @@ public class FHIRPathTests {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
throw new NotImplementedException("Not done yet (FHIRPathTestEvaluationServices.resolveFunction), when item is element (for " + functionName + ")");
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
throw new NotImplementedException("Not done yet (FHIRPathTestEvaluationServices.checkFunction), when item is element");
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
throw new NotImplementedException("Not done yet (FHIRPathTestEvaluationServices.executeFunction), when item is element");
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) throws FHIRException {
throw new NotImplementedException("Not done yet (FHIRPathTestEvaluationServices.resolveReference), when item is element");
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
if (url.equals("http://hl7.org/fhir/StructureDefinition/Patient"))
return true;
if (url.equals("http://hl7.org/fhir/StructureDefinition/Person"))
@@ -91,7 +91,7 @@ public class FHIRPathTests {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
return TestingUtilities.getSharedWorkerContext().fetchResource(ValueSet.class, url);
}
@@ -291,7 +291,7 @@ public class FHIRPathTests {
final String DUMMY_CONSTANT_2 = "dummyConstant2";
fp.setHostServices(new FHIRPathTestEvaluationServices() {
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
return Arrays.asList(
new StringType(DUMMY_CONSTANT_1).noExtensions(),
diff --git a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/SnapShotGenerationTests.java b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/SnapShotGenerationTests.java
index d089a373d..4288d2822 100644
--- a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/SnapShotGenerationTests.java
+++ b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/test/SnapShotGenerationTests.java
@@ -337,12 +337,12 @@ public class SnapShotGenerationTests {
// FHIRPath methods
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet");
}
@@ -353,21 +353,21 @@ public class SnapShotGenerationTests {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
if ("fixture".equals(functionName))
return new FunctionDetails("Access a fixture defined in the testing context", 0, 1);
return null;
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
if ("fixture".equals(functionName))
return new TypeDetails(CollectionStatus.SINGLETON, TestingUtilities.getSharedWorkerContext().getResourceNamesAsSet());
return null;
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
if ("fixture".equals(functionName)) {
String id = fp.convertToString(parameters.get(0));
Resource res = fetchFixture(id);
@@ -382,13 +382,13 @@ public class SnapShotGenerationTests {
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) {
// TODO Auto-generated method stub
return null;
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = TestingUtilities.getSharedWorkerContext().newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -416,7 +416,7 @@ public class SnapShotGenerationTests {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not implemented yet");
}
diff --git a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServicesTest.java b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServicesTest.java
index d0766fb4c..5bb2b8a80 100644
--- a/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServicesTest.java
+++ b/org.hl7.fhir.r5/src/test/java/org/hl7/fhir/r5/utils/structuremap/FHIRPathHostServicesTest.java
@@ -24,7 +24,7 @@ class FHIRPathHostServicesTest {
public void testrResolveValueSet() throws IOException, FHIRException {
StructureMapUtilities scu = new StructureMapUtilities(context);
FHIRPathHostServices fphs = new FHIRPathHostServices(scu);
- ValueSet v = fphs.resolveValueSet(null, "http://hl7.org/fhir/ValueSet/FHIR-version");
+ ValueSet v = fphs.resolveValueSet(null, null, "http://hl7.org/fhir/ValueSet/FHIR-version");
Assertions.assertNotNull(v);
Assertions.assertEquals("http://hl7.org/fhir/ValueSet/FHIR-version", v.getUrl());
}
diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/conversion/tests/SnapShotGenerationXTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/conversion/tests/SnapShotGenerationXTests.java
index 8ba86322d..e8aff5e20 100644
--- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/conversion/tests/SnapShotGenerationXTests.java
+++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/conversion/tests/SnapShotGenerationXTests.java
@@ -316,12 +316,12 @@ public class SnapShotGenerationXTests {
// FHIRPath methods
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet");
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
throw new Error("Not implemented yet");
}
@@ -332,21 +332,21 @@ public class SnapShotGenerationXTests {
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
if ("fixture".equals(functionName))
return new FunctionDetails("Access a fixture defined in the testing context", 0, 1);
return null;
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
if ("fixture".equals(functionName))
return new TypeDetails(CollectionStatus.SINGLETON, UtilitiesXTests.context(version).getResourceNamesAsSet());
return null;
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
if ("fixture".equals(functionName)) {
String id = fp.convertToString(parameters.get(0));
Resource res = fetchFixture(id);
@@ -361,13 +361,13 @@ public class SnapShotGenerationXTests {
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) {
// TODO Auto-generated method stub
return null;
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = UtilitiesXTests.context(version).newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -393,7 +393,7 @@ public class SnapShotGenerationXTests {
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
throw new Error("Not implemented yet");
}
diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java
index d7429594c..55e5ec2fb 100644
--- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java
+++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java
@@ -656,12 +656,12 @@ public class ValidationTests implements IEvaluationContext, IValidatorResourceFe
}
@Override
- public List resolveConstant(Object appContext, String name, boolean beforeContext) throws PathEngineException {
+ public List resolveConstant(FHIRPathEngine engine, Object appContext, String name, boolean beforeContext, boolean explicitConstant) throws PathEngineException {
return new ArrayList();
}
@Override
- public TypeDetails resolveConstantType(Object appContext, String name) throws PathEngineException {
+ public TypeDetails resolveConstantType(FHIRPathEngine engine, Object appContext, String name, boolean explicitConstant) throws PathEngineException {
return null;
}
@@ -671,22 +671,22 @@ public class ValidationTests implements IEvaluationContext, IValidatorResourceFe
}
@Override
- public FunctionDetails resolveFunction(String functionName) {
+ public FunctionDetails resolveFunction(FHIRPathEngine engine, String functionName) {
return null;
}
@Override
- public TypeDetails checkFunction(Object appContext, String functionName, List parameters) throws PathEngineException {
+ public TypeDetails checkFunction(FHIRPathEngine engine, Object appContext, String functionName, TypeDetails focus, List parameters) throws PathEngineException {
return null;
}
@Override
- public List executeFunction(Object appContext, List focus, String functionName, List> parameters) {
+ public List executeFunction(FHIRPathEngine engine, Object appContext, List focus, String functionName, List> parameters) {
return null;
}
@Override
- public Base resolveReference(Object appContext, String url, Base refContext) {
+ public Base resolveReference(FHIRPathEngine engine, Object appContext, String url, Base refContext) {
if (url.equals("Patient/test"))
return new Patient();
return null;
@@ -752,7 +752,7 @@ public class ValidationTests implements IEvaluationContext, IValidatorResourceFe
}
@Override
- public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
+ public boolean conformsToProfile(FHIRPathEngine engine, Object appContext, Base item, String url) throws FHIRException {
IResourceValidator val = vCurr.getContext().newValidator();
List valerrors = new ArrayList();
if (item instanceof Resource) {
@@ -766,7 +766,7 @@ public class ValidationTests implements IEvaluationContext, IValidatorResourceFe
}
@Override
- public ValueSet resolveValueSet(Object appContext, String url) {
+ public ValueSet resolveValueSet(FHIRPathEngine engine, Object appContext, String url) {
return vCurr.getContext().fetchResource(ValueSet.class, url);
}