Changeset 15710 in josm for trunk/src/org/openstreetmap
- Timestamp:
- 2020-01-14T21:55:55+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
r15427 r15710 10 10 import java.lang.reflect.Method; 11 11 import java.lang.reflect.Modifier; 12 import java.util.Arrays; 12 13 import java.util.HashMap; 13 14 import java.util.Iterator; … … 81 82 @Override 82 83 public void startElement(String ns, String lname, String qname, Attributes a) throws SAXException { 83 if (mapping.containsKey(qname)) { 84 Class<?> klass = mapping.get(qname).klass; 84 final Entry entry = mapping.get(qname); 85 if (entry != null) { 86 Class<?> klass = entry.klass; 85 87 try { 86 88 current.push(klass.getConstructor().newInstance()); … … 89 91 } 90 92 for (int i = 0; i < a.getLength(); ++i) { 91 setValue( mapping.get(qname), a.getQName(i), a.getValue(i));92 } 93 if ( mapping.get(qname).onStart) {93 setValue(entry, a.getQName(i), a.getValue(i)); 94 } 95 if (entry.onStart) { 94 96 report(); 95 97 } 96 if ( mapping.get(qname).both) {98 if (entry.both) { 97 99 queue.add(current.peek()); 98 100 } … … 102 104 @Override 103 105 public void endElement(String ns, String lname, String qname) throws SAXException { 104 if (mapping.containsKey(qname) && !mapping.get(qname).onStart) { 106 final Entry entry = mapping.get(qname); 107 if (entry != null && !entry.onStart) { 105 108 report(); 106 } else if ( mapping.containsKey(qname)&& characters != null && !current.isEmpty()) {107 setValue( mapping.get(qname), qname, characters.toString().trim());109 } else if (entry != null && characters != null && !current.isEmpty()) { 110 setValue(entry, qname, characters.toString().trim()); 108 111 characters = new StringBuilder(64); 109 112 } … … 204 207 205 208 Field getField(String s) { 206 if (fields.containsKey(s)) { 207 return fields.get(s); 208 } else { 209 try { 210 Field f = klass.getField(s); 211 fields.put(s, f); 212 return f; 213 } catch (NoSuchFieldException ex) { 214 Logging.trace(ex); 215 fields.put(s, null); 216 return null; 217 } 218 } 209 return fields.computeIfAbsent(s, ignore -> Arrays.stream(klass.getFields()) 210 .filter(f -> f.getName().equals(s)) 211 .findFirst() 212 .orElse(null)); 219 213 } 220 214 221 215 Method getMethod(String s) { 222 if (methods.containsKey(s)) { 223 return methods.get(s); 224 } else { 225 for (Method m : klass.getMethods()) { 226 if (m.getName().equals(s) && m.getParameterTypes().length == 1) { 227 methods.put(s, m); 228 return m; 229 } 230 } 231 methods.put(s, null); 232 return null; 233 } 216 return methods.computeIfAbsent(s, ignore -> Arrays.stream(klass.getMethods()) 217 .filter(m -> m.getName().equals(s) && m.getParameterTypes().length == 1) 218 .findFirst() 219 .orElse(null)); 234 220 } 235 221 }
Note:
See TracChangeset
for help on using the changeset viewer.