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/07/22 11:45:50 UTC

[isis] branch master updated (a56e58a -> 5440e08)

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

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


    from a56e58a  ISIS-2297: fixes broken logic from one before prev. commit
     new 071816d  ISIS-2815: some hosuekeeping around resource loading
     new 5440e08  ISIS-2815: TableColumnOrderServiceUsingTxtFile: fixes line parsing

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../isis/commons/internal/base/_Optionals.java     |   5 +-
 .../apache/isis/commons/internal/base/_With.java   |  52 +++----
 .../commons/internal/resources/_Resources.java     |  22 ++-
 .../TableColumnOrderServiceUsingTxtFile.java       |  26 ++--
 .../facets/FacetsFacetAnnotationFactoryTest.java   | 152 ---------------------
 5 files changed, 53 insertions(+), 204 deletions(-)
 delete mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/facets/FacetsFacetAnnotationFactoryTest.java

[isis] 02/02: ISIS-2815: TableColumnOrderServiceUsingTxtFile: fixes line parsing

Posted by ah...@apache.org.
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

commit 5440e08b255f23c3d80191243c3535ec96de775a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jul 22 13:44:07 2021 +0200

    ISIS-2815: TableColumnOrderServiceUsingTxtFile: fixes line parsing
    
    don't assume, the parsed files have the same newline characters as the
    system on which the application is running on
---
 .../TableColumnOrderServiceUsingTxtFile.java       | 26 ++++++++++------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java
index 9459f3e..20e05ba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/tablecol/TableColumnOrderServiceUsingTxtFile.java
@@ -19,23 +19,23 @@
 package org.apache.isis.core.metamodel.services.tablecol;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 import javax.annotation.Priority;
 import javax.inject.Named;
 
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.tablecol.TableColumnOrderService;
+import org.apache.isis.commons.internal.base._Text;
 import org.apache.isis.commons.internal.resources._Resources;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
 
