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 2018/10/04 10:01:44 UTC

[isis] branch v2 updated: ISIS-1976: finally removing guava from metamodel

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

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


The following commit(s) were added to refs/heads/v2 by this push:
     new e03e029  ISIS-1976: finally removing guava from metamodel
e03e029 is described below

commit e03e0294b469d431750cb5dbc99629d6cbd9e45e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 4 12:01:23 2018 +0200

    ISIS-1976: finally removing guava from metamodel
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../applib/mixins/layout/Object_openRestApi.java   |  4 +-
 .../services/swagger/SwaggerServiceMenu.java       |  4 +-
 .../java/org/apache/isis/applib/util/JaxbUtil.java |  4 +-
 .../apache/isis/schema/utils/ChangesDtoUtils.java  |  4 +-
 .../apache/isis/schema/utils/CommandDtoUtils.java  |  4 +-
 .../isis/schema/utils/InteractionDtoUtils.java     |  4 +-
 .../XmlSnapshotServiceAbstractTest.java            |  4 +-
 .../isis/commons/internal/base/_Strings.java       | 24 ++++++----
 .../internal/base/_Strings_SplitIterator.java      |  7 ++-
 .../resources/{_Resource.java => _Resources.java}  | 23 ++++++++--
 ...ontextPath.java => _Resources_ContextPath.java} |  4 +-
 .../{_Resource_Path.java => _Resources_Path.java}  |  4 +-
 ...estfulPath.java => _Resources_RestfulPath.java} |  4 +-
 core/metamodel/pom.xml                             | 10 ++--
 .../PrimerForEnvironmentVariableISIS_OPTS.java     | 23 ++++++----
 .../isis/core/commons/lang/ClassExtensions.java    |  5 +-
 .../ResourceStreamSourceCurrentClassClassPath.java |  4 +-
 .../core/metamodel/adapter/oid/Oid_Marshaller.java | 21 +++++----
 .../isis/core/metamodel/facetapi/FeatureType.java  | 35 +++++++-------
 .../metamodel/facets/FacetFactoryAbstract.java     |  5 +-
 .../annotation/HomePageFacetAnnotationFactory.java | 13 ++++--
 .../cssclassfa/CssClassFaFacetAbstract.java        | 14 +++---
 .../DomainServiceFacetAnnotationFactory.java       |  9 ++--
 .../RemoveAnnotatedMethodsFacetFactory.java        | 53 +++++++++++++++-------
 .../annotation/TitleAnnotationFacetFactory.java    |  6 +--
 .../services/appfeat/ApplicationFeatureId.java     | 28 ++++--------
 .../services/grid/GridLoaderServiceDefault.java    |  8 ++--
 .../services/grid/GridServiceDefault.java          |  6 +--
 .../services/layout/LayoutServiceDefault.java      | 20 ++++----
 .../services/metamodel/DomainMemberDefault.java    | 13 +++---
 .../services/swagger/SwaggerServiceDefault.java    |  4 +-
 .../services/swagger/internal/Generation.java      | 23 ++++------
 .../core/metamodel/spec/feature/ObjectAction.java  |  9 ++--
 .../specimpl/ObjectSpecificationAbstract.java      |  7 ++-
 .../MetaModelValidatorToCheckModuleExtent.java     |  8 ++--
 ...taModelValidatorToCheckObjectSpecIdsUnique.java | 13 +++---
 .../standard/AuthenticationManagerStandard.java    |  5 +-
 .../core/runtime/runner/opts/OptionValidator.java  |  2 +-
 .../isis/core/webapp/content/ResourceServlet.java  |  6 +--
 .../ordering/memberorder/DeweyOrderSetTest.java    | 11 +++--
 .../core/metamodel/services/grid/BS3GridTest.java  | 17 ++++---
 .../services/menubars/BS3MenuBarsTest.java         | 10 ++--
 core/runtime/pom.xml                               |  7 +++
 .../core/webapp/IsisWebAppContextListener.java     |  2 +-
 .../core/webapp/modules/WebModule_RestEasy.java    |  2 +-
 .../core/unittestsupport/jaxb/JaxbMatchers.java    |  4 +-
 .../ui/components/widgets/navbar/Placement.java    |  4 +-
 47 files changed, 265 insertions(+), 236 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
