LUCENE-1805: allow CloseableThreadLocal.set(null)

git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@803903 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael McCandless 2009-08-13 14:32:36 +00:00
parent f3bf13f480
commit 3cab215c2c
4 changed files with 55 additions and 25 deletions

View File

@ -470,6 +470,10 @@ Bug fixes
of the instances are correct. of the instances are correct.
(Mike McCandless, Mark Miller, Michael Busch) (Mike McCandless, Mark Miller, Michael Busch)
22. LUCENE-1805: CloseableThreadLocal did not allow a null Object in get(),
although it does allow it in set(Object). Fix get() to not assert the object
is not null. (Shai Erera via Mike McCandless)
New features New features
1. LUCENE-1411: Added expert API to open an IndexWriter on a prior 1. LUCENE-1411: Added expert API to open an IndexWriter on a prior

View File

@ -62,11 +62,7 @@ public class CloseableThreadLocal {
} else } else
return null; return null;
} else { } else {
Object v = weakRef.get(); return weakRef.get();
// This can never be null, because we hold a hard
// reference to the underlying object:
assert v != null;
return v;
} }
} }

View File

@ -1,20 +0,0 @@
package org.apache.lucene.index;
import org.apache.lucene.util.CloseableThreadLocal;
import org.apache.lucene.util.LuceneTestCase;
public class TestCloseableThreadLocal extends LuceneTestCase {
public static final String TEST_VALUE = "initvaluetest";
public void testInitValue() {
InitValueThreadLocal tl = new InitValueThreadLocal();
String str = (String)tl.get();
assertEquals(TEST_VALUE, str);
}
public class InitValueThreadLocal extends CloseableThreadLocal {
protected Object initialValue() {
return TEST_VALUE;
}
}
}

View File

@ -0,0 +1,50 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.util;
public class TestCloseableThreadLocal extends LuceneTestCase {
public static final String TEST_VALUE = "initvaluetest";
public void testInitValue() {
InitValueThreadLocal tl = new InitValueThreadLocal();
String str = (String)tl.get();
assertEquals(TEST_VALUE, str);
}
public void testNullValue() throws Exception {
// Tests that null can be set as a valid value (LUCENE-1805). This
// previously failed in get().
CloseableThreadLocal ctl = new CloseableThreadLocal();
ctl.set(null);
assertNull(ctl.get());
}
public void testDefaultValueWithoutSetting() throws Exception {
// LUCENE-1805: make sure default get returns null,
// twice in a row
CloseableThreadLocal ctl = new CloseableThreadLocal();
assertNull(ctl.get());
assertNull(ctl.get());
}
public class InitValueThreadLocal extends CloseableThreadLocal {
protected Object initialValue() {
return TEST_VALUE;
}
}
}