[ 
https://issues.apache.org/jira/browse/LUCENE-3616?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13428594#comment-13428594
 ] 

Chris Male commented on LUCENE-3616:
------------------------------------

bq. In my opinion if i have a ShortDocValuesField, it shouldnt have a setReader 
method

Agreed.  The setABC() methods are extremely confusing and add another level of 
validation (using your example, we have to validate that you're not setting a 
Reader on a NumericField).

Perhaps we can re-arrange this a little.  If we genuinely feel there there are 
use cases out there that we haven't covered with the typed impls and that we 
don't want to cover, then why not make a GenericField or something, which is 
abstract and accepts just name, FieldType and maybe an Object value.  We can 
then emphasis in documentation that it is expert only, should only be 
subclassed in the extremely rare situations that our typed impls are 
insufficient, and won't be validated so buyer-beware kind of thing.  

We can then gut Field down to a very simple abstract class / interface, and 
promote our typed impls to being 1st class and the recommended entry points for 
users.

Of course if we feel we have provided adequate support through the typed impls, 
then we can skip straight to the gutting.
                
> Illegal Field Configurations should throw exceptions
> ----------------------------------------------------
>
>                 Key: LUCENE-3616
>                 URL: https://issues.apache.org/jira/browse/LUCENE-3616
>             Project: Lucene - Core
>          Issue Type: Bug
>    Affects Versions: 4.0-ALPHA
>            Reporter: Grant Ingersoll
>            Assignee: Michael McCandless
>            Priority: Minor
>         Attachments: LUCENE-3616.patch
>
>
> When working on LUCENE-3615, I came across:
> {quote}
> java.lang.IllegalArgumentException: field field is stored but does not have 
> binaryValue, stringValue nor numericValue
>       at 
> org.apache.lucene.index.codecs.DefaultStoredFieldsWriter.writeField(DefaultStoredFieldsWriter.java:177)
>       at 
> org.apache.lucene.index.StoredFieldsConsumer.finishDocument(StoredFieldsConsumer.java:119)
>       at 
> org.apache.lucene.index.DocFieldProcessor.finishDocument(DocFieldProcessor.java:295)
>       at 
> org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:255)
>       at 
> org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:380)
>       at 
> org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1480)
>       at 
> org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1242)
>       at 
> org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1223)
>       at org.apache.lucene.index.Test2BTerms.test2BTerms(Test2BTerms.java:194)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>       at org.junit.rules.TestWatchman$1.evaluate(TestWatchman.java:48)
>       at 
> org.apache.lucene.util.LuceneTestCase$3$1.evaluate(LuceneTestCase.java:525)
>       at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>       at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>       at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
>       at 
> org.apache.lucene.util.LuceneTestCaseRunner.runChild(LuceneTestCaseRunner.java:168)
>       at 
> org.apache.lucene.util.LuceneTestCaseRunner.runChild(LuceneTestCaseRunner.java:47)
>       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>       at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>       at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>       at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>       at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>       at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
>       at 
> com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71)
>       at 
> com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199)
>       at 
> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
> {quote}
> which is due to the using Textfield.TYPE_STORED when using a TokenStream.  
> Since this is an illegal combination, we should throw an exception upon 
> construction of the Field, not later when actually trying to do the indexing.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to