src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/ParserFactory.java
branchJEP-349-branch
changeset 58197 0ef79bd7fb5c
parent 58145 bc54ed8d908a
equal deleted inserted replaced
58193:baf88aa4f5db 58197:0ef79bd7fb5c
    51         this.constantLookups = constantLookups;
    51         this.constantLookups = constantLookups;
    52         this.timeConverter = timeConverter;
    52         this.timeConverter = timeConverter;
    53         for (Type t : metadata.getTypes()) {
    53         for (Type t : metadata.getTypes()) {
    54             types.put(t.getId(), t);
    54             types.put(t.getId(), t);
    55         }
    55         }
       
    56         // Add to separate list
       
    57         // so createCompositeParser can throw
       
    58         // IOException outside lambda
    56         List<Type> typeList = new ArrayList<>();
    59         List<Type> typeList = new ArrayList<>();
    57         types.forEach(typeList::add);
    60         types.forEach(typeList::add);
    58         for (Type t : typeList) {
    61         for (Type t : typeList) {
    59             if (!t.getFields().isEmpty()) { // Avoid primitives
    62             if (!t.getFields().isEmpty()) { // Avoid primitives
    60                 CompositeParser cp = createCompositeParser(t, false);
    63                 CompositeParser cp = createCompositeParser(t, false);
    61                 if (t.isSimpleType()) { // Reduce to nested parser
    64                 if (t.isSimpleType()) { // Reduce to nested parser
    62                     parsers.put(t.getId(), cp.parsers[0]);
    65                     parsers.put(t.getId(), cp.parsers[0]);
    63                 }
    66                 }
    64 
       
    65             }
    67             }
    66         }
    68         }
    67         // Override event types with event parsers
    69         // Override event types with event parsers
    68         for (EventType t : metadata.getEventTypes()) {
    70         for (EventType t : metadata.getEventTypes()) {
    69             parsers.put(t.getId(), createEventParser(t));
    71             parsers.put(t.getId(), createEventParser(t));
   310                 elementParser.skip(input);
   312                 elementParser.skip(input);
   311             }
   313             }
   312         }
   314         }
   313     }
   315     }
   314 
   316 
   315     final static class CompositeParser extends Parser {
   317     private final static class CompositeParser extends Parser {
   316         private final Parser[] parsers;
   318         private final Parser[] parsers;
   317 
   319 
   318         public CompositeParser(Parser[] valueParsers) {
   320         public CompositeParser(Parser[] valueParsers) {
   319             this.parsers = valueParsers;
   321             this.parsers = valueParsers;
   320         }
   322         }
   334                 parsers[i].skip(input);
   336                 parsers[i].skip(input);
   335             }
   337             }
   336         }
   338         }
   337     }
   339     }
   338 
   340 
   339     public static final class EventValueConstantParser extends Parser {
   341     private static final class EventValueConstantParser extends Parser {
   340         private final ConstantLookup lookup;
   342         private final ConstantLookup lookup;
   341         private Object lastValue = 0;
   343         private Object lastValue = 0;
   342         private long lastKey = -1;
   344         private long lastKey = -1;
   343         EventValueConstantParser(ConstantLookup lookup) {
   345         EventValueConstantParser(ConstantLookup lookup) {
   344             this.lookup = lookup;
   346             this.lookup = lookup;
   359         public void skip(RecordingInput input) throws IOException {
   361         public void skip(RecordingInput input) throws IOException {
   360             input.readLong();
   362             input.readLong();
   361         }
   363         }
   362     }
   364     }
   363 
   365 
   364     public static final class ConstantValueParser extends Parser {
   366     private static final class ConstantValueParser extends Parser {
   365         private final ConstantLookup lookup;
   367         private final ConstantLookup lookup;
   366         ConstantValueParser(ConstantLookup lookup) {
   368         ConstantValueParser(ConstantLookup lookup) {
   367             this.lookup = lookup;
   369             this.lookup = lookup;
   368         }
   370         }
   369 
   371