diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-09-17 09:47:39 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-09-17 09:47:39 +0200 |
commit | 347db07eb16da7ff3a4b2cac676caa932e8136dc (patch) | |
tree | fed95dfbcaf14c841d7be8867182e9487414c2b5 /config-model | |
parent | 5a6f9b703f228a6bb5565d5e680f22a3e3059ff0 (diff) |
Refactor: Construct using ExpressionFunction
Diffstat (limited to 'config-model')
6 files changed, 24 insertions, 42 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java index 98238d886db..200eac0cdad 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java @@ -549,14 +549,9 @@ public class RankProfile implements Serializable, Cloneable { } /** Adds a new macro and returns it */ - public Macro addMacro(String name, RankingExpression expression, boolean inline) { - return addMacro(name, Collections.emptyList(), expression, inline); - } - - /** Adds a new macro and returns it */ public Macro addMacro(String name, List<String> arguments, String expression, boolean inline) { try { - return addMacro(name, arguments, parseRankingExpression(name, expression), inline); + return addMacro(new ExpressionFunction(name, arguments, parseRankingExpression(name, expression)), inline); } catch (ParseException e) { throw new IllegalArgumentException("Could not parse macro '" + name + "'", e); @@ -564,9 +559,9 @@ public class RankProfile implements Serializable, Cloneable { } /** Adds a new macro and returns it */ - public Macro addMacro(String name, List<String> arguments, RankingExpression expression, boolean inline) { - Macro macro = new Macro(name, arguments, expression, inline); - macros.put(name, macro); + public Macro addMacro(ExpressionFunction function, boolean inline) { + Macro macro = new Macro(function, inline); + macros.put(function.getName(), macro); return macro; } @@ -753,7 +748,7 @@ public class RankProfile implements Serializable, Cloneable { for (Map.Entry<String, Macro> entry : macros.entrySet()) { Macro macro = entry.getValue(); RankingExpression compiled = compile(macro.function().getBody(), queryProfiles, importedModels, getConstants(), inlineMacros, expressionTransforms); - compiledMacros.put(entry.getKey(), macro.withExpression(compiled)); + compiledMacros.put(entry.getKey(), macro.withBody(compiled)); } return compiledMacros; } @@ -951,7 +946,7 @@ public class RankProfile implements Serializable, Cloneable { } /** - * Represents a declared macro in the profile. It is, after parsing, transformed into ExpressionMacro + * A function in a rank profile */ public static class Macro { @@ -960,38 +955,24 @@ public class RankProfile implements Serializable, Cloneable { /** True if this should be inlined into calling expressions. Useful for very cheap macros. */ private final boolean inline; - public Macro(String name, List<String> arguments, RankingExpression expression, boolean inline) { - this.function = new ExpressionFunction(name, arguments, expression); + public Macro(ExpressionFunction function, boolean inline) { + this.function = function; this.inline = inline; } - public List<String> getArguments() { - return function.arguments(); - } - - public Macro withExpression(RankingExpression expression) { - return new Macro(function.getName(), function.arguments(), expression, inline); - } - - public RankingExpression getRankingExpression() { - return function.getBody(); - } - - public String getName() { - return function.getName(); - } + public ExpressionFunction function() { return function; } public boolean inline() { return inline && function.arguments().isEmpty(); // only inline no-arg macros; } - public ExpressionFunction function() { - return function; + public Macro withBody(RankingExpression expression) { + return new Macro(function.withBody(expression), inline); } @Override public String toString() { - return "macro " + getName() + ": " + function().getBody(); + return "function " + function; } } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroShadower.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroShadower.java index a1d7f2ddd2a..13f31c0254e 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroShadower.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroShadower.java @@ -49,10 +49,8 @@ public class MacroShadower extends ExpressionTransformer<RankProfileTransformCon } int functionArity = function.getFunction().arity(); - int macroArity = macro.getArguments() != null ? macro.getArguments().size() : 0; - if (functionArity != macroArity) { + if (functionArity != macro.function().arguments().size()) return transformChildren(function, context); - } ReferenceNode node = new ReferenceNode(name, function.children(), null); return transformChildren(node, context); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index e2ad9c6a579..bc2b2f70eae 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -32,6 +32,7 @@ import com.yahoo.searchdefinition.RankProfileRegistry; import com.yahoo.searchdefinition.RankingConstants; import com.yahoo.searchdefinition.derived.AttributeFields; import com.yahoo.searchdefinition.derived.RankProfileList; +import com.yahoo.searchlib.rankingexpression.ExpressionFunction; import com.yahoo.vespa.model.ml.ConvertedModel; import com.yahoo.searchlib.rankingexpression.RankingExpression; import com.yahoo.searchlib.rankingexpression.integration.ml.ImportedModel; @@ -236,7 +237,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri ConvertedModel convertedModel = ConvertedModel.fromSource(new ModelName(model.name()), model.name(), profile, queryProfiles, model); for (Map.Entry<String, RankingExpression> entry : convertedModel.expressions().entrySet()) { - profile.addMacro(entry.getKey(), entry.getValue(), false); + profile.addMacro(new ExpressionFunction(entry.getKey(), entry.getValue()), false); } } } @@ -248,7 +249,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri rankProfileRegistry.add(profile); ConvertedModel convertedModel = ConvertedModel.fromStore(new ModelName(modelName), modelName, profile); for (Map.Entry<String, RankingExpression> entry : convertedModel.expressions().entrySet()) { - profile.addMacro(entry.getKey(), entry.getValue(), false); + profile.addMacro(new ExpressionFunction(entry.getKey(), entry.getValue()), false); } } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java b/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java index 390fd32f0ba..fb1ca9a0822 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java @@ -13,6 +13,7 @@ import com.yahoo.searchdefinition.FeatureNames; import com.yahoo.searchdefinition.RankProfile; import com.yahoo.searchdefinition.RankingConstant; import com.yahoo.searchdefinition.expressiontransforms.RankProfileTransformContext; +import com.yahoo.searchlib.rankingexpression.ExpressionFunction; import com.yahoo.searchlib.rankingexpression.RankingExpression; import com.yahoo.searchlib.rankingexpression.Reference; import com.yahoo.searchlib.rankingexpression.evaluation.DoubleValue; @@ -285,7 +286,7 @@ public class ConvertedModel { "\nwant to add " + expression + "\n"); return; } - profile.addMacro(macroName, expression, false); // TODO: Inline if only used once + profile.addMacro(new ExpressionFunction(macroName, expression), false); // TODO: Inline if only used once } /** diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java index e8bc4f44738..7b262bdc4d0 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java @@ -4,6 +4,7 @@ package com.yahoo.searchdefinition; import com.yahoo.config.model.application.provider.FilesApplicationPackage; import com.yahoo.config.model.test.TestDriver; import com.yahoo.config.model.test.TestRoot; +import com.yahoo.searchlib.rankingexpression.ExpressionFunction; import com.yahoo.searchlib.rankingexpression.RankingExpression; import com.yahoo.vespa.config.search.RankProfilesConfig; import org.junit.Test; @@ -46,7 +47,7 @@ public class RankProfileRegistryTest { for (String rankProfileName : RankProfileRegistry.overridableRankProfileNames) { assertNull(rankProfileRegistry.get(search, rankProfileName).getMacros().get("foo")); RankProfile rankProfileWithAddedMacro = new RankProfile(rankProfileName, search, rankProfileRegistry); - rankProfileWithAddedMacro.addMacro("foo", RankingExpression.from("1+2"), true); + rankProfileWithAddedMacro.addMacro(new ExpressionFunction("foo", RankingExpression.from("1+2")), true); rankProfileRegistry.add(rankProfileWithAddedMacro); assertNotNull(rankProfileRegistry.get(search, rankProfileName).getMacros().get("foo")); } diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionsTestCase.java index 0f8e6072d53..132807bf8b8 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionsTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/RankingExpressionsTestCase.java @@ -28,13 +28,13 @@ public class RankingExpressionsTestCase extends SearchDefinitionTestCase { final RankProfile macrosRankProfile = rankProfileRegistry.get(search, "macros"); macrosRankProfile.parseExpressions(); final Map<String, RankProfile.Macro> macros = macrosRankProfile.getMacros(); - assertEquals(2, macros.get("titlematch$").getArguments().size()); - assertEquals("var1", macros.get("titlematch$").getArguments().get(0)); - assertEquals("var2", macros.get("titlematch$").getArguments().get(1)); + assertEquals(2, macros.get("titlematch$").function().arguments().size()); + assertEquals("var1", macros.get("titlematch$").function().arguments().get(0)); + assertEquals("var2", macros.get("titlematch$").function().arguments().get(1)); assertEquals("var1 * var2 + 890", macros.get("titlematch$").function().getBody().getRoot().toString()); assertEquals("0.8+0.2*titlematch$(4,5)+0.8*titlematch$(7,8)*closeness(distance)", macrosRankProfile.getFirstPhaseRankingString().trim()); assertEquals("78 + closeness(distance)", macros.get("artistmatch").function().getBody().getRoot().toString()); - assertEquals(0, macros.get("artistmatch").getArguments().size()); + assertEquals(0, macros.get("artistmatch").function().arguments().size()); List<Pair<String, String>> rankProperties = new RawRankProfile(macrosRankProfile, new QueryProfileRegistry(), |