You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/02/02 21:16:35 UTC

[isis] branch master updated: ISIS-2516: fixes uses of stream iterate idiom

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new e3fb5eb  ISIS-2516: fixes uses of stream iterate idiom
e3fb5eb is described below

commit e3fb5ebdba4ac56ce36f90d335077e94b0e250e2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Feb 2 22:16:22 2021 +0100

    ISIS-2516: fixes uses of stream iterate idiom
    
    also fixes local package lookups
---
 .../apache/isis/commons/collections/CanTest.java   | 33 +++++++++++++++++++++
 .../jdo/dom/permission/ApplicationPermission.java  |  2 --
 .../jpa/dom/permission/ApplicationPermission.java  |  2 --
 .../apache/isis/tooling/j2adoc/J2AdocContext.java  | 34 +++++++++++++---------
 .../tooling/javamodel/ast/ImportDeclarations.java  | 12 ++++----
 5 files changed, 59 insertions(+), 24 deletions(-)

diff --git a/commons/src/test/java/org/apache/isis/commons/collections/CanTest.java b/commons/src/test/java/org/apache/isis/commons/collections/CanTest.java
index bee5267..1d5e7bb 100644
--- a/commons/src/test/java/org/apache/isis/commons/collections/CanTest.java
+++ b/commons/src/test/java/org/apache/isis/commons/collections/CanTest.java
@@ -19,6 +19,7 @@
 package org.apache.isis.commons.collections;
 
 import java.io.IOException;
+import java.util.stream.Stream;
 
 import org.junit.jupiter.api.Test;
 
@@ -28,6 +29,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.isis.commons.SerializationTester;
 
+import lombok.val;
+
 class CanTest {
 
     @Test
@@ -121,6 +124,36 @@ class CanTest {
         assertEquals(Can.<String>of("hi", "hello"), Can.<String>of("hi", "hello", "there").filter(x->x.startsWith("h")));
     }
     
+    // -- STREAM IDIOMS
+    
+    @Test
+    void partialSums_reversed() {
+        assertEquals(Can.<String>of("a", "b"), Can.<String>empty().add("a").add("b"));
+        assertEquals(Can.<String>of("a", "b"), Can.<String>empty().add(0, "b").add(0, "a"));
+        
+        final Can<String> all = Can.<String>of("a", "b", "c");
+        
+        val iterator = all.reverseIterator();
+        
+        val partialSums = Stream.iterate(
+                Can.<String>empty(), 
+                parts->parts.add(0, iterator.next()))
+        .limit(4)
+        .collect(Can.toCan());
+        
+        assertEquals(Can.of(
+                    Can.<String>empty(),
+                    Can.<String>of("c"),
+                    Can.<String>of("b", "c"),
+                    Can.<String>of("a", "b", "c")
+                ), 
+                partialSums);
+        
+    }
+    
+    
+    
+    
     
 
 }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
index 27bb346..af656cf 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
@@ -33,11 +33,9 @@ import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
index bc95dad..7a4dbb9 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
@@ -39,11 +39,9 @@ import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Editing;
-import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ObjectContracts.ObjectContract;
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java
index 2424583..87c39b2 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java
@@ -133,32 +133,38 @@ public class J2AdocContext {
             return Optional.empty();  
         }
         
+        if(unit.getFriendlyName().equals("Action")
+                && partialNameNoWhiteSpaces.equals("Where")) {
+            System.out.println("Action");
+        }
+        
         final Can<String> nameDiscriminator = Can.ofStream(
                 _Strings.splitThenStream(partialNameNoWhiteSpaces, "."));
         
+        val nameDiscriminatorPartIterator = nameDiscriminator.reverseIterator();
+        
+        val typeSimpleNameCandidates = Stream.iterate(
+                Can.ofSingleton(nameDiscriminatorPartIterator.next()), 
+                parts->parts.add(nameDiscriminatorPartIterator.next()))
+        .limit(nameDiscriminator.size())
+        .collect(Can.toCan());
+        
         final Can<Can<String>> potentialFqns = Can.ofStream(
                 ImportDeclarations
                 .streamPotentialFqns(nameDiscriminator, unit.getImportDeclarations()));
         
-        
-        val nameDiscriminatorPartIterator = nameDiscriminator.reverseIterator();
-        val typeSimpleNameFirstCandidate = Can.ofSingleton(nameDiscriminatorPartIterator.next());
-        
-        val searchResult = Can.ofStream(Stream.iterate(
-                typeSimpleNameFirstCandidate, 
-                __->nameDiscriminatorPartIterator.hasNext(), 
-                parts->parts.add(0, nameDiscriminatorPartIterator.next()))
+        val searchResult = typeSimpleNameCandidates.stream()
         .map((Can<String> typeSimpleNameParts)->typeSimpleNameParts.stream()
                 .collect(Collectors.joining(".")))
-        //.peek(typeSimpleNameCandidate->System.out.println("!!! candidate: "+typeSimpleNameCandidate)) //debug
         .flatMap((String typeSimpleNameCandidate)->unitsByTypeSimpleName
                 .getOrElseEmpty(typeSimpleNameCandidate)
                 .stream())
-        .filter((J2AdocUnit referredUnit)->{
-                Can<String> unitFqnParts = referredUnit.getFqnParts();
-                return potentialFqns.stream()
-                        .anyMatch(potentialFqn->potentialFqn.isEqualTo(unitFqnParts));
-        }));
+        .filter((J2AdocUnit referredUnit)->potentialFqns.stream()
+                .anyMatch(potentialFqn->potentialFqn.isEqualTo(referredUnit.getFqnParts()))
+                || unit.getNamespace().equals(referredUnit.getNamespace()) //same package
+        )
+        .collect(Can.toCan());
+        
 
         val selfReferential = searchResult.isEmpty()
                 && unit.getFqnParts().endsWith(nameDiscriminator);
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ImportDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ImportDeclarations.java
index e86f216..678404e 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ImportDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ImportDeclarations.java
@@ -55,7 +55,8 @@ public final class ImportDeclarations {
             final Can<String> nameDiscriminator,
             final ImportDeclaration importDeclaration) {
                         
-        if(importDeclaration.isStatic()) {
+        if(importDeclaration.isStatic()
+                || nameDiscriminator.isEmpty()) {
             return Stream.empty();
         }
         
@@ -74,12 +75,11 @@ public final class ImportDeclarations {
         
         val nameDiscriminatorPartIterator = nameDiscriminator.reverseIterator();
 
-        val firstCandidate = fqnParts.add(nameDiscriminatorPartIterator.next());
-        
         return Stream.iterate(
-                firstCandidate, 
-                __->nameDiscriminatorPartIterator.hasNext(), 
-                parts->parts.add(nameDiscriminatorPartIterator.next()));
+                Can.ofSingleton(nameDiscriminatorPartIterator.next()), 
+                parts->parts.add(0, nameDiscriminatorPartIterator.next()))
+            .limit(nameDiscriminator.size())
+            .map(fqnParts::addAll);
     }
     
     // -- HELPER