index 9eb8f48..27f732b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.swagger.SwaggerService;
 import org.apache.isis.applib.value.LocalResourcePath;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 
 @Mixin(method="act")
 public class Object_openRestApi {
@@ -59,7 +59,7 @@ public class Object_openRestApi {
 
         return new LocalResourcePath(String.format(
                 "/%s/objects/%s/%s",
-                _Resource.getRestfulPathIfAny(),
+                _Resources.getRestfulPathIfAny(),
                 bookmark.getObjectType(),
                 bookmark.getIdentifier()));
     }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java
index c840300..72f8ba6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/swagger/SwaggerServiceMenu.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Clob;
 import org.apache.isis.applib.value.LocalResourcePath;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 
 
 @DomainService(
@@ -70,7 +70,7 @@ public class SwaggerServiceMenu {
             )
     @MemberOrder(sequence="500.600.2")
     public LocalResourcePath openRestApi() {
-        return new LocalResourcePath("/"+_Resource.getRestfulPathIfAny()+"/");
+        return new LocalResourcePath("/"+_Resources.getRestfulPathIfAny()+"/");
     }
 
     public static class DownloadSwaggerSpecDomainEvent extends ActionDomainEvent { private static final long serialVersionUID = 1L; }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
index a179bde..492af28 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
@@ -31,7 +31,7 @@ import javax.xml.bind.Unmarshaller;
 
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 
 
 /**
@@ -65,7 +65,7 @@ public class JaxbUtil {
             final Charset charset,
             final Class<T> dtoClass) throws IOException {
 
-        final String s = _Resource.loadAsString(contextClass, resourceName, charset);
+        final String s = _Resources.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s), dtoClass);
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java
index 09511be..5583fc6 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java
@@ -32,7 +32,7 @@ import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.isis.applib.util.JaxbUtil;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.schema.chg.v1.ChangesDto;
 
 public final class ChangesDtoUtils {
@@ -68,7 +68,7 @@ public final class ChangesDtoUtils {
             final String resourceName,
             final Charset charset) throws IOException {
 
-        final String s = _Resource.loadAsString(contextClass, resourceName, charset);
+        final String s = _Resources.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s));
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
index 0faf293..9e77e1a 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
@@ -31,7 +31,7 @@ import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.isis.applib.util.JaxbUtil;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.cmd.v1.CommandDto;
 import org.apache.isis.schema.cmd.v1.MapDto;
@@ -72,7 +72,7 @@ public final class CommandDtoUtils {
             final String resourceName,
             final Charset charset) throws IOException {
 
-        final String s = _Resource.loadAsString(contextClass, resourceName, charset);
+        final String s = _Resources.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s));
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 24127d0..f98cf42 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -40,7 +40,7 @@ import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.util.JaxbUtil;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.schema.cmd.v1.ParamDto;
 import org.apache.isis.schema.cmd.v1.ParamsDto;
 import org.apache.isis.schema.common.v1.InteractionType;
@@ -88,7 +88,7 @@ public final class InteractionDtoUtils {
             final String resourceName,
             final Charset charset) throws IOException {
 
-        final String s = _Resource.loadAsString(contextClass, resourceName, charset);
+        final String s = _Resources.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s));
     }
 
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
index d8addfd..278fb5a 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
@@ -24,7 +24,7 @@ import java.math.BigInteger;
 import java.nio.charset.Charset;
 import java.util.Locale;
 
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 import org.joda.time.LocalDate;
 import org.junit.Before;
 import org.junit.Test;
@@ -38,7 +38,7 @@ public class XmlSnapshotServiceAbstractTest {
     
     @Before
     public void setUp() throws Exception {
-        xmlStr = _Resource.loadAsString(
+        xmlStr = _Resources.loadAsString(
         		XmlSnapshotServiceAbstractTest.class, 
         		"XmlSnapshotServiceAbstractTest.xml", 
         		Charset.forName("UTF-8"));
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
index f3469d4..6c48c3c 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
@@ -30,6 +30,7 @@ import java.util.Map;
 import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.function.UnaryOperator;
+import java.util.regex.Pattern;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
@@ -269,7 +270,7 @@ public final class _Strings {
 
     /**
      * Splits the {@code input} into chunks separated by {@code separator},
-     * then puts all chunks on the stream.
+     * then puts all chunks on the returned stream.
      * <p>
      * Corner cases:
      * <ul>
@@ -297,6 +298,20 @@ public final class _Strings {
                 Spliterators.spliteratorUnknownSize(splitIterator(input, separator), Spliterator.ORDERED),
                 false); // not parallel
     }
+    
+    /**
+     * Creates a stream from the given input sequence around matches of {@code delimiterPattern}. 
+     * @param input
+     * @param delimiterPattern
+     * @return
+     */
+    public static Stream<String> splitThenStream(@Nullable final CharSequence input, Pattern delimiterPattern) {
+        requires(delimiterPattern, "delimiterPattern");
+        if(isEmpty(input)) {
+            return Stream.of();
+        }
+        return delimiterPattern.splitAsStream(input);
+    }
 
     // -- REPLACEMENT OPERATORS
 
@@ -404,11 +419,4 @@ public final class _Strings {
     }
 
 
-
-
-
-
-
-
-
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java
index 63a162b..64d1dd7 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java
@@ -32,10 +32,12 @@ import javax.annotation.Nullable;
 final class _Strings_SplitIterator {
 
     public static Iterator<String> splitIterator(@Nullable final String x, final String delimiter){
-        if(_Strings.isEmpty(delimiter))
+        if(_Strings.isEmpty(delimiter)) {
             throw new IllegalArgumentException("a non empty delimiter is required");
-        if(_Strings.isEmpty(x))
+        }
+        if(_Strings.isEmpty(x)) {
             return Collections.<String>emptyIterator();
+        }
         final int dlen = delimiter.length();
         return new Iterator<String>() {
             private int p=0, q=-1;
@@ -69,5 +71,6 @@ final class _Strings_SplitIterator {
             }
         };
     }
+ 
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
similarity index 86%
rename from core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource.java
rename to core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
index c36b667..48de647 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
@@ -24,6 +24,7 @@ import static org.apache.isis.commons.internal.base._With.requires;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.nio.charset.Charset;
 
 import org.apache.isis.commons.internal.base._Bytes;
@@ -41,7 +42,7 @@ import org.apache.isis.commons.internal.context._Context;
  * </p>
  * @since 2.0.0
  */
-public final class _Resource {
+public final class _Resources {
 
     // -- CLASS PATH RESOURCE LOADING
 
@@ -75,6 +76,16 @@ public final class _Resource {
         final InputStream is = load(contextClass, resourceName);
         return _Strings.ofBytes(_Bytes.of(is), charset);
     }
+    
+    /**
+     * @param resourceName
+     * @return The resource location as an URL, or null if the resource could not be found.
+     */
+    public static URL getResourceUrl(Class<?> contextClass, String resourceName) {
+        requires(resourceName, "resourceName");
+        final String absoluteResourceName = resolveName(resourceName, contextClass);
+        return _Context.getDefaultClassLoader().getResource(absoluteResourceName);
+    }
 
     // -- CONTEXT PATH RESOURCE
 
@@ -82,7 +93,7 @@ public final class _Resource {
      * @return context-path resource (if any) as stored previously by {@link #putContextPathIfPresent(String)}
      */
     public final static String getContextPathIfAny() {
-        final _Resource_ContextPath resource = _Context.getIfAny(_Resource_ContextPath.class);
+        final _Resources_ContextPath resource = _Context.getIfAny(_Resources_ContextPath.class);
         return resource!=null ? resource.getContextPath() : null;
     }
 
@@ -95,7 +106,7 @@ public final class _Resource {
      */
     public final static void putContextPathIfPresent(String contextPath) {
         if(!_Strings.isEmpty(contextPath)) {
-            _Context.put(_Resource_ContextPath.class, new _Resource_ContextPath(contextPath), false);
+            _Context.put(_Resources_ContextPath.class, new _Resources_ContextPath(contextPath), false);
         }
     }
 
@@ -124,7 +135,7 @@ public final class _Resource {
      * @return restful-path resource (if any) as stored previously by {@link #putRestfulPath(String)}
      */
     public final static String getRestfulPathIfAny() {
-        final _Resource_RestfulPath resource = _Context.getIfAny(_Resource_RestfulPath.class);
+        final _Resources_RestfulPath resource = _Context.getIfAny(_Resources_RestfulPath.class);
         return resource!=null ? resource.getRestfulPath() : null;
     }
 
@@ -147,7 +158,7 @@ public final class _Resource {
      * @throws IllegalArgumentException if the restfulPath is empty or is the root-path.
      */
     public final static void putRestfulPath(String restfulPath) {
-        _Context.put(_Resource_RestfulPath.class, new _Resource_RestfulPath(restfulPath), false);
+        _Context.put(_Resources_RestfulPath.class, new _Resources_RestfulPath(restfulPath), false);
     }
 
     // -- HELPER
@@ -177,6 +188,8 @@ public final class _Resource {
         return name;
     }
 
+
+
     
 
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_ContextPath.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_ContextPath.java
similarity index 91%
rename from core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_ContextPath.java
rename to core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_ContextPath.java
index 71af780..737234f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_ContextPath.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_ContextPath.java
@@ -25,9 +25,9 @@ package org.apache.isis.commons.internal.resources;
  * package private helper class to store application scoped context-path (if any)
  *
  */
-class _Resource_ContextPath extends _Resource_Path {
+class _Resources_ContextPath extends _Resources_Path {
 
-    public _Resource_ContextPath(String contextPath) {
+    public _Resources_ContextPath(String contextPath) {
         super(contextPath);
     }
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_Path.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_Path.java
similarity index 96%
rename from core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_Path.java
rename to core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_Path.java
index eadd20f..cac61e5 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_Path.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_Path.java
@@ -32,13 +32,13 @@ import org.apache.isis.commons.internal.base._Strings;
  * attempted construction)
  *
  */
-abstract class _Resource_Path {
+abstract class _Resources_Path {
 
     protected final String path;
 
     protected abstract String resourceName();
 
-    public _Resource_Path(String contextPath) {
+    public _Resources_Path(String contextPath) {
 
         if(_Strings.isEmpty(contextPath))
             throw new IllegalArgumentException(resourceName()+" can not be empty");
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_RestfulPath.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_RestfulPath.java
similarity index 91%
rename from core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_RestfulPath.java
rename to core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_RestfulPath.java
index c7a0cb3..7b3b76e 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource_RestfulPath.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources_RestfulPath.java
@@ -25,9 +25,9 @@ package org.apache.isis.commons.internal.resources;
  * package private helper class to store application scoped context-path (if any)
  *
  */
-class _Resource_RestfulPath extends _Resource_Path {
+class _Resources_RestfulPath extends _Resources_Path {
 
-    public _Resource_RestfulPath(String contextPath) {
+    public _Resources_RestfulPath(String contextPath) {
         super(contextPath);
     }
 
diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index be03a2e..7867021 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -95,11 +95,11 @@
             <groupId>com.google.inject</groupId>
             <artifactId>guice</artifactId>
             <exclusions>
-<!--             	work in progress, ultimately we want to remove guava dependency -->            
-<!--             	<exclusion> -->
-<!--             		<groupId>com.google.guava</groupId> -->
-<!--             		<artifactId>guava</artifactId> -->
-<!--             	</exclusion> -->
+				<!-- metamodel has no more dependency on guava -->            
+            	<exclusion>
+            		<groupId>com.google.guava</groupId>
+            		<artifactId>guava</artifactId>
+            	</exclusion>
             </exclusions>
         </dependency>
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS.java
index 1c82c54..269e2d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS.java
@@ -21,11 +21,9 @@ package org.apache.isis.core.commons.configbuilder;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-
-import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Maps;
 
 public class PrimerForEnvironmentVariableISIS_OPTS implements IsisConfigurationBuilder.Primer {
@@ -64,18 +62,23 @@ public class PrimerForEnvironmentVariableISIS_OPTS implements IsisConfigurationB
     private static Map<String, String> fromEnv(final String env, final String separator) {
         final LinkedHashMap<String, String> map = _Maps.newLinkedHashMap();
         if (env != null) {
-            final List<String> keyAndValues = Splitter.on(separator).splitToList(env);
-            for (String keyAndValue : keyAndValues) {
-                final List<String> parts = _Lists.newArrayList(Splitter.on("=").splitToList(keyAndValue));
+            
+            _Strings.splitThenStream(env, separator)
+            .forEach(keyAndValue->{
+                
+                final List<String> parts =
+                        _Strings.splitThenStream(env, "=").collect(Collectors.toList());
 
                 if (parts.size() >= 2) {
                     String key = parts.get(0);
-                    parts.remove(0);
-                    final String value = Joiner.on("=").join(parts);
+                    String value = parts.stream()
+                        .skip(1)
+                        .collect(Collectors.joining("="));
 
                     map.put(key, value);
                 }
-            }
+            });
+            
         }
         return map;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassExtensions.java
index bc3bc74..ed31031 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassExtensions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/ClassExtensions.java
@@ -25,8 +25,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.net.URL;
 
-import com.google.common.io.Resources;
-
+import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.core.commons.exceptions.IsisException;
 
 public final class ClassExtensions {
@@ -120,7 +119,7 @@ public final class ClassExtensions {
     }
 
     public static boolean exists(final Class<?> cls, final String resourceName) {
-        final URL url = Resources.getResource(cls, resourceName);
+        final URL url = _Resources.getResourceUrl(cls, resourceName);
         return url != null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java
index 21c8c91..0d7f422 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java
@@ -22,6 +22,8 @@ package org.apache.isis.core.commons.resource;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.isis.commons.internal.resources._Resources;
+
 /**
  * Load from this class' ClassLoader.
  *
@@ -35,7 +37,7 @@ public class ResourceStreamSourceCurrentClassClassPath extends ResourceStreamSou
 
     @Override
     protected InputStream doReadResource(final String resourcePath) throws IOException {
-        return getClass().getClassLoader().getResourceAsStream(resourcePath);
+        return _Resources.load(getClass(), resourcePath);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
index 3a5aa9f..268f023 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
@@ -18,12 +18,13 @@
  */
 package org.apache.isis.core.metamodel.adapter.oid;
 
+import static org.apache.isis.commons.internal.base._Strings.splitThenStream;
+
 import java.util.Iterator;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
-import com.google.common.base.Splitter;
+import java.util.stream.Stream;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.base._Casts;
@@ -168,19 +169,21 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
 
         final String aggregateOidPart = getGroup(matcher, 6);
         final List<AggregateOidPart> aggregateOidParts = _Lists.newArrayList();
-        final Splitter nestingSplitter = Splitter.on(SEPARATOR_NESTING);
-        final Splitter partsSplitter = Splitter.on(SEPARATOR);
+//        final Splitter nestingSplitter = Splitter.on(SEPARATOR_NESTING);
+//        final Splitter partsSplitter = Splitter.on(SEPARATOR);
         if(aggregateOidPart != null) {
-            final Iterable<String> tildaSplitIter = nestingSplitter.split(aggregateOidPart);
-            for(String str: tildaSplitIter) {
+            final Stream<String> tildaSplitted = splitThenStream(aggregateOidPart, SEPARATOR_NESTING); 
+                    
+            tildaSplitted.forEach(str->{
                 if(_Strings.isNullOrEmpty(str)) {
-                    continue; // leading "~"
+                    return; // leading "~"
                 }
-                final Iterator<String> colonSplitIter = partsSplitter.split(str).iterator();
+                final Iterator<String> colonSplitIter = splitThenStream(str, SEPARATOR).iterator();
                 final String objectType = colonSplitIter.next();
                 final String localId = colonSplitIter.next();
                 aggregateOidParts.add(new AggregateOidPart(objectType, localId));
-            }
+            });
+            
         }
         final String collectionPart = getGroup(matcher, 8);
         final String collectionName = collectionPart != null ? collectionPart.substring(1) : null;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
index 7396637..784dbbd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
@@ -23,9 +23,8 @@ import java.beans.Introspector;
 import java.lang.reflect.Method;
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
-
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 
@@ -87,34 +86,34 @@ public enum FeatureType {
         }
     };
 
-    public final static List<FeatureType> COLLECTIONS_ONLY = ImmutableList.of(COLLECTION);
-    public final static List<FeatureType> COLLECTIONS_AND_ACTIONS = ImmutableList.of(COLLECTION, ACTION);
-    public final static List<FeatureType> ACTIONS_ONLY = ImmutableList.of(ACTION);
-    public final static List<FeatureType> PARAMETERS_ONLY = ImmutableList.of(ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
-    public final static List<FeatureType> PROPERTIES_ONLY = ImmutableList.of(PROPERTY);
-    public final static List<FeatureType> PROPERTIES_AND_ACTIONS = ImmutableList.of(PROPERTY, ACTION);
-    public final static List<FeatureType> OBJECTS_ONLY = ImmutableList.of(OBJECT);
-    public final static List<FeatureType> MEMBERS = ImmutableList.of(PROPERTY, COLLECTION, ACTION);
-    public final static List<FeatureType> OBJECTS_AND_PROPERTIES = ImmutableList.of(OBJECT, PROPERTY);
-    public final static List<FeatureType> PROPERTIES_AND_COLLECTIONS = ImmutableList.of(PROPERTY, COLLECTION);
-    public final static List<FeatureType> OBJECTS_AND_COLLECTIONS = ImmutableList.of(OBJECT, COLLECTION);
-    public final static List<FeatureType> OBJECTS_AND_ACTIONS = ImmutableList.of(OBJECT, ACTION);
-    public final static List<FeatureType> OBJECTS_PROPERTIES_AND_COLLECTIONS = ImmutableList.of(OBJECT, PROPERTY, COLLECTION);
+    public final static List<FeatureType> COLLECTIONS_ONLY = _Lists.of(COLLECTION);
+    public final static List<FeatureType> COLLECTIONS_AND_ACTIONS = _Lists.of(COLLECTION, ACTION);
+    public final static List<FeatureType> ACTIONS_ONLY = _Lists.of(ACTION);
+    public final static List<FeatureType> PARAMETERS_ONLY = _Lists.of(ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
+    public final static List<FeatureType> PROPERTIES_ONLY = _Lists.of(PROPERTY);
+    public final static List<FeatureType> PROPERTIES_AND_ACTIONS = _Lists.of(PROPERTY, ACTION);
+    public final static List<FeatureType> OBJECTS_ONLY = _Lists.of(OBJECT);
+    public final static List<FeatureType> MEMBERS = _Lists.of(PROPERTY, COLLECTION, ACTION);
+    public final static List<FeatureType> OBJECTS_AND_PROPERTIES = _Lists.of(OBJECT, PROPERTY);
+    public final static List<FeatureType> PROPERTIES_AND_COLLECTIONS = _Lists.of(PROPERTY, COLLECTION);
+    public final static List<FeatureType> OBJECTS_AND_COLLECTIONS = _Lists.of(OBJECT, COLLECTION);
+    public final static List<FeatureType> OBJECTS_AND_ACTIONS = _Lists.of(OBJECT, ACTION);
+    public final static List<FeatureType> OBJECTS_PROPERTIES_AND_COLLECTIONS = _Lists.of(OBJECT, PROPERTY, COLLECTION);
 
     public static final List<FeatureType> ACTIONS_AND_PARAMETERS =
-            ImmutableList.of(ACTION, ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
+            _Lists.of(ACTION, ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
 
     /**
      * Use of this is discouraged; instead use multiple {@link FacetFactory}s
      * for different features.
      */
-    public final static List<FeatureType> EVERYTHING_BUT_PARAMETERS = ImmutableList.of(OBJECT, PROPERTY, COLLECTION, ACTION);
+    public final static List<FeatureType> EVERYTHING_BUT_PARAMETERS = _Lists.of(OBJECT, PROPERTY, COLLECTION, ACTION);
     /**
      * Use of this is discouraged; instead use multiple {@link FacetFactory}s
      * for different features.
      */
     public final static List<FeatureType> EVERYTHING =
-            ImmutableList.of(OBJECT, PROPERTY, COLLECTION, ACTION, ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
+            _Lists.of(OBJECT, PROPERTY, COLLECTION, ACTION, ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
 
     private final String name;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
index fce23e0..ad1bd5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
@@ -21,8 +21,7 @@ package org.apache.isis.core.metamodel.facets;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
-
+import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
@@ -37,7 +36,7 @@ public abstract class FacetFactoryAbstract implements FacetFactory, ServicesInje
     private final List<FeatureType> featureTypes;
 
     public FacetFactoryAbstract(final List<FeatureType> featureTypes) {
-        this.featureTypes = ImmutableList.copyOf(featureTypes);
+        this.featureTypes = _Lists.unmodifiable(featureTypes);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
index d35fdfd..bb3ce69 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
@@ -19,11 +19,12 @@
 
 package org.apache.isis.core.metamodel.facets.actions.homepage.annotation;
 
+import static org.apache.isis.commons.internal.functions._Predicates.not;
+
 import java.util.List;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.google.common.base.Joiner;
-
 import org.apache.isis.applib.annotation.HomePage;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -94,9 +95,11 @@ public class HomePageFacetAnnotationFactory extends FacetFactoryAbstract impleme
             public void summarize(ValidationFailures validationFailures) {
                 if(annotated.size()>1) {
                     for (String actionId : annotated) {
-                        final List<String> others = _Lists.newArrayList(annotated);
-                        others.remove(actionId);
-                        final String nonServiceNamesStr = Joiner.on(", ").join(others);
+                        
+                        final String nonServiceNamesStr = annotated.stream()
+                            .filter(not(actionId::equals))
+                            .collect(Collectors.joining(", "));
+                        
                         validationFailures.add(
                                 "%s: other actions also specified as home page: %s ",
                                 actionId, nonServiceNamesStr);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFacetAbstract.java
index d89ab56..36c3f42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFacetAbstract.java
@@ -19,10 +19,10 @@ package org.apache.isis.core.metamodel.facets.members.cssclassfa;
 
 import java.util.Set;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -53,14 +53,12 @@ public class CssClassFaFacetAbstract extends SingleStringValueFacetAbstract impl
      * @return The original CSS classes plus <em>fa</em> and <em>fa-fw</em> if not already provided
      */
     static String sanitize(final String value) {
-        final Iterable<String> classes = Splitter.on(WHITESPACE).split(value.trim());
+        final Stream<String> classes = _Strings.splitThenStream(value.trim(), WHITESPACE);
         final Set<String> cssClassesSet = _Sets.newLinkedHashSet();
         cssClassesSet.add("fa");
         cssClassesSet.add("fa-fw");
-        for (final String cssClass : classes) {
-            cssClassesSet.add(faPrefix(cssClass));
-        }
-        return Joiner.on(' ').join(cssClassesSet).trim();
+        classes.forEach(cssClass->cssClassesSet.add(faPrefix(cssClass)));
+        return cssClassesSet.stream().collect(Collectors.joining(" ")).trim();
     }
 
     private static String faPrefix(final String cssClass) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
index 09e8d22..de17cf2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
@@ -19,12 +19,9 @@
 package org.apache.isis.core.metamodel.facets.object.domainservice.annotation;
 
 
-import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.google.common.base.Joiner;
-
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -119,11 +116,11 @@ public class DomainServiceFacetAnnotationFactory extends FacetFactoryAbstract im
 
                     final Stream<ObjectAssociation> associations = thisSpec.streamAssociations(Contributed.EXCLUDED);
                     
-                    final List<String> associationNames = associations
+                    final String associationNames = associations
                         .map(ObjectAssociation::getName)
                         // it's okay to have an "association" called "Id" (corresponding to getId() method)
                         .filter(associationName->!"Id".equalsIgnoreCase(associationName))
-                        .collect(Collectors.toList());
+                        .collect(Collectors.joining(", "));
 
                     if(associationNames.isEmpty()) {
                         return;
@@ -133,7 +130,7 @@ public class DomainServiceFacetAnnotationFactory extends FacetFactoryAbstract im
                             "%s: services can only have actions ('%s' config property), not properties or collections; annotate with @Programmatic if required.  Found: %s",
                             thisSpec.getFullIdentifier(),
                             ISIS_REFLECTOR_VALIDATOR_SERVICE_ACTIONS_ONLY_KEY,
-                            Joiner.on(", ").join(associationNames));
+                            associationNames);
                 }
             }));
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
index a8dc83f..cb28256 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
@@ -19,16 +19,19 @@
 
 package org.apache.isis.core.metamodel.facets.object.ignore.annotation;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
-import com.google.common.eventbus.Subscribe;
-
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MethodRemover;
@@ -37,20 +40,33 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 
 public class RemoveAnnotatedMethodsFacetFactory extends FacetFactoryAbstract {
 
-    private Class<? extends Annotation> eventHandlerClass;
+    private final List<String> eventHandlerClassNames = _Lists.of(
+            "org.axonframework.eventhandling.EventHandler", // axon 3.x
+            "org.axonframework.eventhandling.annotation.EventHandler", // axon 2.x
+            "com.google.common.eventbus.Subscribe" // guava
+            );
+    
+    private final List<Class<? extends Annotation>> eventHandlerClasses;
 
     public RemoveAnnotatedMethodsFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
 
-        try {
-            // doing this reflectively so that don't bring in a dependency on axon.
-            eventHandlerClass = _Casts.uncheckedCast(
-                    ClassUtil.forName("org.axonframework.eventhandling.annotation.EventHandler"));
-
-        } catch(Exception ignore) {
-            // ignore
-            eventHandlerClass = null;
-        }
+        eventHandlerClasses = eventHandlerClassNames.stream()
+        .map(name->{
+            Class<? extends Annotation> eventHandlerClass;
+            try {
+                // doing this reflectively so that don't bring in a dependency on axon.
+                eventHandlerClass = uncheckedCast(
+                        ClassUtil.forName("org.axonframework.eventhandling.annotation.EventHandler"));
+            } catch(Exception ignore) {
+                // ignore
+                eventHandlerClass = null;
+            }
+            return eventHandlerClass;
+        })
+        .filter(_NullSafe::isPresent)
+        .collect(Collectors.toList());
+        
     }
 
     @Override
@@ -68,14 +84,17 @@ public class RemoveAnnotatedMethodsFacetFactory extends FacetFactoryAbstract {
             removeAnnotatedMethods(methodRemover, method, PreDestroy.class);
             removeAnnotatedMethods(methodRemover, method, PostConstruct.class);
             removeAnnotatedMethods(methodRemover, method, Programmatic.class);
-            removeAnnotatedMethods(methodRemover, method, Subscribe.class);
-            if(eventHandlerClass != null) {
+            eventHandlerClasses.forEach(eventHandlerClass->{
                 removeAnnotatedMethods(methodRemover, method, eventHandlerClass);
-            }
+            });
         }
     }
 
-    private static <T extends Annotation> void removeAnnotatedMethods(final MethodRemover methodRemover, final Method method, Class<T> annotationClass) {
+    private static <T extends Annotation> void removeAnnotatedMethods(
+            final MethodRemover methodRemover, 
+            final Method method, 
+            final Class<T> annotationClass) {
+        
         if (!Annotations.isAnnotationPresent(method, annotationClass)) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
index dc26564..c443458 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
@@ -23,10 +23,10 @@ import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
-
-import com.google.common.base.Splitter;
+import java.util.stream.Collectors;
 
 import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
@@ -137,7 +137,7 @@ public class TitleAnnotationFacetFactory extends FacetFactoryAbstract implements
         }
 
         private static List<String> componentsFor(final String sequence) {
-            return _Lists.newArrayList(Splitter.on('.').split(sequence));
+            return _Strings.splitThenStream(sequence, ".").collect(Collectors.toList());
         }
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
index 738c714..c35b17f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
@@ -23,7 +23,7 @@ import static java.util.Comparator.naturalOrder;
 import static java.util.Comparator.nullsFirst;
 
 import java.io.Serializable;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
@@ -31,10 +31,6 @@ import java.util.List;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-import com.google.common.io.BaseEncoding;
-
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
@@ -43,6 +39,7 @@ import org.apache.isis.applib.util.Hashing;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.util.ToString;
+import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -134,7 +131,7 @@ public class ApplicationFeatureId implements Comparable<ApplicationFeatureId>, S
     // -- constructor
 
     private ApplicationFeatureId(final String asString) {
-        final Iterator<String> iterator = Splitter.on(":").split(asString).iterator();
+        final Iterator<String> iterator = _Strings.splitThenStream(asString, ":").iterator();
         final ApplicationFeatureType type = ApplicationFeatureType.valueOf(iterator.next());
         type.init(this, iterator.next());
     }
@@ -282,11 +279,8 @@ public class ApplicationFeatureId implements Comparable<ApplicationFeatureId>, S
                 return null; // parent is root
             }
 
-            final Iterable<String> split = Splitter.on(".").split(packageName);
-            final List<String> parts = _Lists.newArrayList(split); // eg [aaa,bbb,ccc]
-            parts.remove(parts.size()-1); // remove last, eg [aaa,bbb]
-
-            final String parentPackageName = Joiner.on(".").join(parts); // eg aaa.bbb
+            final int cutOffPos = packageName.lastIndexOf('.');
+            final String parentPackageName = packageName.substring(0, cutOffPos);
 
             return newPackage(parentPackageName);
         }
@@ -314,7 +308,7 @@ public class ApplicationFeatureId implements Comparable<ApplicationFeatureId>, S
 
     @Programmatic
     public String asString() {
-        return Joiner.on(":").join(type, getFullyQualifiedName());
+        return type.name() + ":" + getFullyQualifiedName();
     }
 
     @Programmatic
@@ -323,19 +317,13 @@ public class ApplicationFeatureId implements Comparable<ApplicationFeatureId>, S
     }
 
     private static String base64UrlDecode(final String str) {
-        final byte[] bytes = BaseEncoding.base64Url().decode(str);
-        return new String(bytes, Charset.forName("UTF-8"));
+        return _Strings.convert(str, _Bytes.ofUrlBase64, StandardCharsets.UTF_8);
     }
 
     private static String base64UrlEncode(final String str) {
-        final byte[] bytes = str.getBytes(Charset.forName("UTF-8"));
-        return BaseEncoding.base64Url().encode(bytes);
+        return _Strings.convert(str, _Bytes.asUrlBase64, StandardCharsets.UTF_8);
     }
 
-
-
-
-
     // //////////////////////////////////////
 
     // -- Functions
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
index 538560e..b855ad6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
@@ -27,8 +27,6 @@ import javax.annotation.PostConstruct;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 
-import com.google.common.io.Resources;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,6 +41,7 @@ import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Arrays;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
 
 @DomainService(
@@ -175,15 +174,14 @@ public class GridLoaderServiceDefault implements GridLoaderService {
     }
 
     private static String resourceContentOf(final Class<?> cls, final String resourceName) throws IOException {
-        final URL url = Resources.getResource(cls, resourceName);
-        return Resources.toString(url, Charset.defaultCharset());
+        return _Resources.loadAsString(cls, resourceName, Charset.defaultCharset());
     }
 
     String resourceNameFor(final Class<?> domainClass) {
         for (final Type type : Type.values()) {
             final String candidateResourceName = resourceNameFor(domainClass, type);
             try {
-                final URL resource = Resources.getResource(domainClass, candidateResourceName);
+                final URL resource = _Resources.getResourceUrl(domainClass, candidateResourceName); 
                 if (resource != null) {
                     return candidateResourceName;
                 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
index b30542d..f2f4c93 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
@@ -17,8 +17,7 @@
 package org.apache.isis.core.metamodel.services.grid;
 
 import java.util.List;
-
-import com.google.common.base.Joiner;
+import java.util.stream.Collectors;
 
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
@@ -150,7 +149,8 @@ public class GridServiceDefault implements GridService {
                 parts.add(gridSystemService.schemaLocation());
             }
         }
-        return Joiner.on(" ").join(parts);
+        return parts.stream()
+                .collect(Collectors.joining(""));
     }
 
     ////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
index 3a2e415..4fc0f98 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
@@ -21,17 +21,12 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.util.Collection;
+import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
 import javax.xml.bind.Marshaller;
 
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableMap;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
@@ -42,6 +37,8 @@ import org.apache.isis.applib.services.grid.GridService;
 import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.services.layout.LayoutService2;
 import org.apache.isis.applib.services.menu.MenuBarsService;
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -54,13 +51,13 @@ import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapabl
         )
 public class LayoutServiceDefault implements LayoutService2 {
 
-    private static final Logger LOG = LoggerFactory.getLogger(LayoutServiceDefault.class);
+    //private static final Logger LOG = LoggerFactory.getLogger(LayoutServiceDefault.class);
 
     @Override
     public String toXml(final Class<?> domainClass, final Style style) {
         final Grid grid = toGrid(domainClass, style);
         return jaxbService.toXml(grid,
-                ImmutableMap.<String,Object>of(
+                _Maps.unmodifiable(
                         Marshaller.JAXB_SCHEMA_LOCATION,
                         grid.getTnsAndSchemaLocation()
                         ));
@@ -97,7 +94,7 @@ public class LayoutServiceDefault implements LayoutService2 {
     @Programmatic
     public byte[] toZip(final Style style) {
         final Collection<ObjectSpecification> allSpecs = specificationLoader.allSpecifications();
-        final Collection<ObjectSpecification> domainObjectSpecs = Collections2
+        final List<ObjectSpecification> domainObjectSpecs = _Lists
                 .filter(allSpecs,(final ObjectSpecification input) ->
                         !input.isAbstract() &&
                                 (input.containsDoOpFacet(JdoPersistenceCapableFacet.class) ||
@@ -114,7 +111,7 @@ public class LayoutServiceDefault implements LayoutService2 {
                 if(grid != null) {
                     zos.putNextEntry(new ZipEntry(zipEntryNameFor(objectSpec)));
                     final String xml = jaxbService.toXml(grid,
-                            ImmutableMap.<String,Object>of(
+                            _Maps.unmodifiable(
                                     Marshaller.JAXB_SCHEMA_LOCATION,
                                     grid.getTnsAndSchemaLocation()
                                     ));
@@ -142,8 +139,7 @@ public class LayoutServiceDefault implements LayoutService2 {
     public String toMenuBarsXml(final MenuBarsService.Type type) {
         final MenuBars menuBars = menuBarsService.menuBars(type);
 
-        return jaxbService.toXml(menuBars,
-                ImmutableMap.<String,Object>of(
+        return jaxbService.toXml(menuBars, _Maps.unmodifiable(
                         Marshaller.JAXB_SCHEMA_LOCATION,
                         menuBars.getTnsAndSchemaLocation()
                         ));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java
index 8264f64..180cad9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/DomainMemberDefault.java
@@ -22,8 +22,7 @@ import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
 import java.util.SortedSet;
-
-import com.google.common.base.Joiner;
+import java.util.stream.Collectors;
 
 import org.apache.isis.applib.services.metamodel.DomainMember;
 import org.apache.isis.commons.internal.base._Strings;
@@ -156,7 +155,7 @@ public class DomainMemberDefault implements DomainMember {
                 addIfNotEmpty(interpretFacet(facet), interpretations);
             }
             return !interpretations.isEmpty() ?
-                    Joiner.on(";").join(interpretations) :
+                    interpretations.stream().collect(Collectors.joining(";")) :
                         interpretRowAndFacet(ActionChoicesFacet.class);
         }
     }
@@ -172,7 +171,7 @@ public class DomainMemberDefault implements DomainMember {
                 final ActionParameterAutoCompleteFacet facet = param.getFacet(ActionParameterAutoCompleteFacet.class);
                 addIfNotEmpty(interpretFacet(facet), interpretations);
             }
-            return !interpretations.isEmpty()? Joiner.on(";").join(interpretations) : "";
+            return interpretations.stream().collect(Collectors.joining(";"));
         }
     }
     @Override public String getDefault() {
@@ -187,7 +186,9 @@ public class DomainMemberDefault implements DomainMember {
                 final ActionParameterDefaultsFacet facet = param.getFacet(ActionParameterDefaultsFacet.class);
                 addIfNotEmpty(interpretFacet(facet), interpretations);
             }
-            return !interpretations.isEmpty()? Joiner.on(";").join(interpretations) : interpretRowAndFacet(ActionDefaultsFacet.class);
+            return !interpretations.isEmpty()
+                    ? interpretations.stream().collect(Collectors.joining(";"))
+                            : interpretRowAndFacet(ActionDefaultsFacet.class);
         }
     }
     @Override public String getValidate() {
@@ -197,7 +198,7 @@ public class DomainMemberDefault implements DomainMember {
             final SortedSet<String> interpretations = _Sets.newTreeSet();
             addIfNotEmpty(interpretRowAndFacet(CollectionValidateAddToFacet.class), interpretations);
             addIfNotEmpty(interpretRowAndFacet(CollectionValidateRemoveFromFacet.class), interpretations);
-            return !interpretations.isEmpty()? Joiner.on(";").join(interpretations) : "";
+            return interpretations.stream().collect(Collectors.joining(";"));
         } else {
             return interpretRowAndFacet(ActionValidationFacet.class);
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
index 7764a26..97b4db7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
@@ -20,8 +20,8 @@ package org.apache.isis.core.metamodel.services.swagger;
 
 import static org.apache.isis.commons.internal.base._Strings.prefix;
 import static org.apache.isis.commons.internal.base._With.ifPresentElse;
-import static org.apache.isis.commons.internal.resources._Resource.getRestfulPathIfAny;
-import static org.apache.isis.commons.internal.resources._Resource.prependContextPathIfPresent;
+import static org.apache.isis.commons.internal.resources._Resources.getRestfulPathIfAny;
+import static org.apache.isis.commons.internal.resources._Resources.prependContextPathIfPresent;
 
 import java.util.Map;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java
index 83baf78..335d944 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java
@@ -25,11 +25,6 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.base.Joiner;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Ordering;
-
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.swagger.SwaggerService;
@@ -170,15 +165,15 @@ class Generation {
         }
     }
 
-    @SuppressWarnings("unused")
-    private void debugAllLoadedClasses(final Collection<ObjectSpecification> allSpecs) {
-        final ImmutableList<String> specs = FluentIterable.from(allSpecs)
-                .transform((final ObjectSpecification objectSpecification)->
-                        objectSpecification.getCorrespondingClass().getName())
-                .toSortedList(Ordering.natural());
-        final String all = Joiner.on(",").join(specs);
-        System.out.println(all);
-    }
+//    @SuppressWarnings("unused")
+//    private void debugAllLoadedClasses(final Collection<ObjectSpecification> allSpecs) {
+//        final ImmutableList<String> specs = FluentIterable.from(allSpecs)
+//                .transform((final ObjectSpecification objectSpecification)->
+//                        objectSpecification.getCorrespondingClass().getName())
+//                .toSortedList(Ordering.natural());
+//        final String all = Joiner.on(",").join(specs);
+//        System.out.println(all);
+//    }
 
     void appendObjectPathsAndDefinitions() {
         // (previously we took a protective copy to avoid a concurrent modification exception,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 2de9176..9e508d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -17,6 +17,8 @@
 
 package org.apache.isis.core.metamodel.spec.feature;
 
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
+
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -25,8 +27,6 @@ import java.util.Set;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
-import com.google.common.collect.FluentIterable;
-
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -429,9 +429,8 @@ public interface ObjectAction extends ObjectMember {
 
             @Override
             public boolean test(final ObjectAction objectAction) {
-                return FluentIterable
-                        .from(objectAction.getParameters())
-                        .anyMatch(parameterPredicate::test);
+                return stream(objectAction.getParameters())
+                        .anyMatch(parameterPredicate);
             }
         }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 22c9711..c09e37e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -30,8 +30,6 @@ import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.google.common.collect.Collections2;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -330,8 +328,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
             for (final ActionType type : ActionType.values()) {
                 final List<ObjectAction> objectActionForType = objectActionsByType.get(type);
                 objectActionForType.clear();
-                objectActionForType.addAll(Collections2
-                        .filter(objectActions, ObjectAction.Predicates.ofType(type)::test));
+                objectActions.stream()
+                    .filter(ObjectAction.Predicates.ofType(type))
+                    .forEach(objectActionForType::add);
             }
         }
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckModuleExtent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckModuleExtent.java
index ebf01be..1e89613 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckModuleExtent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckModuleExtent.java
@@ -18,18 +18,19 @@
  */
 package org.apache.isis.core.metamodel.specloader.validator;
 
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.base.Joiner;
-
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.AppManifest2;
 import org.apache.isis.applib.Module;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -117,7 +118,8 @@ public class MetaModelValidatorToCheckModuleExtent extends MetaModelValidatorCom
                     List<String> domainObjectClassNames = domainObjectClassNamesByPackage.get(pkg);
                     boolean withinSomeModule = isWithinSomeModule(modulePackageNames, pkg);
                     if(!withinSomeModule) {
-                        String csv = Joiner.on(",").join(domainObjectClassNames);
+                        String csv = stream(domainObjectClassNames)
+                                .collect(Collectors.joining(","));
                         validationFailures.add(
                                 "Domain objects discovered in package '%s' are not in the set of modules obtained from "
                                         + "the AppManifest's top-level module '%s'.  Classes are: %s",
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckObjectSpecIdsUnique.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckObjectSpecIdsUnique.java
index a810e8d..6ecf92d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckObjectSpecIdsUnique.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorToCheckObjectSpecIdsUnique.java
@@ -18,11 +18,11 @@
  */
 package org.apache.isis.core.metamodel.specloader.validator;
 
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
+
 import java.util.List;
 import java.util.Map;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.FluentIterable;
+import java.util.stream.Collectors;
 
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
@@ -81,10 +81,9 @@ public class MetaModelValidatorToCheckObjectSpecIdsUnique extends MetaModelValid
             }
 
             private String asCsv(final List<ObjectSpecification> specList) {
-                return Joiner.on(",").join(
-                        FluentIterable.from(specList)
-                        .transform(ObjectSpecification.Functions.FULL_IDENTIFIER::apply)
-                        .toList());
+                return stream(specList)
+                        .map(ObjectSpecification.Functions.FULL_IDENTIFIER)
+                        .collect(Collectors.joining(","));
             }
 
         };
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java
index cf95e40..602a1f8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java
@@ -27,8 +27,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.Collections2;
-
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
@@ -108,7 +106,8 @@ public class AuthenticationManagerStandard implements AuthenticationManager {
             return null;
         }
 
-        final Collection<Authenticator> compatibleAuthenticators = Collections2.filter(authenticators, AuthenticatorFuncs.compatibleWith(request)::test);
+        final Collection<Authenticator> compatibleAuthenticators = 
+                _Lists.filter(authenticators, AuthenticatorFuncs.compatibleWith(request));
         if (compatibleAuthenticators.size() == 0) {
             throw new NoAuthenticatorException("No authenticator available for processing " + request.getClass().getName());
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
index 4a8c9e4..a585346 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/runner/opts/OptionValidator.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.runtime.runner.opts;
 
-import com.google.common.base.Optional;
+import java.util.Optional;
 
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/webapp/content/ResourceServlet.java b/core/metamodel/src/main/java/org/apache/isis/core/webapp/content/ResourceServlet.java
index 497394e..939633d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/webapp/content/ResourceServlet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/webapp/content/ResourceServlet.java
@@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.core.commons.lang.InputStreamExtensions;
 import org.apache.isis.core.commons.lang.ResourceUtil;
 import org.apache.isis.core.commons.lang.StringExtensions;
@@ -64,8 +64,8 @@ public class ResourceServlet extends HttpServlet {
     public void init(ServletConfig config) throws ServletException {
         super.init(config);
 
-        final String restfulPath = ifPresentElse(_Resource.getRestfulPathIfAny(), "restful");
-        final String restfulBase = _Resource.prependContextPathIfPresent(restfulPath);
+        final String restfulPath = ifPresentElse(_Resources.getRestfulPathIfAny(), "restful");
+        final String restfulBase = _Resources.prependContextPathIfPresent(restfulPath);
         templateVariables = new ResourceServlet_HtmlTemplateVariables(
                 pair("restful-base", prefix(restfulBase, "/"))
                 );
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
index bb194ba..258a1e8 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ordering/memberorder/DeweyOrderSetTest.java
@@ -20,18 +20,21 @@
 package org.apache.isis.core.metamodel.facets.ordering.memberorder;
 
 import java.util.List;
-import com.google.common.collect.ImmutableList;
+
 import org.hamcrest.Description;
 import org.jmock.Expectations;
 import org.jmock.api.Action;
 import org.jmock.api.Invocation;
 import org.junit.Rule;
+
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetAnnotation;
 import org.apache.isis.core.metamodel.layout.DeweyOrderSet;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
@@ -74,9 +77,9 @@ public class DeweyOrderSetTest extends TestCase {
     private final IdentifiedHolder houseNumberMember = FacetedMethod.createForProperty(Customer.class, "House Number");
     private final IdentifiedHolder streetNameMember = FacetedMethod.createForProperty(Customer.class, "Street Name");
     private final IdentifiedHolder postalTownMember = FacetedMethod.createForProperty(Customer.class, "Postal Town");
-    private final List<IdentifiedHolder> lastNameAndFirstName = ImmutableList.of(lastNameMember, firstNameMember);
-    private final List<IdentifiedHolder> nameAndAddressMembers = ImmutableList.of(lastNameMember, firstNameMember, houseNumberMember, streetNameMember, postalTownMember);
-    private final List<IdentifiedHolder> lastNameFirstNameAndPostalTown = ImmutableList.of(lastNameMember, firstNameMember, postalTownMember);
+    private final List<IdentifiedHolder> lastNameAndFirstName = _Lists.of(lastNameMember, firstNameMember);
+    private final List<IdentifiedHolder> nameAndAddressMembers = _Lists.of(lastNameMember, firstNameMember, houseNumberMember, streetNameMember, postalTownMember);
+    private final List<IdentifiedHolder> lastNameFirstNameAndPostalTown = _Lists.of(lastNameMember, firstNameMember, postalTownMember);
 
     TranslationService mockTranslationService;
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
index e0387b0..9333ea2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
@@ -18,14 +18,15 @@
  */
 package org.apache.isis.core.metamodel.services.grid;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 import java.util.Arrays;
 import java.util.Map;
 
 import javax.xml.bind.Marshaller;
 
-import com.google.common.collect.ImmutableMap;
-import org.apache.isis.commons.internal.collections._Lists;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -42,12 +43,10 @@ import org.apache.isis.applib.layout.grid.bootstrap3.BS3Tab;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3TabGroup;
 import org.apache.isis.applib.services.grid.GridSystemService;
 import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.services.grid.bootstrap3.GridSystemServiceBS3;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
 public class BS3GridTest {
 
     private JaxbService jaxbService;
@@ -140,12 +139,12 @@ public class BS3GridTest {
 
         final String schemaLocations = gridServiceDefault.tnsAndSchemaLocation(bs3Grid);
         String xml = jaxbService.toXml(bs3Grid,
-                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
+                _Maps.unmodifiable(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
         System.out.println(xml);
 
         BS3Grid bs3Pageroundtripped = jaxbService.fromXml(BS3Grid.class, xml);
         String xmlRoundtripped = jaxbService.toXml(bs3Pageroundtripped,
-                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
+                _Maps.unmodifiable(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
         assertThat(xml, is(equalTo(xmlRoundtripped)));
 
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java
index c8ee67d..0d0a508 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java
@@ -18,18 +18,16 @@
  */
 package org.apache.isis.core.metamodel.services.menubars;
 
-import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.Map;
 
-import com.google.common.base.Charsets;
-import com.google.common.io.Resources;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBars;
 import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.commons.internal.resources._Resources;
 
 public class BS3MenuBarsTest {
 
@@ -47,8 +45,8 @@ public class BS3MenuBarsTest {
     @Test
     public void happy_case() throws Exception {
 
-        URL resource = Resources.getResource(getClass(), "menubars.layout.xml");
-        BS3MenuBars menuBars = jaxbService.fromXml(BS3MenuBars.class, Resources.toString(resource, Charsets.UTF_8));
+        BS3MenuBars menuBars = jaxbService.fromXml(BS3MenuBars.class, 
+                _Resources.loadAsString(getClass(), "menubars.layout.xml", StandardCharsets.UTF_8));
 
         Map<String, String> schemas = jaxbService.toXsd(menuBars, JaxbService.IsisSchemas.INCLUDE);
         for (Map.Entry<String, String> entry : schemas.entrySet()) {
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index ed66721..9dfc2a0 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -93,6 +93,13 @@
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-metamodel</artifactId>
         </dependency>
+        
+        <!-- temporary until runtime no longer depends on guava -->
+        <dependency>
+        	<groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        
         <dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-metamodel</artifactId>
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
index b882ce9..a4559c9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
@@ -19,7 +19,7 @@
 package org.apache.isis.core.webapp;
 
 import static org.apache.isis.commons.internal.base._With.acceptIfPresent;
-import static org.apache.isis.commons.internal.resources._Resource.putContextPathIfPresent;
+import static org.apache.isis.commons.internal.resources._Resources.putContextPathIfPresent;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java
index 2dbd428..cf22749 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_RestEasy.java
@@ -24,7 +24,7 @@ import static org.apache.isis.commons.internal.base._Strings.prefix;
 import static org.apache.isis.commons.internal.base._Strings.suffix;
 import static org.apache.isis.commons.internal.context._Context.getDefaultClassLoader;
 import static org.apache.isis.commons.internal.exceptions._Exceptions.unexpectedCodeReach;
-import static org.apache.isis.commons.internal.resources._Resource.putRestfulPath;
+import static org.apache.isis.commons.internal.resources._Resources.putRestfulPath;
 
 import javax.servlet.FilterRegistration.Dynamic;
 import javax.servlet.ServletContext;
diff --git a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jaxb/JaxbMatchers.java b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jaxb/JaxbMatchers.java
index 87a59b9..f273c7d 100644
--- a/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jaxb/JaxbMatchers.java
+++ b/core/unittestsupport/src/main/java/org/apache/isis/core/unittestsupport/jaxb/JaxbMatchers.java
@@ -32,7 +32,7 @@ import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
 
@@ -86,7 +86,7 @@ class JaxbUtil2 {
             final String resourceName,
             final Charset charset,
             final Class<T> dtoClass) throws IOException {
-        final String s = _Resource.loadAsString(contextClass, resourceName, charset);
+        final String s = _Resources.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s), dtoClass);
     }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/Placement.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/Placement.java
index 628d41a..0f6694e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/Placement.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/navbar/Placement.java
@@ -18,14 +18,14 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.widgets.navbar;
 
-import org.apache.isis.commons.internal.resources._Resource;
+import org.apache.isis.commons.internal.resources._Resources;
 
 public enum Placement {
     HEADER,
     SIGNIN;
 
     String urlFor(final String logoHeaderUrl, final String logoSigninUrl) {
-        return _Resource.prependContextPathIfPresent(
+        return _Resources.prependContextPathIfPresent(
                 this == Placement.HEADER ? logoHeaderUrl : logoSigninUrl );
     }
 }