You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Uwe Schindler (JIRA)" <ji...@apache.org> on 2010/01/04 00:18:55 UTC

[jira] Issue Comment Edited: (LUCENE-2183) Supplementary Character Handling in CharTokenizer

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

Uwe Schindler edited comment on LUCENE-2183 at 1/3/10 11:18 PM:
----------------------------------------------------------------

{quote}
There is only one exception where reflection is used... that is during ctor to determine if:

- you subclass a tokenizer that implements int-based methods 
- you have only implemented char-based methods 
- you request VERSION >= 3.1 
{quote}

With LUCENE-2188, this is easy and no performance problem. Just define two static final fields for both char-based methods and check in the ctor if this.getClass() overrides the char-based method. In this case throw UOE. The result is cached for the class and further instantiations of the same class will not use reflection anymore:

{code}
private static final OverrideableMethod<CharTokenizer> isTokenCharMethod=
    new OverrideableMethod<CharTokenizer>(CharTokenizer.class, "isTokenChar", char.class);
private static final OverrideableMethod<CharTokenizer> normalizeMethod=
    new OverrideableMethod<CharTokenizer>(CharTokenizer.class, "normalize", char.class);
...
public CharTokenizer(...) {
  super(...)
  if (matchVersion.onOrAfter(Version.LUCENE_31) && (
   isTokenCharMethod.isOverriddenBy(this.getClass()) || normalizeMethod.isOverriddenBy(this.getClass())
  ) throw new IAE("For matchVersion >= LUCENE_31, CharTokenizer subclasses must not override isTokenChar(char) or normalize(char)."):
}
{code}

      was (Author: thetaphi):
    {quote}
There is only one exception where reflection is used... that is during ctor to determine if:

- you subclass a tokenizer that implements int-based methods 
- you have only implemented char-based methods 
- you request VERSION >= 3.1 
{quote}

With LUCENE-2188, this is easy and no performance problem. Just define two static final fields for both char-based methods and check in the ctor if this.getClass() overrides the char-based method. In this case throw UOE. The result is cached for the class and further instantiations of the same class will not use reflection anymore:

{code}
private static final OverrideableMethod<CharTokenizer> isTokenCharMethod=
    new OverrideableMethod<CharTokenizer>(CharTokenizer.class, "isTokenChar", char.class);
private static final OverrideableMethod<CharTokenizer> normalizeMethod=
    new OverrideableMethod<CharTokenizer>(CharTokenizer.class, "normalize", char.class);
...
public CharTokenizer(...) {
  super(...)
  if (matchVersion.onOrAfter(Version.LUCENE_31) && (
   isTokenCharMethod.getOverrideDistance(this.getClass()) > 0 || normalizeMethod.getOverrideDistance(this.getClass()) > 0
  ) throw new IAE("For matchVersion >= LUCENE_31, CharTokenizer subclasses must not override isTokenChar(char) or normalize(char)."):
}
{code}
  
> Supplementary Character Handling in CharTokenizer
> -------------------------------------------------
>
>                 Key: LUCENE-2183
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2183
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Analysis
>            Reporter: Simon Willnauer
>             Fix For: 3.1
>
>         Attachments: LUCENE-2183.patch
>
>
> CharTokenizer is an abstract base class for all Tokenizers operating on a character level. Yet, those tokenizers still use char primitives instead of int codepoints. CharTokenizer should operate on codepoints and preserve bw compatibility. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org