mirror of https://github.com/apache/lucene.git
LUCENE-4055: clear some nocommits
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene4055@1341513 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c510b3b2b9
commit
4208b5a905
|
@ -45,12 +45,13 @@ public abstract class Codec implements NamedSPILoader.NamedSPI {
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
public Codec(String name) {
|
public Codec(String name) {
|
||||||
|
NamedSPILoader.checkServiceName(name);
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns this codec's name */
|
/** Returns this codec's name */
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public final String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ package org.apache.lucene.codecs;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.lucene.index.SegmentInfo;
|
|
||||||
import org.apache.lucene.index.SegmentWriteState;
|
import org.apache.lucene.index.SegmentWriteState;
|
||||||
import org.apache.lucene.index.SegmentReadState;
|
import org.apache.lucene.index.SegmentReadState;
|
||||||
import org.apache.lucene.util.NamedSPILoader;
|
import org.apache.lucene.util.NamedSPILoader;
|
||||||
|
@ -40,14 +39,12 @@ public abstract class PostingsFormat implements NamedSPILoader.NamedSPI {
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
protected PostingsFormat(String name) {
|
protected PostingsFormat(String name) {
|
||||||
// nocommit: check that name is a-zA-Z0-9 and < some reasonable length
|
NamedSPILoader.checkServiceName(name);
|
||||||
// also fix this for Codec
|
|
||||||
// also make NamedSPILoader's map case-insensitive (like Charset)
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public final String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,9 +96,11 @@ public abstract class PerFieldPostingsFormat extends PostingsFormat {
|
||||||
formats.put(format, consumer);
|
formats.put(format, consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// nocommit we should only provide the "slice" of FIS
|
// TODO: we should only provide the "slice" of FIS
|
||||||
// that this PF actually sees ... then stuff like
|
// that this PF actually sees ... then stuff like
|
||||||
// .hasProx could work correctly?
|
// .hasProx could work correctly?
|
||||||
|
// NOTE: .hasProx is already broken in the same way for the non-perfield case,
|
||||||
|
// if there is a fieldinfo with prox that has no postings, you get a 0 byte file.
|
||||||
return consumer.addField(field);
|
return consumer.addField(field);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import java.util.ServiceLoader;
|
||||||
* Helper class for loading named SPIs from classpath (e.g. Codec, PostingsFormat).
|
* Helper class for loading named SPIs from classpath (e.g. Codec, PostingsFormat).
|
||||||
* @lucene.internal
|
* @lucene.internal
|
||||||
*/
|
*/
|
||||||
|
// TODO: would be nice to have case insensitive lookups.
|
||||||
public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI> implements Iterable<S> {
|
public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI> implements Iterable<S> {
|
||||||
|
|
||||||
private final Map<String,S> services;
|
private final Map<String,S> services;
|
||||||
|
@ -51,6 +52,7 @@ public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI> implements
|
||||||
// this allows to place services before others in classpath to make
|
// this allows to place services before others in classpath to make
|
||||||
// them used instead of others
|
// them used instead of others
|
||||||
if (!services.containsKey(name)) {
|
if (!services.containsKey(name)) {
|
||||||
|
assert checkServiceName(name);
|
||||||
services.put(name, service);
|
services.put(name, service);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +60,37 @@ public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI> implements
|
||||||
this.services = Collections.unmodifiableMap(services);
|
this.services = Collections.unmodifiableMap(services);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates that a service name meets the requirements of {@link NamedSPI}
|
||||||
|
*/
|
||||||
|
public static boolean checkServiceName(String name) {
|
||||||
|
// based on harmony charset.java
|
||||||
|
if (name.length() >= 128) {
|
||||||
|
throw new IllegalArgumentException("Illegal service name: '" + name + "' is too long (must be < 128 chars).");
|
||||||
|
}
|
||||||
|
for (int i = 0; i < name.length(); i++) {
|
||||||
|
char c = name.charAt(i);
|
||||||
|
if (!isLetter(c) && !isDigit(c)) {
|
||||||
|
throw new IllegalArgumentException("Illegal service name: '" + name + "' must be simple ascii alphanumeric.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks whether a character is a letter (ascii) which are defined in the spec.
|
||||||
|
*/
|
||||||
|
private static boolean isLetter(char c) {
|
||||||
|
return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks whether a character is a digit (ascii) which are defined in the spec.
|
||||||
|
*/
|
||||||
|
private static boolean isDigit(char c) {
|
||||||
|
return ('0' <= c && c <= '9');
|
||||||
|
}
|
||||||
|
|
||||||
public S lookup(String name) {
|
public S lookup(String name) {
|
||||||
final S service = services.get(name);
|
final S service = services.get(name);
|
||||||
if (service != null) return service;
|
if (service != null) return service;
|
||||||
|
@ -76,6 +109,8 @@ public final class NamedSPILoader<S extends NamedSPILoader.NamedSPI> implements
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface to support {@link NamedSPILoader#lookup(String)} by name.
|
* Interface to support {@link NamedSPILoader#lookup(String)} by name.
|
||||||
|
* <p>
|
||||||
|
* Names must be all ascii alphanumeric, and less than 128 characters in length.
|
||||||
*/
|
*/
|
||||||
public static interface NamedSPI {
|
public static interface NamedSPI {
|
||||||
String getName();
|
String getName();
|
||||||
|
|
Loading…
Reference in New Issue