Changeset 15710 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2020-01-14T21:55:55+01:00 (5 years ago)
Author:
simon04
Message:

XmlObjectParser: use Map.computeIfAbsent, Stream

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java

    r15427 r15710  
    1010import java.lang.reflect.Method;
    1111import java.lang.reflect.Modifier;
     12import java.util.Arrays;
    1213import java.util.HashMap;
    1314import java.util.Iterator;
     
    8182        @Override
    8283        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;
    8587                try {
    8688                    current.push(klass.getConstructor().newInstance());
     
    8991                }
    9092                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) {
    9496                    report();
    9597                }
    96                 if (mapping.get(qname).both) {
     98                if (entry.both) {
    9799                    queue.add(current.peek());
    98100                }
     
    102104        @Override
    103105        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) {
    105108                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());
    108111                characters = new StringBuilder(64);
    109112            }
     
    204207
    205208        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));
    219213        }
    220214
    221215        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));
    234220        }
    235221    }
Note: See TracChangeset for help on using the changeset viewer.