You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/04/28 20:13:16 UTC
svn commit: r1590731 - in /lucene/dev/branches/lucene5611:
lucene/core/src/java/org/apache/lucene/analysis/
lucene/core/src/java/org/apache/lucene/index/
lucene/core/src/java/org/apache/lucene/util/
lucene/core/src/test/org/apache/lucene/analysis/ luce...
Author: rmuir
Date: Mon Apr 28 18:13:15 2014
New Revision: 1590731
URL: http://svn.apache.org/r1590731
Log:
LUCENE-5611: fix the crazy getAttribute API to prevent double lookups and extra code everywhere
Modified:
lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/analysis/TokenStream.java
lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java
lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/AttributeSource.java
lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java
lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/analysis/TestNumericTokenStream.java
lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java
lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/util/TestAttributeSource.java
lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java
lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/ValidatingTokenFilter.java
lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/JsonPreAnalyzedParser.java
lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/SimplePreAnalyzedParser.java
Modified: lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/analysis/TokenStream.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/analysis/TokenStream.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/analysis/TokenStream.java (original)
+++ lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/analysis/TokenStream.java Mon Apr 28 18:13:15 2014
@@ -171,8 +171,9 @@ public abstract class TokenStream extend
*/
public void end() throws IOException {
clearAttributes(); // LUCENE-3849: don't consume dirty atts
- if (hasAttribute(PositionIncrementAttribute.class)) {
- getAttribute(PositionIncrementAttribute.class).setPositionIncrement(0);
+ PositionIncrementAttribute posIncAtt = getAttribute(PositionIncrementAttribute.class);
+ if (posIncAtt != null) {
+ posIncAtt.setPositionIncrement(0);
}
}
Modified: lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java (original)
+++ lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java Mon Apr 28 18:13:15 2014
@@ -547,18 +547,10 @@ final class DefaultIndexingChain extends
if (invertState.attributeSource != stream) {
// EmptyTokenStream gets angry otherwise:
- if (stream.hasAttribute(TermToBytesRefAttribute.class)) {
- invertState.termAttribute = stream.getAttribute(TermToBytesRefAttribute.class);
- } else {
- invertState.termAttribute = null;
- }
+ invertState.termAttribute = stream.getAttribute(TermToBytesRefAttribute.class);
invertState.posIncrAttribute = stream.addAttribute(PositionIncrementAttribute.class);
invertState.offsetAttribute = stream.addAttribute(OffsetAttribute.class);
- if (stream.hasAttribute(PayloadAttribute.class)) {
- invertState.payloadAttribute = stream.getAttribute(PayloadAttribute.class);
- } else {
- invertState.payloadAttribute = null;
- }
+ invertState.payloadAttribute = stream.getAttribute(PayloadAttribute.class);
invertState.attributeSource = stream;
}
Modified: lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/AttributeSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/AttributeSource.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/AttributeSource.java (original)
+++ lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/AttributeSource.java Mon Apr 28 18:13:15 2014
@@ -287,22 +287,20 @@ public class AttributeSource {
}
/**
- * The caller must pass in a Class<? extends Attribute> value.
* Returns the instance of the passed in Attribute contained in this AttributeSource
+ * <p>
+ * The caller must pass in a Class<? extends Attribute> value.
*
- * @throws IllegalArgumentException if this AttributeSource does not contain the
- * Attribute. It is recommended to always use {@link #addAttribute} even in consumers
- * of TokenStreams, because you cannot know if a specific TokenStream really uses
- * a specific Attribute. {@link #addAttribute} will automatically make the attribute
- * available. If you want to only use the attribute, if it is available (to optimize
- * consuming), use {@link #hasAttribute}.
+ * @returns instance of the passed in Attribute, or {@code null} if this AttributeSource
+ * does not contain the Attribute. It is recommended to always use
+ * {@link #addAttribute} even in consumers of TokenStreams, because you cannot
+ * know if a specific TokenStream really uses a specific Attribute.
+ * {@link #addAttribute} will automatically make the attribute available.
+ * If you want to only use the attribute, if it is available (to optimize
+ * consuming), use {@link #hasAttribute}.
*/
public final <T extends Attribute> T getAttribute(Class<T> attClass) {
- AttributeImpl attImpl = attributes.get(attClass);
- if (attImpl == null) {
- throw new IllegalArgumentException("This AttributeSource does not have the attribute '" + attClass.getName() + "'.");
- }
- return attClass.cast(attImpl);
+ return attClass.cast(attributes.get(attClass));
}
private State getCurrentState() {
Modified: lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java (original)
+++ lucene/dev/branches/lucene5611/lucene/core/src/java/org/apache/lucene/util/QueryBuilder.java Mon Apr 28 18:13:15 2014
@@ -207,12 +207,8 @@ public class QueryBuilder {
buffer = new CachingTokenFilter(source);
buffer.reset();
- if (buffer.hasAttribute(TermToBytesRefAttribute.class)) {
- termAtt = buffer.getAttribute(TermToBytesRefAttribute.class);
- }
- if (buffer.hasAttribute(PositionIncrementAttribute.class)) {
- posIncrAtt = buffer.getAttribute(PositionIncrementAttribute.class);
- }
+ termAtt = buffer.getAttribute(TermToBytesRefAttribute.class);
+ posIncrAtt = buffer.getAttribute(PositionIncrementAttribute.class);
if (termAtt != null) {
try {
Modified: lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/analysis/TestNumericTokenStream.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/analysis/TestNumericTokenStream.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/analysis/TestNumericTokenStream.java (original)
+++ lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/analysis/TestNumericTokenStream.java Mon Apr 28 18:13:15 2014
@@ -31,10 +31,12 @@ public class TestNumericTokenStream exte
public void testLongStream() throws Exception {
final NumericTokenStream stream=new NumericTokenStream().setLongValue(lvalue);
- // use getAttribute to test if attributes really exist, if not an IAE will be throwed
final TermToBytesRefAttribute bytesAtt = stream.getAttribute(TermToBytesRefAttribute.class);
+ assertNotNull(bytesAtt);
final TypeAttribute typeAtt = stream.getAttribute(TypeAttribute.class);
+ assertNotNull(typeAtt);
final NumericTokenStream.NumericTermAttribute numericAtt = stream.getAttribute(NumericTokenStream.NumericTermAttribute.class);
+ assertNotNull(numericAtt);
final BytesRef bytes = bytesAtt.getBytesRef();
stream.reset();
assertEquals(64, numericAtt.getValueSize());
@@ -53,10 +55,12 @@ public class TestNumericTokenStream exte
public void testIntStream() throws Exception {
final NumericTokenStream stream=new NumericTokenStream().setIntValue(ivalue);
- // use getAttribute to test if attributes really exist, if not an IAE will be throwed
final TermToBytesRefAttribute bytesAtt = stream.getAttribute(TermToBytesRefAttribute.class);
+ assertNotNull(bytesAtt);
final TypeAttribute typeAtt = stream.getAttribute(TypeAttribute.class);
+ assertNotNull(typeAtt);
final NumericTokenStream.NumericTermAttribute numericAtt = stream.getAttribute(NumericTokenStream.NumericTermAttribute.class);
+ assertNotNull(numericAtt);
final BytesRef bytes = bytesAtt.getBytesRef();
stream.reset();
assertEquals(32, numericAtt.getValueSize());
Modified: lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java (original)
+++ lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/index/TestStressIndexing2.java Mon Apr 28 18:13:15 2014
@@ -639,8 +639,8 @@ public class TestStressIndexing2 extends
int freq1 = dpEnum1.freq();
int freq2 = dpEnum2.freq();
assertEquals(freq1, freq2);
- OffsetAttribute offsetAtt1 = dpEnum1.attributes().hasAttribute(OffsetAttribute.class) ? dpEnum1.attributes().getAttribute(OffsetAttribute.class) : null;
- OffsetAttribute offsetAtt2 = dpEnum2.attributes().hasAttribute(OffsetAttribute.class) ? dpEnum2.attributes().getAttribute(OffsetAttribute.class) : null;
+ OffsetAttribute offsetAtt1 = dpEnum1.attributes().getAttribute(OffsetAttribute.class);
+ OffsetAttribute offsetAtt2 = dpEnum2.attributes().getAttribute(OffsetAttribute.class);
if (offsetAtt1 != null) {
assertNotNull(offsetAtt2);
Modified: lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/util/TestAttributeSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/util/TestAttributeSource.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/util/TestAttributeSource.java (original)
+++ lucene/dev/branches/lucene5611/lucene/core/src/test/org/apache/lucene/util/TestAttributeSource.java Mon Apr 28 18:13:15 2014
@@ -90,7 +90,9 @@ public class TestAttributeSource extends
assertFalse("No more attributes", it.hasNext());
final FlagsAttribute flagsAtt2 = clone.getAttribute(FlagsAttribute.class);
+ assertNotNull(flagsAtt2);
final TypeAttribute typeAtt2 = clone.getAttribute(TypeAttribute.class);
+ assertNotNull(typeAtt2);
assertNotSame("FlagsAttribute of original and clone must be different instances", flagsAtt2, flagsAtt);
assertNotSame("TypeAttribute of original and clone must be different instances", typeAtt2, typeAtt);
assertEquals("FlagsAttribute of original and clone must be equal", flagsAtt2, flagsAtt);
Modified: lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java (original)
+++ lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java Mon Apr 28 18:13:15 2014
@@ -685,11 +685,11 @@ public abstract class BaseTokenStreamTes
int remainder = random.nextInt(10);
Reader reader = new StringReader(text);
TokenStream ts = a.tokenStream("dummy", useCharFilter ? new MockCharFilter(reader, remainder) : reader);
- CharTermAttribute termAtt = ts.hasAttribute(CharTermAttribute.class) ? ts.getAttribute(CharTermAttribute.class) : null;
- OffsetAttribute offsetAtt = ts.hasAttribute(OffsetAttribute.class) ? ts.getAttribute(OffsetAttribute.class) : null;
- PositionIncrementAttribute posIncAtt = ts.hasAttribute(PositionIncrementAttribute.class) ? ts.getAttribute(PositionIncrementAttribute.class) : null;
- PositionLengthAttribute posLengthAtt = ts.hasAttribute(PositionLengthAttribute.class) ? ts.getAttribute(PositionLengthAttribute.class) : null;
- TypeAttribute typeAtt = ts.hasAttribute(TypeAttribute.class) ? ts.getAttribute(TypeAttribute.class) : null;
+ CharTermAttribute termAtt = ts.getAttribute(CharTermAttribute.class);
+ OffsetAttribute offsetAtt = ts.getAttribute(OffsetAttribute.class);
+ PositionIncrementAttribute posIncAtt = ts.getAttribute(PositionIncrementAttribute.class);
+ PositionLengthAttribute posLengthAtt = ts.getAttribute(PositionLengthAttribute.class);
+ TypeAttribute typeAtt = ts.getAttribute(TypeAttribute.class);
List<String> tokens = new ArrayList<>();
List<String> types = new ArrayList<>();
List<Integer> positions = new ArrayList<>();
Modified: lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/ValidatingTokenFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/ValidatingTokenFilter.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/ValidatingTokenFilter.java (original)
+++ lucene/dev/branches/lucene5611/lucene/test-framework/src/java/org/apache/lucene/analysis/ValidatingTokenFilter.java Mon Apr 28 18:13:15 2014
@@ -47,23 +47,14 @@ public final class ValidatingTokenFilter
private final Map<Integer,Integer> posToStartOffset = new HashMap<>();
private final Map<Integer,Integer> posToEndOffset = new HashMap<>();
- private final PositionIncrementAttribute posIncAtt = getAttrIfExists(PositionIncrementAttribute.class);
- private final PositionLengthAttribute posLenAtt = getAttrIfExists(PositionLengthAttribute.class);
- private final OffsetAttribute offsetAtt = getAttrIfExists(OffsetAttribute.class);
- private final CharTermAttribute termAtt = getAttrIfExists(CharTermAttribute.class);
+ private final PositionIncrementAttribute posIncAtt = getAttribute(PositionIncrementAttribute.class);
+ private final PositionLengthAttribute posLenAtt = getAttribute(PositionLengthAttribute.class);
+ private final OffsetAttribute offsetAtt = getAttribute(OffsetAttribute.class);
+ private final CharTermAttribute termAtt = getAttribute(CharTermAttribute.class);
private final boolean offsetsAreCorrect;
private final String name;
- // Returns null if the attr wasn't already added
- private <A extends Attribute> A getAttrIfExists(Class<A> att) {
- if (hasAttribute(att)) {
- return getAttribute(att);
- } else {
- return null;
- }
- }
-
/** The name arg is used to identify this stage when
* throwing exceptions (useful if you have more than one
* instance in your chain). */
Modified: lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/JsonPreAnalyzedParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/JsonPreAnalyzedParser.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/JsonPreAnalyzedParser.java (original)
+++ lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/JsonPreAnalyzedParser.java Mon Apr 28 18:13:15 2014
@@ -230,10 +230,10 @@ public class JsonPreAnalyzedParser imple
Map<String,Object> tok = new TreeMap<>();
while (it.hasNext()) {
Class<? extends Attribute> cl = it.next();
- if (!ts.hasAttribute(cl)) {
+ Attribute att = ts.getAttribute(cl);
+ if (att == null) {
continue;
}
- Attribute att = ts.getAttribute(cl);
if (cl.isAssignableFrom(CharTermAttribute.class)) {
CharTermAttribute catt = (CharTermAttribute)att;
cTerm = new String(catt.buffer(), 0, catt.length());
Modified: lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/SimplePreAnalyzedParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/SimplePreAnalyzedParser.java?rev=1590731&r1=1590730&r2=1590731&view=diff
==============================================================================
--- lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/SimplePreAnalyzedParser.java (original)
+++ lucene/dev/branches/lucene5611/solr/core/src/java/org/apache/solr/schema/SimplePreAnalyzedParser.java Mon Apr 28 18:13:15 2014
@@ -482,10 +482,10 @@ public final class SimplePreAnalyzedPars
String tTerm = null;
while (it.hasNext()) {
Class<? extends Attribute> cl = it.next();
- if (!ts.hasAttribute(cl)) {
+ Attribute att = ts.getAttribute(cl);
+ if (att == null) {
continue;
}
- Attribute att = ts.getAttribute(cl);
if (cl.isAssignableFrom(CharTermAttribute.class)) {
CharTermAttribute catt = (CharTermAttribute)att;
cTerm = escape(catt.buffer(), catt.length());