diff --git a/magik-squid/src/main/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReader.java b/magik-squid/src/main/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReader.java index 4b559115..0e249567 100644 --- a/magik-squid/src/main/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReader.java +++ b/magik-squid/src/main/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReader.java @@ -20,7 +20,6 @@ import java.util.Set; import java.util.Spliterator; import java.util.Spliterators; -import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; import java.util.zip.ZipEntry; @@ -223,7 +222,7 @@ private void readCondition( // Line 1 final String name; final List dataNames; - final String parent = null; // TODO + final String parent = null; // Parent is not registered in class_info files. try (Scanner scanner = new Scanner(line)) { scanner.next(); // "method" @@ -233,12 +232,8 @@ private void readCondition( // Data names. final Spliterator scannerSpliterator = - Spliterators.spliterator( - scanner, Long.MAX_VALUE, Spliterator.ORDERED | Spliterator.NONNULL); - dataNames = - StreamSupport.stream(scannerSpliterator, false) - .collect( - Collectors.toUnmodifiableList()); // NOSONAR: Java heap space err with .toList(). + Spliterators.spliterator(scanner, -1, Spliterator.IMMUTABLE | Spliterator.NONNULL); + dataNames = StreamSupport.stream(scannerSpliterator, false).toList(); } // Line 2 @@ -377,16 +372,14 @@ private void readSlottedClass( // Slots. final Spliterator slotsSpliterator = - Spliterators.spliterator( - scanner, Long.MAX_VALUE, Spliterator.ORDERED | Spliterator.NONNULL); + Spliterators.spliterator(scanner, -1, Spliterator.IMMUTABLE | Spliterator.NONNULL); slots = StreamSupport.stream(slotsSpliterator, false) .map( slotName -> new SlotDefinition( null, moduleName, null, null, slotName, TypeString.UNDEFINED)) - .collect( - Collectors.toUnmodifiableList()); // NOSONAR: Java heap space err with .toList(). + .toList(); } // Line 2 diff --git a/magik-squid/src/test/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReaderTest.java b/magik-squid/src/test/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReaderTest.java index 396a7b78..26e82955 100644 --- a/magik-squid/src/test/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReaderTest.java +++ b/magik-squid/src/test/java/nl/ramsolutions/sw/magik/analysis/typing/ClassInfoDefinitionReaderTest.java @@ -12,6 +12,7 @@ import nl.ramsolutions.sw.magik.analysis.definitions.GlobalDefinition; import nl.ramsolutions.sw.magik.analysis.definitions.IDefinitionKeeper; import nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition; +import nl.ramsolutions.sw.magik.analysis.definitions.SlotDefinition; import nl.ramsolutions.sw.magik.analysis.typing.types.TypeString; import org.junit.jupiter.api.Test; @@ -41,6 +42,8 @@ void testRead() throws IOException { final Collection condition2s = definitionKeeper.getConditionDefinitions("example_condition_2"); assertThat(condition2s).isNotNull(); + final ConditionDefinition condition2 = condition2s.iterator().next(); + assertThat(condition2.getDataNames()).containsExactlyInAnyOrder("data1", "data2"); // Mixins. final TypeString exampleMixinRef = TypeString.ofIdentifier("example_mixin", "sw"); @@ -53,6 +56,17 @@ void testRead() throws IOException { final Collection exampleClassTypes = definitionKeeper.getExemplarDefinitions(exampleClassRef); assertThat(exampleClassTypes).isNotEmpty(); + final ExemplarDefinition exampleClassType = exampleClassTypes.iterator().next(); + assertThat(exampleClassType.getParents()) + .containsExactlyInAnyOrder(TypeString.ofIdentifier("model", "sw")); + assertThat(exampleClassType.getSlots()) + .containsExactlyInAnyOrder( + new SlotDefinition( + null, "class_definition_reader_test", null, null, "slot1", TypeString.UNDEFINED), + new SlotDefinition( + null, "class_definition_reader_test", null, null, "slot2", TypeString.UNDEFINED), + new SlotDefinition( + null, "class_definition_reader_test", null, null, "slot3", TypeString.UNDEFINED)); // Methods. final Collection doSomethingMethodDefs =