From a331d4b4500155f279a30020048628072d80c326 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 14 Sep 2018 14:52:21 +0200 Subject: Use a normal SearchBuilder to get all sanity checks and preprocessing also when building concrete docs. --- vespa-documentgen-plugin/etc/complex/book.sd | 2 +- vespa-documentgen-plugin/etc/complex/common.sd | 12 +++--------- vespa-documentgen-plugin/etc/complex/music2.sd | 2 +- vespa-documentgen-plugin/etc/localapp/common.sd | 12 +++--------- vespa-documentgen-plugin/etc/localapp/music.sd | 2 +- .../src/main/java/com/yahoo/vespa/DocumentGenMojo.java | 2 +- .../src/test/java/com/yahoo/vespa/DocumentGenTest.java | 1 + 7 files changed, 11 insertions(+), 22 deletions(-) (limited to 'vespa-documentgen-plugin') diff --git a/vespa-documentgen-plugin/etc/complex/book.sd b/vespa-documentgen-plugin/etc/complex/book.sd index 2635ebe9881..16bf4447979 100644 --- a/vespa-documentgen-plugin/etc/complex/book.sd +++ b/vespa-documentgen-plugin/etc/complex/book.sd @@ -30,7 +30,7 @@ search book { attribute: prefetch } - field mynestedwsfloat type weightedset> {} + field mynestedwsfloat type weightedset {} field myarrayint type array { indexing: attribute diff --git a/vespa-documentgen-plugin/etc/complex/common.sd b/vespa-documentgen-plugin/etc/complex/common.sd index 0764421ac8d..e0505eba05b 100644 --- a/vespa-documentgen-plugin/etc/complex/common.sd +++ b/vespa-documentgen-plugin/etc/complex/common.sd @@ -17,19 +17,13 @@ search common { indexing: summary } field weight type float { - indexing { - input weight * 10 | attribute | summary; - } + indexing: attribute | summary } field w1 type float { - indexing { - input weight * 6 + input w1 | summary; - } + indexing: summary } field w2 type float { - indexing { - input w2 + input weight | summary; - } + indexing: summary } field did type string { indexing: attribute|index|summary diff --git a/vespa-documentgen-plugin/etc/complex/music2.sd b/vespa-documentgen-plugin/etc/complex/music2.sd index 5657580e622..2e2d96ecdec 100644 --- a/vespa-documentgen-plugin/etc/complex/music2.sd +++ b/vespa-documentgen-plugin/etc/complex/music2.sd @@ -56,7 +56,7 @@ search music2 { } field didinteger type array { - indexing: input did | split " " | attribute + indexing: input did | split " " | for_each { to_int } | attribute } rank-profile default { diff --git a/vespa-documentgen-plugin/etc/localapp/common.sd b/vespa-documentgen-plugin/etc/localapp/common.sd index ada7ce7436a..724897b4e7f 100644 --- a/vespa-documentgen-plugin/etc/localapp/common.sd +++ b/vespa-documentgen-plugin/etc/localapp/common.sd @@ -17,19 +17,13 @@ search common { indexing: summary } field weight type float { - indexing { - input weight * 10 | attribute | summary; - } + indexing: attribute|summary } field w1 type float { - indexing { - input weight * 6 + input w1 | summary; - } + indexing: summary } field w2 type float { - indexing { - input w2 + input weight | summary; - } + indexing: summary } field did type string { indexing: attribute|index|summary diff --git a/vespa-documentgen-plugin/etc/localapp/music.sd b/vespa-documentgen-plugin/etc/localapp/music.sd index 0cfe5cf923a..e00e046f511 100644 --- a/vespa-documentgen-plugin/etc/localapp/music.sd +++ b/vespa-documentgen-plugin/etc/localapp/music.sd @@ -51,7 +51,7 @@ search music { } field didinteger type array { - indexing: input did | split " " | attribute + indexing: input did | split " " | for_each { to_int } | attribute } rank-profile default { diff --git a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java index eab3983dc69..309b9b73aa6 100644 --- a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java +++ b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java @@ -109,7 +109,7 @@ public class DocumentGenMojo extends AbstractMojo { public boolean accept(File dir, String name) { return name.endsWith(".sd"); }}); - SearchBuilder builder = new UnprocessingSearchBuilder(); + SearchBuilder builder = new SearchBuilder(); for (File f : sdFiles) { try { long modTime = f.lastModified(); diff --git a/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java b/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java index a9a5893cf96..b21f38c586a 100644 --- a/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java +++ b/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java @@ -33,6 +33,7 @@ public class DocumentGenTest { mojo.execute(new File("etc/complex/"), new File("target/generated-test-sources/vespa-documentgen-plugin/"), "com.yahoo.vespa.document"); Map searches = mojo.getSearches(); assertEquals(searches.get("video").getDocument("video").getField("weight").getDataType(), DataType.FLOAT); + assertEquals(searches.get("book").getDocument("book").getField("sw1").getDataType(), DataType.FLOAT); assertTrue(searches.get("book").getDocument("book").getField("mystruct").getDataType() instanceof StructDataType); assertTrue(searches.get("book").getDocument("book").getField("mywsfloat").getDataType() instanceof WeightedSetDataType); assertTrue(((WeightedSetDataType)(searches.get("book").getDocument("book").getField("mywsfloat").getDataType())).getNestedType() == DataType.FLOAT); -- cgit v1.2.3 From e4b377a9fee4a1bad8e7293b577f6b082ebf1cb3 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 14 Sep 2018 15:35:49 +0200 Subject: Revert "Use a normal SearchBuilder to get all sanity checks and preprocessing…" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vespa-documentgen-plugin/etc/complex/book.sd | 2 +- vespa-documentgen-plugin/etc/complex/common.sd | 12 +++++++++--- vespa-documentgen-plugin/etc/complex/music2.sd | 2 +- vespa-documentgen-plugin/etc/localapp/common.sd | 12 +++++++++--- vespa-documentgen-plugin/etc/localapp/music.sd | 2 +- .../src/main/java/com/yahoo/vespa/DocumentGenMojo.java | 2 +- .../src/test/java/com/yahoo/vespa/DocumentGenTest.java | 1 - 7 files changed, 22 insertions(+), 11 deletions(-) (limited to 'vespa-documentgen-plugin') diff --git a/vespa-documentgen-plugin/etc/complex/book.sd b/vespa-documentgen-plugin/etc/complex/book.sd index 16bf4447979..2635ebe9881 100644 --- a/vespa-documentgen-plugin/etc/complex/book.sd +++ b/vespa-documentgen-plugin/etc/complex/book.sd @@ -30,7 +30,7 @@ search book { attribute: prefetch } - field mynestedwsfloat type weightedset {} + field mynestedwsfloat type weightedset> {} field myarrayint type array { indexing: attribute diff --git a/vespa-documentgen-plugin/etc/complex/common.sd b/vespa-documentgen-plugin/etc/complex/common.sd index e0505eba05b..0764421ac8d 100644 --- a/vespa-documentgen-plugin/etc/complex/common.sd +++ b/vespa-documentgen-plugin/etc/complex/common.sd @@ -17,13 +17,19 @@ search common { indexing: summary } field weight type float { - indexing: attribute | summary + indexing { + input weight * 10 | attribute | summary; + } } field w1 type float { - indexing: summary + indexing { + input weight * 6 + input w1 | summary; + } } field w2 type float { - indexing: summary + indexing { + input w2 + input weight | summary; + } } field did type string { indexing: attribute|index|summary diff --git a/vespa-documentgen-plugin/etc/complex/music2.sd b/vespa-documentgen-plugin/etc/complex/music2.sd index 2e2d96ecdec..5657580e622 100644 --- a/vespa-documentgen-plugin/etc/complex/music2.sd +++ b/vespa-documentgen-plugin/etc/complex/music2.sd @@ -56,7 +56,7 @@ search music2 { } field didinteger type array { - indexing: input did | split " " | for_each { to_int } | attribute + indexing: input did | split " " | attribute } rank-profile default { diff --git a/vespa-documentgen-plugin/etc/localapp/common.sd b/vespa-documentgen-plugin/etc/localapp/common.sd index 724897b4e7f..ada7ce7436a 100644 --- a/vespa-documentgen-plugin/etc/localapp/common.sd +++ b/vespa-documentgen-plugin/etc/localapp/common.sd @@ -17,13 +17,19 @@ search common { indexing: summary } field weight type float { - indexing: attribute|summary + indexing { + input weight * 10 | attribute | summary; + } } field w1 type float { - indexing: summary + indexing { + input weight * 6 + input w1 | summary; + } } field w2 type float { - indexing: summary + indexing { + input w2 + input weight | summary; + } } field did type string { indexing: attribute|index|summary diff --git a/vespa-documentgen-plugin/etc/localapp/music.sd b/vespa-documentgen-plugin/etc/localapp/music.sd index e00e046f511..0cfe5cf923a 100644 --- a/vespa-documentgen-plugin/etc/localapp/music.sd +++ b/vespa-documentgen-plugin/etc/localapp/music.sd @@ -51,7 +51,7 @@ search music { } field didinteger type array { - indexing: input did | split " " | for_each { to_int } | attribute + indexing: input did | split " " | attribute } rank-profile default { diff --git a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java index 309b9b73aa6..eab3983dc69 100644 --- a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java +++ b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java @@ -109,7 +109,7 @@ public class DocumentGenMojo extends AbstractMojo { public boolean accept(File dir, String name) { return name.endsWith(".sd"); }}); - SearchBuilder builder = new SearchBuilder(); + SearchBuilder builder = new UnprocessingSearchBuilder(); for (File f : sdFiles) { try { long modTime = f.lastModified(); diff --git a/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java b/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java index b21f38c586a..a9a5893cf96 100644 --- a/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java +++ b/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java @@ -33,7 +33,6 @@ public class DocumentGenTest { mojo.execute(new File("etc/complex/"), new File("target/generated-test-sources/vespa-documentgen-plugin/"), "com.yahoo.vespa.document"); Map searches = mojo.getSearches(); assertEquals(searches.get("video").getDocument("video").getField("weight").getDataType(), DataType.FLOAT); - assertEquals(searches.get("book").getDocument("book").getField("sw1").getDataType(), DataType.FLOAT); assertTrue(searches.get("book").getDocument("book").getField("mystruct").getDataType() instanceof StructDataType); assertTrue(searches.get("book").getDocument("book").getField("mywsfloat").getDataType() instanceof WeightedSetDataType); assertTrue(((WeightedSetDataType)(searches.get("book").getDocument("book").getField("mywsfloat").getDataType())).getNestedType() == DataType.FLOAT); -- cgit v1.2.3 From d369f95e31036c3db3d88874c18f4106c509f4cc Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 14 Sep 2018 15:36:35 +0200 Subject: Revert "Revert "Use a normal SearchBuilder to get all sanity checks and preprocessing…"" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vespa-documentgen-plugin/etc/complex/book.sd | 2 +- vespa-documentgen-plugin/etc/complex/common.sd | 12 +++--------- vespa-documentgen-plugin/etc/complex/music2.sd | 2 +- vespa-documentgen-plugin/etc/localapp/common.sd | 12 +++--------- vespa-documentgen-plugin/etc/localapp/music.sd | 2 +- .../src/main/java/com/yahoo/vespa/DocumentGenMojo.java | 2 +- .../src/test/java/com/yahoo/vespa/DocumentGenTest.java | 1 + 7 files changed, 11 insertions(+), 22 deletions(-) (limited to 'vespa-documentgen-plugin') diff --git a/vespa-documentgen-plugin/etc/complex/book.sd b/vespa-documentgen-plugin/etc/complex/book.sd index 2635ebe9881..16bf4447979 100644 --- a/vespa-documentgen-plugin/etc/complex/book.sd +++ b/vespa-documentgen-plugin/etc/complex/book.sd @@ -30,7 +30,7 @@ search book { attribute: prefetch } - field mynestedwsfloat type weightedset> {} + field mynestedwsfloat type weightedset {} field myarrayint type array { indexing: attribute diff --git a/vespa-documentgen-plugin/etc/complex/common.sd b/vespa-documentgen-plugin/etc/complex/common.sd index 0764421ac8d..e0505eba05b 100644 --- a/vespa-documentgen-plugin/etc/complex/common.sd +++ b/vespa-documentgen-plugin/etc/complex/common.sd @@ -17,19 +17,13 @@ search common { indexing: summary } field weight type float { - indexing { - input weight * 10 | attribute | summary; - } + indexing: attribute | summary } field w1 type float { - indexing { - input weight * 6 + input w1 | summary; - } + indexing: summary } field w2 type float { - indexing { - input w2 + input weight | summary; - } + indexing: summary } field did type string { indexing: attribute|index|summary diff --git a/vespa-documentgen-plugin/etc/complex/music2.sd b/vespa-documentgen-plugin/etc/complex/music2.sd index 5657580e622..2e2d96ecdec 100644 --- a/vespa-documentgen-plugin/etc/complex/music2.sd +++ b/vespa-documentgen-plugin/etc/complex/music2.sd @@ -56,7 +56,7 @@ search music2 { } field didinteger type array { - indexing: input did | split " " | attribute + indexing: input did | split " " | for_each { to_int } | attribute } rank-profile default { diff --git a/vespa-documentgen-plugin/etc/localapp/common.sd b/vespa-documentgen-plugin/etc/localapp/common.sd index ada7ce7436a..724897b4e7f 100644 --- a/vespa-documentgen-plugin/etc/localapp/common.sd +++ b/vespa-documentgen-plugin/etc/localapp/common.sd @@ -17,19 +17,13 @@ search common { indexing: summary } field weight type float { - indexing { - input weight * 10 | attribute | summary; - } + indexing: attribute|summary } field w1 type float { - indexing { - input weight * 6 + input w1 | summary; - } + indexing: summary } field w2 type float { - indexing { - input w2 + input weight | summary; - } + indexing: summary } field did type string { indexing: attribute|index|summary diff --git a/vespa-documentgen-plugin/etc/localapp/music.sd b/vespa-documentgen-plugin/etc/localapp/music.sd index 0cfe5cf923a..e00e046f511 100644 --- a/vespa-documentgen-plugin/etc/localapp/music.sd +++ b/vespa-documentgen-plugin/etc/localapp/music.sd @@ -51,7 +51,7 @@ search music { } field didinteger type array { - indexing: input did | split " " | attribute + indexing: input did | split " " | for_each { to_int } | attribute } rank-profile default { diff --git a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java index eab3983dc69..309b9b73aa6 100644 --- a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java +++ b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java @@ -109,7 +109,7 @@ public class DocumentGenMojo extends AbstractMojo { public boolean accept(File dir, String name) { return name.endsWith(".sd"); }}); - SearchBuilder builder = new UnprocessingSearchBuilder(); + SearchBuilder builder = new SearchBuilder(); for (File f : sdFiles) { try { long modTime = f.lastModified(); diff --git a/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java b/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java index a9a5893cf96..b21f38c586a 100644 --- a/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java +++ b/vespa-documentgen-plugin/src/test/java/com/yahoo/vespa/DocumentGenTest.java @@ -33,6 +33,7 @@ public class DocumentGenTest { mojo.execute(new File("etc/complex/"), new File("target/generated-test-sources/vespa-documentgen-plugin/"), "com.yahoo.vespa.document"); Map searches = mojo.getSearches(); assertEquals(searches.get("video").getDocument("video").getField("weight").getDataType(), DataType.FLOAT); + assertEquals(searches.get("book").getDocument("book").getField("sw1").getDataType(), DataType.FLOAT); assertTrue(searches.get("book").getDocument("book").getField("mystruct").getDataType() instanceof StructDataType); assertTrue(searches.get("book").getDocument("book").getField("mywsfloat").getDataType() instanceof WeightedSetDataType); assertTrue(((WeightedSetDataType)(searches.get("book").getDocument("book").getField("mywsfloat").getDataType())).getNestedType() == DataType.FLOAT); -- cgit v1.2.3 From e0eff2edc1bd975f34759618c8023498f70561e6 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 14 Sep 2018 17:26:28 +0200 Subject: Ensure that we do not get duplicates or have conflicting field definitions when using multiple inheritance. --- vespa-documentgen-plugin/etc/complex/common2.sd | 9 +++++ vespa-documentgen-plugin/etc/complex/music3.sd | 8 ++++ .../main/java/com/yahoo/vespa/DocumentGenMojo.java | 46 +++++++++++++++++----- 3 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 vespa-documentgen-plugin/etc/complex/common2.sd create mode 100644 vespa-documentgen-plugin/etc/complex/music3.sd (limited to 'vespa-documentgen-plugin') diff --git a/vespa-documentgen-plugin/etc/complex/common2.sd b/vespa-documentgen-plugin/etc/complex/common2.sd new file mode 100644 index 00000000000..e32d3ed6751 --- /dev/null +++ b/vespa-documentgen-plugin/etc/complex/common2.sd @@ -0,0 +1,9 @@ +# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +search common2 { + document { + field com2 type string { + + } + } +} + diff --git a/vespa-documentgen-plugin/etc/complex/music3.sd b/vespa-documentgen-plugin/etc/complex/music3.sd new file mode 100644 index 00000000000..65f37029d04 --- /dev/null +++ b/vespa-documentgen-plugin/etc/complex/music3.sd @@ -0,0 +1,8 @@ +# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +search music3 { + document music3 inherits music2, common2 { + field mu3 type string { + + } + } +} diff --git a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java index 309b9b73aa6..acefa3fa461 100644 --- a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java +++ b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa; +import com.yahoo.collections.Pair; import com.yahoo.document.*; import com.yahoo.document.annotation.AnnotationReferenceDataType; import com.yahoo.document.annotation.AnnotationType; @@ -405,7 +406,9 @@ public class DocumentGenMojo extends AbstractMojo { */ private void exportDocumentClass(NewDocumentType docType, Writer out, String packageName) throws IOException { String className = className(docType.getName()); - String superType = javaSuperType(docType); + Pair extendInfo = javaSuperType(docType); + String superType = extendInfo.getFirst(); + Boolean multiExtends = extendInfo.getSecond(); out.write( "package "+packageName+";\n\n" + exportInnerImportsFromSuperTypes(docType, packageName) + @@ -441,12 +444,14 @@ public class DocumentGenMojo extends AbstractMojo { exportStructTypeGetter(docType.getName()+".header", docType.allHeader().getFields(), out, 1, "getHeaderStructType", "com.yahoo.document.StructDataType"); exportStructTypeGetter(docType.getName()+".body", docType.allBody().getFields(), out, 1, "getBodyStructType", "com.yahoo.document.StructDataType"); - exportExtendedStructTypeGetter(className, docType.getName(), docType.getAllFields(), out, 1, "getDocumentType", "com.yahoo.document.DocumentType"); - exportCopyConstructor(className, docType.getAllFields(), out, 1, true); - exportFieldsAndAccessors(className, "com.yahoo.document.Document".equals(superType) ? docType.getAllFields() : docType.getFields(), out, 1, true); - exportDocumentMethods(docType.getAllFields(), out, 1); - exportHashCode(docType.getAllFields(), out, 1, "(getDataType() != null ? getDataType().hashCode() : 0) + getId().hashCode()"); - exportEquals(className, docType.getAllFields(), out, 1); + Collection allUniqueFields = getAllUniqueFields(multiExtends, docType.getAllFields()); + exportExtendedStructTypeGetter(className, docType.getName(), allUniqueFields, out, 1, "getDocumentType", "com.yahoo.document.DocumentType"); + exportCopyConstructor(className, allUniqueFields, out, 1, true); + + exportFieldsAndAccessors(className, "com.yahoo.document.Document".equals(superType) ? allUniqueFields : docType.getFields(), out, 1, true); + exportDocumentMethods(allUniqueFields, out, 1); + exportHashCode(allUniqueFields, out, 1, "(getDataType() != null ? getDataType().hashCode() : 0) + getId().hashCode()"); + exportEquals(className, allUniqueFields, out, 1); Set exportedStructs = exportStructTypes(docType.getTypes(), out, 1, null); docTypes.put(docType.getName(), packageName+"."+className); for (DataType exportedStruct : exportedStructs) { @@ -455,15 +460,36 @@ public class DocumentGenMojo extends AbstractMojo { out.write("}\n"); } + private Collection getAllUniqueFields(Boolean multipleInheritance, Collection allFields) { + if (multipleInheritance) { + Map seen = new HashMap<>(); + List unique = new ArrayList<>(allFields.size()); + for (Field f : allFields) { + if (seen.containsKey(f.getName())) { + if ( ! f.equals(seen.get(f.getName()))) { + throw new IllegalArgumentException("Field '" + f.getName() + "' has conflicting definitions in multiple inheritance." + + "First defined as '" + seen.get(f.getName()) + "', then as '" + f + "'."); + } + } else { + unique.add(f); + seen.put(f.getName(), f); + } + } + return unique; + } + return allFields; + } + /** * The Java class the class of the given type should inherit from. If the input type inherits from _one_ * other type, use that, otherwise Document. */ - private static String javaSuperType(NewDocumentType docType) { + private static Pair javaSuperType(NewDocumentType docType) { String ret = "com.yahoo.document.Document"; Collection specInheriteds = specificInheriteds(docType); - if (!specInheriteds.isEmpty() && singleInheritance(specInheriteds)) ret = className(specInheriteds.iterator().next().getName()); - return ret; + boolean singleExtends = singleInheritance(specInheriteds); + if (!specInheriteds.isEmpty() && singleExtends) ret = className(specInheriteds.iterator().next().getName()); + return new Pair<>(ret, !singleExtends); } private static boolean singleInheritance(Collection specInheriteds) { -- cgit v1.2.3 From f8f4b0675e0010f6457c3183ff385cf7fe17821a Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Mon, 17 Sep 2018 22:41:44 +0200 Subject: Separate the processing.Processors into a minimal set and the rest. Only use the minimal set when generating the concrete document types. --- .../MinimalProcessingSearchBuilder.java | 16 +++++++++++++ .../com/yahoo/searchdefinition/SearchBuilder.java | 3 ++- .../processing/MinimalProcessing.java | 10 ++++++++ .../searchdefinition/processing/Processing.java | 27 ++++++++++++++-------- .../yahoo/searchdefinition/derived/IdTestCase.java | 2 +- .../derived/LiteralBoostTestCase.java | 2 +- .../derived/SummaryMapTestCase.java | 2 +- .../derived/TypeConversionTestCase.java | 2 +- .../processing/IndexingScriptRewriterTestCase.java | 2 +- vespa-documentgen-plugin/etc/complex/video.sd | 2 +- .../main/java/com/yahoo/vespa/DocumentGenMojo.java | 3 ++- 11 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 config-model/src/main/java/com/yahoo/searchdefinition/MinimalProcessingSearchBuilder.java create mode 100644 config-model/src/main/java/com/yahoo/searchdefinition/processing/MinimalProcessing.java (limited to 'vespa-documentgen-plugin') diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/MinimalProcessingSearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/MinimalProcessingSearchBuilder.java new file mode 100644 index 00000000000..1e8f6cb91b9 --- /dev/null +++ b/config-model/src/main/java/com/yahoo/searchdefinition/MinimalProcessingSearchBuilder.java @@ -0,0 +1,16 @@ +package com.yahoo.searchdefinition; + +import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.searchdefinition.processing.MinimalProcessing; +import com.yahoo.vespa.model.container.search.QueryProfiles; + +public class MinimalProcessingSearchBuilder extends SearchBuilder { + public MinimalProcessingSearchBuilder() { + super(); + } + + @Override + protected void process(Search search, DeployLogger deployLogger, QueryProfiles queryProfiles, boolean validate) { + new MinimalProcessing().process(search, deployLogger, getRankProfileRegistry(), queryProfiles, validate); + } +} diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java index 91f86bb1c2a..592efcc2d85 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java @@ -15,6 +15,7 @@ import com.yahoo.searchdefinition.parser.ParseException; import com.yahoo.searchdefinition.parser.SDParser; import com.yahoo.searchdefinition.parser.SimpleCharStream; import com.yahoo.searchdefinition.parser.TokenMgrException; +import com.yahoo.searchdefinition.processing.MinimalProcessing; import com.yahoo.searchdefinition.processing.Processing; import com.yahoo.vespa.documentmodel.DocumentModel; import com.yahoo.vespa.model.container.search.QueryProfiles; @@ -250,7 +251,7 @@ public class SearchBuilder { * #build()} method so that subclasses can choose not to build anything. */ protected void process(Search search, DeployLogger deployLogger, QueryProfiles queryProfiles, boolean validate) { - Processing.process(search, deployLogger, rankProfileRegistry, queryProfiles, validate); + new Processing().process(search, deployLogger, rankProfileRegistry, queryProfiles, validate); } /** diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MinimalProcessing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MinimalProcessing.java new file mode 100644 index 00000000000..0fee844ecbc --- /dev/null +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MinimalProcessing.java @@ -0,0 +1,10 @@ +package com.yahoo.searchdefinition.processing; + +import java.util.Collection; + +public class MinimalProcessing extends Processing { + @Override + protected Collection createProcessorFactories() { + return minimalSetOfProcessors(); + } +} diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java index 19025d37f8c..9b4b74d07d8 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java @@ -7,7 +7,9 @@ import com.yahoo.searchdefinition.Search; import com.yahoo.searchdefinition.processing.multifieldresolver.RankProfileTypeSettingsProcessor; import com.yahoo.vespa.model.container.search.QueryProfiles; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; /** @@ -18,9 +20,7 @@ import java.util.List; */ public class Processing { - private static final List factories = createProcessorFactories(); - - private static List createProcessorFactories() { + protected Collection minimalSetOfProcessors() { return Arrays.asList( SearchMustHaveDocument::new, UrlFieldValidator::new, @@ -74,7 +74,11 @@ public class Processing { RankProfileTypeSettingsProcessor::new, ReferenceFieldsProcessor::new, FastAccessValidator::new, - ReservedMacroNames::new, + ReservedMacroNames::new); + } + + private Collection extendedSetOfProcessors() { + return Arrays.asList( RankingExpressionTypeValidator::new, // These should be last. @@ -82,6 +86,12 @@ public class Processing { IndexingValues::new); } + protected Collection createProcessorFactories() { + List processorFactories = new ArrayList<>(minimalSetOfProcessors()); + processorFactories.addAll(extendedSetOfProcessors()); + return processorFactories; + } + /** * Runs all search processors on the given {@link Search} object. These will modify the search object, possibly * exchanging it with another, as well as its document types. @@ -91,11 +101,10 @@ public class Processing { * @param rankProfileRegistry a {@link com.yahoo.searchdefinition.RankProfileRegistry} * @param queryProfiles The query profiles contained in the application this search is part of. */ - public static void process(Search search, - DeployLogger deployLogger, - RankProfileRegistry rankProfileRegistry, - QueryProfiles queryProfiles, - boolean validate) { + public void process(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, + QueryProfiles queryProfiles, boolean validate) + { + Collection factories = createProcessorFactories(); search.process(); factories.stream() .map(factory -> factory.create(search, deployLogger, rankProfileRegistry, queryProfiles)) diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java index 274cf06aa37..3ef8591d203 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/IdTestCase.java @@ -31,7 +31,7 @@ public class IdTestCase extends AbstractExportingTestCase { uri.parseIndexingScript("{ summary | index }"); document.addField(uri); - Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true); + new Processing().process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true); assertNull(document.getField("uri")); assertNull(document.getField("Uri")); diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java index 94d0bf6329a..fad80164135 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java @@ -41,7 +41,7 @@ public class LiteralBoostTestCase extends AbstractExportingTestCase { rankProfileRegistry.add(other); other.addRankSetting(new RankProfile.RankSetting("a", RankProfile.RankSetting.Type.LITERALBOOST, 333)); - Processing.process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles(), true); + new Processing().process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles(), true); DerivedConfiguration derived=new DerivedConfiguration(search, rankProfileRegistry, new QueryProfileRegistry(), new ImportedModels()); // Check attribute fields diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java index 0e02970280e..9d19d4b154c 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryMapTestCase.java @@ -76,7 +76,7 @@ public class SummaryMapTestCase extends SearchDefinitionTestCase { String fieldName = "location"; SDField field = document.addField(fieldName, PositionDataType.INSTANCE); field.parseIndexingScript("{ attribute | summary }"); - Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true); + new Processing().process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true); SummaryMap summaryMap = new SummaryMap(search, new Summaries(search, new BaseDeployLogger())); Iterator transforms = summaryMap.resultTransformIterator(); diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java index 26b100a2d96..17cc9aaae4c 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/TypeConversionTestCase.java @@ -33,7 +33,7 @@ public class TypeConversionTestCase extends SearchDefinitionTestCase { a.parseIndexingScript("{ index }"); document.addField(a); - Processing.process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles(), true); + new Processing().process(search, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles(), true); DerivedConfiguration derived = new DerivedConfiguration(search, rankProfileRegistry, new QueryProfileRegistry(), new ImportedModels()); IndexInfo indexInfo = derived.getIndexInfo(); assertFalse(indexInfo.hasCommand("default", "compact-to-term")); diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java index 876e852aea1..2af3477fa62 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingScriptRewriterTestCase.java @@ -155,7 +155,7 @@ public class IndexingScriptRewriterTestCase extends SearchDefinitionTestCase { sdoc.addField(unprocessedField); Search search = new Search("test", null); search.addDocument(sdoc); - Processing.process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true); + new Processing().process(search, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(), true); return unprocessedField.getIndexingScript(); } diff --git a/vespa-documentgen-plugin/etc/complex/video.sd b/vespa-documentgen-plugin/etc/complex/video.sd index dbaba54cc45..0b0298a162c 100644 --- a/vespa-documentgen-plugin/etc/complex/video.sd +++ b/vespa-documentgen-plugin/etc/complex/video.sd @@ -37,7 +37,7 @@ search video { rank-profile default { first-phase { - expression: nativeRank + expression: file:non-existing.expression } } rank-profile rp1 inherits default { diff --git a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java index acefa3fa461..b7c955bd83b 100644 --- a/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java +++ b/vespa-documentgen-plugin/src/main/java/com/yahoo/vespa/DocumentGenMojo.java @@ -7,6 +7,7 @@ import com.yahoo.document.annotation.AnnotationReferenceDataType; import com.yahoo.document.annotation.AnnotationType; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.documentmodel.VespaDocumentType; +import com.yahoo.searchdefinition.MinimalProcessingSearchBuilder; import com.yahoo.searchdefinition.Search; import com.yahoo.searchdefinition.SearchBuilder; import com.yahoo.searchdefinition.UnprocessingSearchBuilder; @@ -110,7 +111,7 @@ public class DocumentGenMojo extends AbstractMojo { public boolean accept(File dir, String name) { return name.endsWith(".sd"); }}); - SearchBuilder builder = new SearchBuilder(); + SearchBuilder builder = new MinimalProcessingSearchBuilder(); for (File f : sdFiles) { try { long modTime = f.lastModified(); -- cgit v1.2.3