Skip to content

Commit

Permalink
Minor cleanup. Add to test. Closes #311. Closes #331.
Browse files Browse the repository at this point in the history
  • Loading branch information
manning authored and Stanford NLP committed Jan 7, 2017
1 parent d51bc1e commit c8b8268
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 86 deletions.
2 changes: 1 addition & 1 deletion src/edu/stanford/nlp/pipeline/TokensRegexAnnotator.java
Expand Up @@ -64,7 +64,7 @@ public TokensRegexAnnotator(String... files) {
public TokensRegexAnnotator(String name, Properties props) { public TokensRegexAnnotator(String name, Properties props) {
String prefix = (name == null)? "": name + '.'; String prefix = (name == null)? "": name + '.';
String[] files = PropertiesUtils.getStringArray(props, prefix + "rules"); String[] files = PropertiesUtils.getStringArray(props, prefix + "rules");
if (files == null || files.length == 0) { if (files.length == 0) {
throw new RuntimeException("No rules specified for TokensRegexAnnotator " + name + ", check " + prefix + "rules property"); throw new RuntimeException("No rules specified for TokensRegexAnnotator " + name + ", check " + prefix + "rules property");
} }
env = TokenSequencePattern.getNewEnv(); env = TokenSequencePattern.getNewEnv();
Expand Down
66 changes: 32 additions & 34 deletions src/edu/stanford/nlp/util/MetaClass.java
Expand Up @@ -250,12 +250,12 @@ public String getName() {
@Override @Override
public String toString() { public String toString() {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
b.append(cl.getName()).append("("); b.append(cl.getName()).append('(');
for (Class<?> cl : classParams) { for (Class<?> cl : classParams) {
b.append(" ").append(cl.getName()).append(","); b.append(' ').append(cl.getName()).append(',');
} }
b.replace(b.length() - 1, b.length(), " "); b.replace(b.length() - 1, b.length(), " ");
b.append(")"); b.append(')');
return b.toString(); return b.toString();
} }


Expand Down Expand Up @@ -491,84 +491,84 @@ private static Class <?> type2class(Type type){
public static <E> E cast(String value, Type type){ public static <E> E cast(String value, Type type){
//--Get Type //--Get Type
Class <?> clazz; Class <?> clazz;
if(type instanceof Class){ if (type instanceof Class) {
clazz = (Class <?>) type; clazz = (Class <?>) type;
}else if(type instanceof ParameterizedType){ } else if (type instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) type; ParameterizedType pt = (ParameterizedType) type;
clazz = (Class <?>) pt.getRawType(); clazz = (Class <?>) pt.getRawType();
}else{ } else {
throw new IllegalArgumentException("Cannot cast to type (unhandled type): " + type); throw new IllegalArgumentException("Cannot cast to type (unhandled type): " + type);
} }
//--Cast //--Cast
if(String.class.isAssignableFrom(clazz)){ if (String.class.isAssignableFrom(clazz)) {
// (case: String) // (case: String)
return (E) value; return (E) value;
}else if(Boolean.class.isAssignableFrom(clazz) || boolean.class.isAssignableFrom(clazz)){ } else if (Boolean.class.isAssignableFrom(clazz) || boolean.class.isAssignableFrom(clazz)) {
//(case: boolean) //(case: boolean)
if("1".equals(value)){ return (E) Boolean.TRUE; } if("1".equals(value)){ return (E) Boolean.TRUE; }
return (E) Boolean.valueOf(Boolean.parseBoolean(value)); return (E) Boolean.valueOf(Boolean.parseBoolean(value));
}else if(Integer.class.isAssignableFrom(clazz) || int.class.isAssignableFrom(clazz)){ } else if (Integer.class.isAssignableFrom(clazz) || int.class.isAssignableFrom(clazz)) {
//(case: integer) //(case: integer)
try { try {
return (E) new Integer(Integer.parseInt(value)); return (E) new Integer(Integer.parseInt(value));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return (E) new Integer((int) Double.parseDouble(value)); return (E) new Integer((int) Double.parseDouble(value));
} }
}else if(BigInteger.class.isAssignableFrom(clazz)) { } else if (BigInteger.class.isAssignableFrom(clazz)) {
//(case: biginteger) //(case: biginteger)
if(value == null){ return (E) BigInteger.ZERO; } if(value == null){ return (E) BigInteger.ZERO; }
return (E) new BigInteger(value); return (E) new BigInteger(value);
}else if(Long.class.isAssignableFrom(clazz) || long.class.isAssignableFrom(clazz)){ } else if (Long.class.isAssignableFrom(clazz) || long.class.isAssignableFrom(clazz)) {
//(case: long) //(case: long)
try { try {
return (E) new Long(Long.parseLong(value)); return (E) new Long(Long.parseLong(value));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return (E) new Long((long) Double.parseDouble(value)); return (E) new Long((long) Double.parseDouble(value));
} }
}else if(Float.class.isAssignableFrom(clazz) || float.class.isAssignableFrom(clazz)){ } else if (Float.class.isAssignableFrom(clazz) || float.class.isAssignableFrom(clazz)) {
//(case: float) //(case: float)
if(value == null){ return (E) new Float(Float.NaN); } if(value == null){ return (E) new Float(Float.NaN); }
return (E) new Float(Float.parseFloat(value)); return (E) new Float(Float.parseFloat(value));
}else if(Double.class.isAssignableFrom(clazz) || double.class.isAssignableFrom(clazz)){ } else if (Double.class.isAssignableFrom(clazz) || double.class.isAssignableFrom(clazz)) {
//(case: double) //(case: double)
if(value == null){ return (E) new Double(Double.NaN); } if(value == null){ return (E) new Double(Double.NaN); }
return (E) new Double(Double.parseDouble(value)); return (E) new Double(Double.parseDouble(value));
}else if(BigDecimal.class.isAssignableFrom(clazz)) { } else if (BigDecimal.class.isAssignableFrom(clazz)) {
//(case: bigdecimal) //(case: bigdecimal)
if(value == null){ return (E) BigDecimal.ZERO; } if(value == null){ return (E) BigDecimal.ZERO; }
return (E) new BigDecimal(value); return (E) new BigDecimal(value);
}else if(Short.class.isAssignableFrom(clazz) || short.class.isAssignableFrom(clazz)){ } else if (Short.class.isAssignableFrom(clazz) || short.class.isAssignableFrom(clazz)) {
//(case: short) //(case: short)
try { try {
return (E) new Short(Short.parseShort(value)); return (E) new Short(Short.parseShort(value));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return (E) new Short((short) Double.parseDouble(value)); return (E) new Short((short) Double.parseDouble(value));
} }
}else if(Byte.class.isAssignableFrom(clazz) || byte.class.isAssignableFrom(clazz)){ } else if (Byte.class.isAssignableFrom(clazz) || byte.class.isAssignableFrom(clazz)) {
//(case: byte) //(case: byte)
try { try {
return (E) new Byte(Byte.parseByte(value)); return (E) new Byte(Byte.parseByte(value));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return (E) new Byte((byte) Double.parseDouble(value)); return (E) new Byte((byte) Double.parseDouble(value));
} }
}else if(Character.class.isAssignableFrom(clazz) || char.class.isAssignableFrom(clazz)){ } else if(Character.class.isAssignableFrom(clazz) || char.class.isAssignableFrom(clazz)) {
//(case: char) //(case: char)
return (E) new Character((char) Integer.parseInt(value)); return (E) new Character((char) Integer.parseInt(value));
}else if(Lazy.class.isAssignableFrom(clazz)) { } else if(Lazy.class.isAssignableFrom(clazz)) {
//(case: Lazy) //(case: Lazy)
final String v = value; final String v = value;
return (E) Lazy.of(() -> MetaClass.castWithoutKnowingType(v) ); return (E) Lazy.of(() -> MetaClass.castWithoutKnowingType(v) );
}else if(Optional.class.isAssignableFrom(clazz)) { } else if (Optional.class.isAssignableFrom(clazz)) {
//(case: Optional) //(case: Optional)
return (E) ((value == null || "null".equals(value.toLowerCase()) || "empty".equals(value.toLowerCase()) || "none".equals(value.toLowerCase())) ? Optional.empty() : Optional.of(value)); return (E) ((value == null || "null".equals(value.toLowerCase()) || "empty".equals(value.toLowerCase()) || "none".equals(value.toLowerCase())) ? Optional.empty() : Optional.of(value));
}else if(java.util.Date.class.isAssignableFrom(clazz)){ } else if (java.util.Date.class.isAssignableFrom(clazz)) {
//(case: date) //(case: date)
try { try {
return (E) new Date(Long.parseLong(value)); return (E) new Date(Long.parseLong(value));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return null; return null;
} }
} else if(java.util.Calendar.class.isAssignableFrom(clazz)){ } else if (java.util.Calendar.class.isAssignableFrom(clazz)) {
//(case: date) //(case: date)
try { try {
Date d = new Date(Long.parseLong(value)); Date d = new Date(Long.parseLong(value));
Expand All @@ -578,34 +578,34 @@ public static <E> E cast(String value, Type type){
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return null; return null;
} }
} else if(FileWriter.class.isAssignableFrom(clazz)){ } else if (FileWriter.class.isAssignableFrom(clazz)) {
try { try {
return (E) new FileWriter(new File(value)); return (E) new FileWriter(new File(value));
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeIOException(e); throw new RuntimeIOException(e);
} }
} else if(BufferedReader.class.isAssignableFrom(clazz)){ } else if (BufferedReader.class.isAssignableFrom(clazz)) {
try { try {
return (E) IOUtils.getBufferedReaderFromClasspathOrFileSystem(value); return (E) IOUtils.getBufferedReaderFromClasspathOrFileSystem(value);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeIOException(e); throw new RuntimeIOException(e);
} }
} else if(FileReader.class.isAssignableFrom(clazz)){ } else if (FileReader.class.isAssignableFrom(clazz)) {
try { try {
return (E) new FileReader(new File(value)); return (E) new FileReader(new File(value));
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeIOException(e); throw new RuntimeIOException(e);
} }
} else if(File.class.isAssignableFrom(clazz)){ } else if (File.class.isAssignableFrom(clazz)) {
return (E) new File(value); return (E) new File(value);
} else if(Class.class.isAssignableFrom(clazz)){ } else if (Class.class.isAssignableFrom(clazz)) {
try { try {
return (E) Class.forName(value); return (E) Class.forName(value);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
return null; return null;
} }
} else if(clazz.isArray()){ } else if (clazz.isArray()) {
if(value == null){ return null; } if (value == null) { return null; }
Class <?> subType = clazz.getComponentType(); Class <?> subType = clazz.getComponentType();
// (case: array) // (case: array)
String[] strings = StringUtils.decodeArray(value); String[] strings = StringUtils.decodeArray(value);
Expand All @@ -616,7 +616,7 @@ public static <E> E cast(String value, Type type){
return (E) array; return (E) array;
} else if (Map.class.isAssignableFrom(clazz)) { } else if (Map.class.isAssignableFrom(clazz)) {
return (E) StringUtils.decodeMap(value); return (E) StringUtils.decodeMap(value);
} else if(clazz.isEnum()){ } else if (clazz.isEnum()) {
// (case: enumeration) // (case: enumeration)
Class c = (Class) clazz; Class c = (Class) clazz;
if(value == null){ return null; } if(value == null){ return null; }
Expand Down Expand Up @@ -675,7 +675,7 @@ public static <E> E cast(String value, Type type){
if (value.equalsIgnoreCase("stderr") || value.equalsIgnoreCase("err")) { return (E) System.err; } if (value.equalsIgnoreCase("stderr") || value.equalsIgnoreCase("err")) { return (E) System.err; }
File toWriteTo = cast(value, File.class); File toWriteTo = cast(value, File.class);
try { try {
if (!toWriteTo.exists() && !toWriteTo.createNewFile()) { if (toWriteTo == null || (!toWriteTo.exists() && !toWriteTo.createNewFile())) {
throw new IllegalStateException("Could not create output stream (cannot write file): " + value); throw new IllegalStateException("Could not create output stream (cannot write file): " + value);
} }
return (E) IOUtils.getFileOutputStream(value); return (E) IOUtils.getFileOutputStream(value);
Expand All @@ -695,10 +695,8 @@ public static <E> E cast(String value, Type type){
// (case: can parse from string) // (case: can parse from string)
Method decode = clazz.getMethod("fromString", String.class); Method decode = clazz.getMethod("fromString", String.class);
return (E) decode.invoke(MetaClass.create(clazz), value); return (E) decode.invoke(MetaClass.create(clazz), value);
} catch (NoSuchMethodException e) { // Silent errors for misc failures } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassCastException e) {
} catch (InvocationTargetException e) { // Silent errors for misc failures
} catch (IllegalAccessException e) {
} catch (ClassCastException e) {
} }


// Pass 2: Guess what the object could be // Pass 2: Guess what the object could be
Expand Down
6 changes: 5 additions & 1 deletion src/edu/stanford/nlp/util/PropertiesUtils.java
Expand Up @@ -326,13 +326,17 @@ public static double[] getDoubleArray(Properties props, String key) {


/** /**
* Loads a comma-separated list of strings from Properties. Commas may be quoted if needed, e.g.: * Loads a comma-separated list of strings from Properties. Commas may be quoted if needed, e.g.:
*
* property1 = value1,value2,"a quoted value",'another quoted value' * property1 = value1,value2,"a quoted value",'another quoted value'
* *
* getStringArray(props, "property1") should return the same thing as * getStringArray(props, "property1") should return the same thing as
*
* new String[] { "value1", "value2", "a quoted value", "another quoted value" }; * new String[] { "value1", "value2", "a quoted value", "another quoted value" };
*
* @return An array of Strings value for the given key in the Properties. May be empty. Never null.
*/ */
public static String[] getStringArray(Properties props, String key) { public static String[] getStringArray(Properties props, String key) {
String[] results = MetaClass.cast(props.getProperty(key), String [].class); String[] results = StringUtils.decodeArray(props.getProperty(key));
if (results == null) { if (results == null) {
results = StringUtils.EMPTY_STRING_ARRAY; results = StringUtils.EMPTY_STRING_ARRAY;
} }
Expand Down

0 comments on commit c8b8268

Please sign in to comment.