-import lombok.extern.log4j.Log4j2;
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
 /**
  * Provides a simple mechanism to order the columns of both parented and standalone collections by reading a flat
@@ -69,8 +69,6 @@ import lombok.val;
 @Log4j2
 public class TableColumnOrderServiceUsingTxtFile implements TableColumnOrderService {
 
-    static final String LINE_SEPARATOR = System.getProperty("line.separator");
-
     /**
      * Reads propertyIds of the collection from a file named <i>ClassName#collectionId.columnOrder.txt</i>. relative
      * to the class itself.
@@ -93,12 +91,12 @@ public class TableColumnOrderServiceUsingTxtFile implements TableColumnOrderServ
             return null;
         }
         val s = contentsIfAny.get();
-        return Arrays.stream(s.split(LINE_SEPARATOR))
+        return _Text.getLines(s)
                 .filter(propertyIds::contains)
-                .collect(Collectors.toList());
+                .toList();
     }
 
-    private List<String> buildResourceNames(Class<?> domainClass, String collectionId) {
+    private List<String> buildResourceNames(final Class<?> domainClass, final String collectionId) {
         val resourceNames = new ArrayList<String>();
         addResourceNames(domainClass, collectionId, resourceNames);
         return resourceNames;
@@ -122,7 +120,7 @@ public class TableColumnOrderServiceUsingTxtFile implements TableColumnOrderServ
         addTo.add(String.format("%s#%s.columnOrder.txt", domainClass.getSimpleName(), collectionId));
     }
 
-    private static Optional<String> tryLoad(Class<?> domainClass, List<String> resourceNames) {
+    private static Optional<String> tryLoad(final Class<?> domainClass, final List<String> resourceNames) {
         for (String resourceName : resourceNames) {
             try {
                 final String contents = _Resources.loadAsStringUtf8(domainClass, resourceName);
@@ -158,12 +156,12 @@ public class TableColumnOrderServiceUsingTxtFile implements TableColumnOrderServ
             return null;
         }
         val s = contentsIfAny.get();
-        return Arrays.stream(s.split(LINE_SEPARATOR))
+        return _Text.getLines(s)
                 .filter(propertyIds::contains)
-                .collect(Collectors.toList());
+                .toList();
     }
 
-    private List<String> buildResourceNames(Class<?> domainClass) {
+    private List<String> buildResourceNames(final Class<?> domainClass) {
         val resourceNames = new ArrayList<String>();
         addResourceNames(domainClass, resourceNames);
         return resourceNames;

[isis] 01/02: ISIS-2815: some hosuekeeping around resource loading

Posted by ah...@apache.org.
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

commit 071816d3f1326b8a3c219c7c76dce0c6ea30f8be
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jul 22 13:41:05 2021 +0200

    ISIS-2815: some hosuekeeping around resource loading
---
 .../isis/commons/internal/base/_Optionals.java     |   5 +-
 .../apache/isis/commons/internal/base/_With.java   |  52 +++----
 .../commons/internal/resources/_Resources.java     |  22 ++-
 .../facets/FacetsFacetAnnotationFactoryTest.java   | 152 ---------------------
 4 files changed, 41 insertions(+), 190 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/internal/base/_Optionals.java b/commons/src/main/java/org/apache/isis/commons/internal/base/_Optionals.java
index 5240b30..a0f67b9 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/base/_Optionals.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/base/_Optionals.java
@@ -26,7 +26,10 @@ import lombok.experimental.UtilityClass;
 @UtilityClass
 public class _Optionals {
 
-    // can be replaced by Java 9 firstOptional.or(() -> secondOptional);
+    /**
+     * @deprecated since Java 9 can be replaced with {@code firstOptional.or(() -> secondOptional)};
+     */
+    @Deprecated
     public static <T> Optional<T> or(
             final Optional<? extends T> a,
             final Supplier<Optional<? extends T>> b) {
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java b/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
index 5c52622..fd045ce 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
@@ -58,7 +58,7 @@ public final class _With<T> {
      * @param orElse (nullable)
      * @return {@code obj!=null ? obj : orElse}
      */
-    public static <X> X ifPresentElse(@Nullable X obj, @Nullable X orElse) {
+    public static <X> X ifPresentElse(@Nullable final X obj, @Nullable final X orElse) {
         return obj!=null ? obj : orElse;
     }
 
@@ -68,7 +68,7 @@ public final class _With<T> {
      * @param elseGet
      * @return {@code obj!=null ? obj : elseGet.get()}
      */
-    public static <X> X ifPresentElseGet(@Nullable X obj, Supplier<X> elseGet) {
+    public static <X> X ifPresentElseGet(@Nullable final X obj, final Supplier<X> elseGet) {
         return obj!=null ? obj : requires(elseGet, "elseGet").get();
     }
 
@@ -80,8 +80,8 @@ public final class _With<T> {
      * @throws E
      */
     public static <X, E extends Exception> X ifPresentElseThrow(
-            @Nullable X obj,
-            Supplier<E> elseThrow)
+            @Nullable final X obj,
+            final Supplier<E> elseThrow)
                     throws E {
         if(obj!=null) {
             return obj;
@@ -97,7 +97,7 @@ public final class _With<T> {
      * @param consumer
      * @return {@code obj}
      */
-    public static <X> X accept(@Nullable X obj, Consumer<X> consumer) {
+    public static <X> X accept(@Nullable final X obj, final Consumer<X> consumer) {
         requires(consumer, "consumer").accept(obj);
         return obj;
     }
@@ -108,7 +108,7 @@ public final class _With<T> {
      * @param ifPresent
      * @return {@code obj}
      */
-    public static <X> X acceptIfPresent(@Nullable X obj, Consumer<X> ifPresent) {
+    public static <X> X acceptIfPresent(@Nullable final X obj, final Consumer<X> ifPresent) {
         if(obj!=null) {
             requires(ifPresent, "ifPresent").accept(obj);
         }
@@ -123,7 +123,7 @@ public final class _With<T> {
      * @param elseRun
      * @return {@code obj}
      */
-    public static <X> X acceptIfPresentElseRun(@Nullable X obj, Consumer<X> ifPresent, Runnable elseRun) {
+    public static <X> X acceptIfPresentElseRun(@Nullable final X obj, final Consumer<X> ifPresent, final Runnable elseRun) {
         if(obj!=null) {
             requires(ifPresent, "ifPresent").accept(obj);
         } else {
@@ -142,7 +142,7 @@ public final class _With<T> {
      * @throws E
      */
     public static <X, E extends Exception> X acceptIfPresentElseThrow(
-            @Nullable X obj, Consumer<X> ifPresent, Supplier<E> elseThrow)
+            @Nullable final X obj, final Consumer<X> ifPresent, final Supplier<E> elseThrow)
                     throws E {
 
         if(obj!=null) {
@@ -160,7 +160,7 @@ public final class _With<T> {
      * @param supplier
      * @return {@code obj!=null ? obj : supplier.get()}
      */
-    public static <X> X computeIfAbsent(@Nullable X obj, Supplier<X> supplier) {
+    public static <X> X computeIfAbsent(@Nullable final X obj, final Supplier<X> supplier) {
         return obj!=null ? obj : requires(supplier, "supplier").get();
     }
 
@@ -173,7 +173,7 @@ public final class _With<T> {
      * @param orElse (nullable)
      * @return {@code obj!=null ? mapper.apply(obj) : orElse}
      */
-    public static <X, R> R mapIfPresentElse(@Nullable X obj, Function<X, R> mapper, @Nullable R orElse) {
+    public static <X, R> R mapIfPresentElse(@Nullable final X obj, final Function<X, R> mapper, @Nullable final R orElse) {
         return obj!=null ? requires(mapper, "mapper").apply(obj) : orElse;
     }
 
@@ -184,7 +184,7 @@ public final class _With<T> {
      * @param elseGet
      * @return {@code obj!=null ? mapper.apply(obj) : elseGet.get()}
      */
-    public static <X, R> R mapIfPresentElseGet(@Nullable X obj, Function<X, R> mapper, Supplier<R> elseGet) {
+    public static <X, R> R mapIfPresentElseGet(@Nullable final X obj, final Function<X, R> mapper, final Supplier<R> elseGet) {
         return obj!=null ? requires(mapper, "mapper").apply(obj) : requires(elseGet, "elseGet").get();
     }
 
@@ -197,9 +197,9 @@ public final class _With<T> {
      * @throws E
      */
     public static <X, R, E extends Exception> R mapIfPresentElseThrow(
-            @Nullable X obj,
-            Function<X, R> mapper,
-            Supplier<E> elseThrow)
+            @Nullable final X obj,
+            final Function<X, R> mapper,
+            final Supplier<E> elseThrow)
                     throws E {
         if(obj!=null) {
             return requires(mapper, "mapper").apply(obj);
@@ -215,8 +215,10 @@ public final class _With<T> {
      * @param paramName to use for the exception message, when the non-null-check fails
      * @return {@code obj!=null ? obj : throw NullPointerException}
      * @throws NullPointerException if {@code obj} is {@code null}
+     * @deprecated use {@code @lombok.NonNull} on the parameter instead
      */
-    public static <T> T requires(@Nullable T obj, String paramName) {
+    @Deprecated
+    public static <T> T requires(@Nullable final T obj, final String paramName) {
         if (obj == null) {
             val msg = String.format("Parameter/Field '%s' is required to be present (not null).", paramName);
             throw new IllegalArgumentException(msg);
@@ -234,7 +236,7 @@ public final class _With<T> {
      * @throws NullPointerException if {@code obj} is {@code null}
      * @throws IllegalArgumentException if {@code obj} is 'empty'
      */
-    public static String requiresNotEmpty(@Nullable String obj, String paramName) {
+    public static String requiresNotEmpty(@Nullable final String obj, final String paramName) {
         if (obj == null) {
             throw new NullPointerException(String.format("Parameter/Field '%s' is required to be present (not null).", paramName));
         }
@@ -252,7 +254,7 @@ public final class _With<T> {
      * @param initializer
      * @return a new Object as provided by {@code factory} after calling the {@code initializer} on it
      */
-    public static <T> T create(Supplier<T> factory, Consumer<T> initializer) {
+    public static <T> T create(final Supplier<T> factory, final Consumer<T> initializer) {
         return accept(factory.get(), initializer);
     }
 
@@ -261,7 +263,7 @@ public final class _With<T> {
      * @param initializer
      * @return a new ArrayList after calling the {@code initializer} on it
      */
-    public static <X> ArrayList<X> arrayList(Consumer<ArrayList<X>> initializer) {
+    public static <X> ArrayList<X> arrayList(final Consumer<ArrayList<X>> initializer) {
         return create(ArrayList::new, initializer);
     }
 
@@ -270,7 +272,7 @@ public final class _With<T> {
      * @param initializer
      * @return a new HashSet after calling the {@code initializer} on it
      */
-    public static <X> HashSet<X> hashSet(Consumer<HashSet<X>> initializer) {
+    public static <X> HashSet<X> hashSet(final Consumer<HashSet<X>> initializer) {
         return create(HashSet::new, initializer);
     }
 
@@ -279,7 +281,7 @@ public final class _With<T> {
      * @param initializer
      * @return a new TreeSet after calling the {@code initializer} on it
      */
-    public static <X> TreeSet<X> treeSet(Consumer<TreeSet<X>> initializer) {
+    public static <X> TreeSet<X> treeSet(final Consumer<TreeSet<X>> initializer) {
         return create(TreeSet::new, initializer);
     }
 
@@ -288,7 +290,7 @@ public final class _With<T> {
      * @param initializer
      * @return a new HashMap after calling the {@code initializer} on it
      */
-    public static <K, V> HashMap<K, V> hashMap(Consumer<HashMap<K, V>> initializer) {
+    public static <K, V> HashMap<K, V> hashMap(final Consumer<HashMap<K, V>> initializer) {
         return accept(new HashMap<K, V>(), initializer);
     }
 
@@ -297,7 +299,7 @@ public final class _With<T> {
      * @param initializer
      * @return a new TreeMap after calling the {@code initializer} on it
      */
-    public static <K, V> TreeMap<K, V> treeMap(Consumer<TreeMap<K, V>> initializer) {
+    public static <K, V> TreeMap<K, V> treeMap(final Consumer<TreeMap<K, V>> initializer) {
         return accept(new TreeMap<K, V>(), initializer);
     }
 
@@ -306,7 +308,7 @@ public final class _With<T> {
      * @param initializer
      * @return a new StringBuilder after calling the {@code initializer} on it
      */
-    public static StringBuilder stringBuilder(Consumer<StringBuilder> initializer) {
+    public static StringBuilder stringBuilder(final Consumer<StringBuilder> initializer) {
         return create(StringBuilder::new, initializer);
     }
 
@@ -316,7 +318,7 @@ public final class _With<T> {
      * Returns Optional of the callable's result after invocation. Any exception during
      * invocation will result in an empty Optional.
      */
-    public static <T> Optional<T> tryCall(Callable<T> callable) {
+    public static <T> Optional<T> tryCall(final Callable<T> callable) {
         try {
             val result = callable.call();
             return Optional.ofNullable(result);
@@ -329,7 +331,7 @@ public final class _With<T> {
      * Returns the callable's result after invocation. Any exception during
      * invocation will result in the defaultValue being returned instead.
      */
-    public static <T> T tryOrDefault(Callable<T> callable, T defaultValue) {
+    public static <T> T tryOrDefault(final Callable<T> callable, final T defaultValue) {
         try {
             return callable.call();
         } catch (Exception e) {
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java b/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
index a45804c..e569ded 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
@@ -30,10 +30,10 @@ import javax.annotation.Nullable;
 
 import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.base._With;
 import org.apache.isis.commons.internal.context._Context;
 
 import lombok.NonNull;
+import lombok.SneakyThrows;
 import lombok.val;
 
 /**
@@ -57,14 +57,13 @@ public final class _Resources {
      * @param resourceName
      * @return An input stream for reading the resource, or null if the resource could not be found.
      */
+    @SneakyThrows
     public static @Nullable InputStream load(
             final @NonNull Class<?> contextClass,
             final @NonNull String resourceName) {
 
         val absoluteResourceName = resolveName(resourceName, contextClass);
-
-        return _Context.getDefaultClassLoader()
-                .getResourceAsStream(absoluteResourceName);
+        return _Context.getDefaultClassLoader().getResourceAsStream(absoluteResourceName);
     }
 
     /**
@@ -76,7 +75,7 @@ public final class _Resources {
      * @return The resource as a String, or null if the resource could not be found.
      * @throws IOException
      */
-    public static String loadAsString(
+    public static @Nullable String loadAsString(
             final @NonNull Class<?> contextClass,
             final @NonNull String resourceName,
             final @NonNull Charset charset) throws IOException {
@@ -88,7 +87,7 @@ public final class _Resources {
     /**
      * Shortcut using Charset UTF-8, see {@link #loadAsString(Class, String, Charset)}
      */
-    public static String loadAsStringUtf8(
+    public static @Nullable String loadAsStringUtf8(
             final @NonNull Class<?> contextClass,
             final @NonNull String resourceName) throws IOException {
         return loadAsString(contextClass, resourceName, StandardCharsets.UTF_8);
@@ -98,12 +97,12 @@ public final class _Resources {
      * @param resourceName
      * @return The resource location as an URL, or null if the resource could not be found.
      */
-    public static URL getResourceUrl(
+    public static @Nullable URL getResourceUrl(
             final @NonNull Class<?> contextClass,
             final @NonNull String resourceName) {
 
-        _With.requires(resourceName, "resourceName");
         final String absoluteResourceName = resolveName(resourceName, contextClass);
+
         return _Context.getDefaultClassLoader().getResource(absoluteResourceName);
     }
 
@@ -118,8 +117,7 @@ public final class _Resources {
      * to the web-app's context root.
      * @param resourcePath
      */
-    public static boolean isLocalResource(String resourcePath) {
-        _With.requires(resourcePath, "resourcePath");
+    public static boolean isLocalResource(final @NonNull String resourcePath) {
         return !externalResourcePattern.test(resourcePath);
     }
 
@@ -130,7 +128,7 @@ public final class _Resources {
      * @param extendee
      * @param suffix
      */
-    public static String combinePath(@Nullable String extendee, @Nullable String suffix) {
+    public static String combinePath(@Nullable final String extendee, @Nullable final String suffix) {
         return _Strings.combineWithDelimiter(extendee, suffix, "/");
     }
 
@@ -140,7 +138,7 @@ public final class _Resources {
      *
      * Adapted copy of JDK 8 Class::resolveName
      */
-    private static String resolveName(String name, Class<?> contextClass) {
+    private static String resolveName(String name, final Class<?> contextClass) {
         if (name == null) {
             return name;
         }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/facets/FacetsFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/facets/FacetsFacetAnnotationFactoryTest.java
deleted file mode 100644
index 5359eec..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/facets/FacetsFacetAnnotationFactoryTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.facets;
-
-import org.apache.isis.applib.annotation.Facets;
-import org.apache.isis.commons.collections.ImmutableEnumSet;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.facets.annotation.FacetsFacetAnnotation;
-import org.apache.isis.core.metamodel.facets.object.facets.annotation.FacetsFacetAnnotationFactory;
-
-public class FacetsFacetAnnotationFactoryTest extends AbstractFacetFactoryTest {
-
-    private FacetsFacetAnnotationFactory facetFactory;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        facetFactory = new FacetsFacetAnnotationFactory(metaModelContext);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        facetFactory = null;
-        super.tearDown();
-    }
-
-    public static class CustomerFacetFactory implements FacetFactory {
-        @Override
-        public ImmutableEnumSet<FeatureType> getFeatureTypes() {
-            return ImmutableEnumSet.noneOf(FeatureType.class);
-        }
-
-        @Override
-        public void process(final ProcessClassContext processClassContaxt) {
-        }
-
-        @Override
-        public void process(final ProcessMethodContext processMethodContext) {
-        }
-
-        @Override
-        public void processParams(final ProcessParameterContext processParameterContext) {
-        }
-    }
-
-    public static class CustomerFacetFactory2 implements FacetFactory {
-        @Override
-        public ImmutableEnumSet<FeatureType> getFeatureTypes() {
-            return ImmutableEnumSet.noneOf(FeatureType.class);
-        }
-
-        @Override
-        public void process(final ProcessClassContext processClassContaxt) {
-        }
-
-        @Override
-        public void process(final ProcessMethodContext processMethodContext) {
-        }
-
-        @Override
-        public void processParams(final ProcessParameterContext processParameterContext) {
-        }
-    }
-
-    public void testFacetsFactoryNames() {
-        @Facets(facetFactoryNames = { "org.apache.isis.core.metamodel.facets.object.facets.FacetsFacetAnnotationFactoryTest$CustomerFacetFactory", "FacetsFacetAnnotationFactoryTest$CustomerNotAFacetFactory" })
-        class Customer {
-        }
-
-        facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
-
-        final Facet facet = facetedMethod.getFacet(FacetsFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof FacetsFacetAnnotation);
-        final FacetsFacetAnnotation facetsFacet = (FacetsFacetAnnotation) facet;
-        final Class<? extends FacetFactory>[] facetFactories = facetsFacet.facetFactories();
-        assertEquals(1, facetFactories.length);
-        assertEquals(CustomerFacetFactory.class, facetFactories[0]);
-
-        assertNoMethodsRemoved();
-    }
-
-    public void testFacetsFactoryClass() {
-        @Facets(facetFactoryClasses = { FacetsFacetAnnotationFactoryTest.CustomerFacetFactory.class, FacetsFacetAnnotationFactoryTest.CustomerNotAFacetFactory.class })
-        class Customer {
-        }
-
-        facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
-
-        final Facet facet = facetedMethod.getFacet(FacetsFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof FacetsFacetAnnotation);
-        final FacetsFacetAnnotation facetsFacet = (FacetsFacetAnnotation) facet;
-        final Class<? extends FacetFactory>[] facetFactories = facetsFacet.facetFactories();
-        assertEquals(1, facetFactories.length);
-        assertEquals(CustomerFacetFactory.class, facetFactories[0]);
-    }
-
-    public static class CustomerNotAFacetFactory {
-    }
-
-    public void testFacetsFactoryNameAndClass() {
-        @Facets(facetFactoryNames = { "org.apache.isis.core.metamodel.facets.object.facets.FacetsFacetAnnotationFactoryTest$CustomerFacetFactory" }, facetFactoryClasses = { FacetsFacetAnnotationFactoryTest.CustomerFacetFactory2.class })
-        class Customer {
-        }
-
-        facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
-
-        final Facet facet = facetedMethod.getFacet(FacetsFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof FacetsFacetAnnotation);
-        final FacetsFacetAnnotation facetsFacet = (FacetsFacetAnnotation) facet;
-        final Class<? extends FacetFactory>[] facetFactories = facetsFacet.facetFactories();
-        assertEquals(2, facetFactories.length);
-        assertEquals(CustomerFacetFactory.class, facetFactories[0]);
-        assertEquals(CustomerFacetFactory2.class, facetFactories[1]);
-    }
-
-    public void testFacetsFactoryNoop() {
-        @Facets
-        class Customer {
-        }
-
-        facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
-
-        final Facet facet = facetedMethod.getFacet(FacetsFacet.class);
-        assertNull(facet);
-    }
-
-}