You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/27 00:29:14 UTC

[5/7] isis git commit: ISIS-1410: combining multiple facet factories that all remove methods into a single one.

ISIS-1410: combining multiple facet factories that all remove methods into a single one.

Also deprecated RemoveStaticGettersAndSettersFacetFactory


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/8e85fe0b
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/8e85fe0b
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/8e85fe0b

Branch: refs/heads/master
Commit: 8e85fe0bbbd47f6ea3f586dffadecf102c12beb3
Parents: 76b6628
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri May 27 00:28:35 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri May 27 00:28:35 2016 +0100

----------------------------------------------------------------------
 ...DatanucleusPersistableTypesFacetFactory.java |  43 ++++-
 ...DomainObjectContainerMethodFacetFactory.java |  42 -----
 ...moveStaticGettersAndSettersFacetFactory.java |   1 +
 .../AbstractRemoveMethodsFacetFactory.java      |  81 ---------
 .../RemoveGetClassMethodFacetFactory.java       |  44 -----
 .../javalang/RemoveInitMethodFacetFactory.java  |  40 -----
 .../RemoveInjectMethodsFacetFactory.java        |  50 ------
 ...veJavaLangComparableMethodsFacetFactory.java |  49 ------
 ...RemoveJavaLangObjectMethodsFacetFactory.java |  31 ----
 .../javalang/RemoveMethodsFacetFactory.java     | 168 +++++++++++++++++++
 .../RemoveSuperclassMethodsFacetFactory.java    |  65 -------
 ...eSyntheticOrAbstractMethodsFacetFactory.java |  52 ------
 .../RemoveJdoEnhancementTypesFacetFactory.java  |  40 ++++-
 .../dflt/ProgrammingModelFacetsJava5.java       |  18 +-
 .../SpecificationLoaderTestAbstract.java        |   6 +-
 15 files changed, 251 insertions(+), 479 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java
index da22e87..9ea4a60 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/datanucleus/RemoveDatanucleusPersistableTypesFacetFactory.java
@@ -16,15 +16,52 @@
  */
 package org.apache.isis.core.metamodel.facets.object.ignore.datanucleus;
 
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.AbstractRemoveMethodsFacetFactory;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.factory.InstanceUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveMethodsFacetFactory;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
 
 /**
  * Removes all methods inherited from <tt>org.datanucleus.enhancement.Persistable</tt> (if datanucleus 4.1.x is on the classpath).
  */
-public class RemoveDatanucleusPersistableTypesFacetFactory extends AbstractRemoveMethodsFacetFactory {
+public class RemoveDatanucleusPersistableTypesFacetFactory extends FacetFactoryAbstract {
+
+    private final List<RemoveMethodsFacetFactory.MethodAndParameterTypes> datanucleusPersistableMethodsToIgnore = Lists.newArrayList();
 
     public RemoveDatanucleusPersistableTypesFacetFactory() {
-        super("org.datanucleus.enhancement.Persistable");
+        super(FeatureType.OBJECTS_ONLY);
+
+        final String typeToIgnoreIfOnClasspath = "org.datanucleus.enhancement.Persistable";
+        try {
+            Class<?> typeToIgnore = InstanceUtil.loadClass(typeToIgnoreIfOnClasspath);
+            addMethodsToBeIgnored(typeToIgnore);
+        } catch(Exception ex) {
+            // ignore
+        }
+    }
+
+    private void addMethodsToBeIgnored(Class<?> typeToIgnore) {
+        final Method[] methods = typeToIgnore.getMethods();
+        for (final Method method : methods) {
+            datanucleusPersistableMethodsToIgnore
+                    .add(new RemoveMethodsFacetFactory.MethodAndParameterTypes(method.getName(), method.getParameterTypes()));
+        }
     }
 
+    @Override
+    public void process(final ProcessClassContext processClassContext) {
+        for (final RemoveMethodsFacetFactory.MethodAndParameterTypes mapt : datanucleusPersistableMethodsToIgnore) {
+            processClassContext.removeMethod(MethodScope.OBJECT, mapt.methodName, null, mapt.methodParameters);
+        }
+    }
+
+
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveSetDomainObjectContainerMethodFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveSetDomainObjectContainerMethodFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveSetDomainObjectContainerMethodFacetFactory.java
deleted file mode 100644
index 1c25439..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveSetDomainObjectContainerMethodFacetFactory.java
+++ /dev/null
@@ -1,42 +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.ignore.isis;
-
-import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.methodutils.MethodScope;
-
-/**
- * Removes any calls to <tt>setContainer(DomainObjectContainer)</tt>.
- */
-public class RemoveSetDomainObjectContainerMethodFacetFactory extends FacetFactoryAbstract {
-
-    public RemoveSetDomainObjectContainerMethodFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        processClassContext.removeMethod(MethodScope.OBJECT, "setContainer", void.class, new Class[] { DomainObjectContainer.class });
-        processClassContext.removeMethod(MethodScope.OBJECT, "set_Container", void.class, new Class[] { DomainObjectContainer.class });
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java
index e3c83ac..6dc20cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java
@@ -26,6 +26,7 @@ import org.apache.isis.core.metamodel.methodutils.MethodScope;
 /**
  * Removes any static getter or setter methods.
  */
+@Deprecated
 public class RemoveStaticGettersAndSettersFacetFactory extends FacetFactoryAbstract {
 
     public RemoveStaticGettersAndSettersFacetFactory() {

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/AbstractRemoveMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/AbstractRemoveMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/AbstractRemoveMethodsFacetFactory.java
deleted file mode 100644
index 87c139d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/AbstractRemoveMethodsFacetFactory.java
+++ /dev/null
@@ -1,81 +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.ignore.javalang;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.core.commons.factory.InstanceUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.methodutils.MethodScope;
-
-/**
- * Removes all methods inherited specified class.
- */
-public abstract class AbstractRemoveMethodsFacetFactory extends FacetFactoryAbstract {
-
-    private static class MethodAndParameterTypes {
-        private final String methodName;
-        private final Class<?>[] methodParameters;
-
-        public MethodAndParameterTypes(final String methodName, final Class<?>[] methodParameters) {
-            this.methodName = methodName;
-            this.methodParameters = methodParameters;
-        }
-    }
-
-    private final List<MethodAndParameterTypes> methodsToIgnore = Lists.newArrayList();
-
-    public AbstractRemoveMethodsFacetFactory(final Class<?> typeToIgnore) {
-        super(FeatureType.OBJECTS_ONLY);
-        final Method[] methods = typeToIgnore.getMethods();
-        for (final Method method : methods) {
-            methodsToIgnore.add(new MethodAndParameterTypes(method.getName(), method.getParameterTypes()));
-        }
-    }
-
-    public AbstractRemoveMethodsFacetFactory(final String typeToIgnoreIfOnClasspath) {
-        super(FeatureType.OBJECTS_ONLY);
-        try {
-            Class<?> typeToIgnore = InstanceUtil.loadClass(typeToIgnoreIfOnClasspath);
-            addMethodsToBeIgnored(typeToIgnore);
-        } catch(Exception ex) {
-            // ignore
-        }
-    }
-
-    private void addMethodsToBeIgnored(Class<?> typeToIgnore) {
-        final Method[] methods = typeToIgnore.getMethods();
-        for (final Method method : methods) {
-            methodsToIgnore.add(new MethodAndParameterTypes(method.getName(), method.getParameterTypes()));
-        }
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        for (final MethodAndParameterTypes mapt : methodsToIgnore) {
-            processClassContext.removeMethod(MethodScope.OBJECT, mapt.methodName, null, mapt.methodParameters);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveGetClassMethodFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveGetClassMethodFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveGetClassMethodFacetFactory.java
deleted file mode 100644
index 781f640..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveGetClassMethodFacetFactory.java
+++ /dev/null
@@ -1,44 +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.ignore.javalang;
-
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.methodutils.MethodScope;
-
-/**
- * Removes any static getter or setter methods.
- * 
- * <p>
- * TODO: this is probably redundant given we also have
- * {@link RemoveJavaLangObjectMethodsFacetFactory}.
- */
-public class RemoveGetClassMethodFacetFactory extends FacetFactoryAbstract {
-
-    public RemoveGetClassMethodFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        processClassContext.removeMethod(MethodScope.OBJECT, "getClass", Class.class, null);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInitMethodFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInitMethodFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInitMethodFacetFactory.java
deleted file mode 100644
index 2223dc0..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInitMethodFacetFactory.java
+++ /dev/null
@@ -1,40 +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.ignore.javalang;
-
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.methodutils.MethodScope;
-
-/**
- * Removes any calls to <tt>init</tt>.
- */
-public class RemoveInitMethodFacetFactory extends FacetFactoryAbstract {
-
-    public RemoveInitMethodFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        processClassContext.removeMethod(MethodScope.OBJECT, "init", void.class, new Class[0]);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java
deleted file mode 100644
index 7995d49..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveInjectMethodsFacetFactory.java
+++ /dev/null
@@ -1,50 +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.ignore.javalang;
-
-import java.lang.reflect.Method;
-import java.util.List;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
-import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
-
-public class RemoveInjectMethodsFacetFactory extends FacetFactoryAbstract  {
-
-    private final InjectorMethodEvaluator injectorMethodEvaluator = new InjectorMethodEvaluatorDefault();
-
-    public RemoveInjectMethodsFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final List<Class<?>> serviceClasses = getSpecificationLoader().allServiceClasses();
-        for (Class<? extends Object> serviceClass : serviceClasses) {
-            Method[] methods = processClassContext.getCls().getMethods();
-            for (Method method : methods) {
-                if(injectorMethodEvaluator.isInjectorMethodFor(method, serviceClass)) {
-                    processClassContext.removeMethod(method);
-                }
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangComparableMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangComparableMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangComparableMethodsFacetFactory.java
deleted file mode 100644
index a162c20..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangComparableMethodsFacetFactory.java
+++ /dev/null
@@ -1,49 +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.ignore.javalang;
-
-import java.lang.reflect.Method;
-
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-
-/**
- * Removes all methods called <tt>compareTo</tt>.
- */
-public class RemoveJavaLangComparableMethodsFacetFactory extends FacetFactoryAbstract {
-
-    public RemoveJavaLangComparableMethodsFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        super.process(processClassContext);
-        Class<?> cls = processClassContext.getCls();
-        Method[] methods = cls.getMethods(); // not getDeclaredMethods !!!
-        for (Method method : methods) {
-            if(method.getName().equals("compareTo")) {
-                processClassContext.removeMethod(method);
-            }
-            
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangObjectMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangObjectMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangObjectMethodsFacetFactory.java
deleted file mode 100644
index 93a395e..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveJavaLangObjectMethodsFacetFactory.java
+++ /dev/null
@@ -1,31 +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.ignore.javalang;
-
-/**
- * Removes all methods inherited from {@link Object}.
- */
-public class RemoveJavaLangObjectMethodsFacetFactory extends AbstractRemoveMethodsFacetFactory {
-
-    public RemoveJavaLangObjectMethodsFacetFactory() {
-        super(Object.class);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveMethodsFacetFactory.java
new file mode 100644
index 0000000..565e5c9
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveMethodsFacetFactory.java
@@ -0,0 +1,168 @@
+/*
+ *  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.ignore.javalang;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.core.commons.lang.ClassExtensions;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
+import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
+import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
+
+/**
+ * Designed to simply filter out any synthetic methods.
+ * 
+ * <p>
+ * Does not add any {@link Facet}s.
+ */
+public class RemoveMethodsFacetFactory extends FacetFactoryAbstract {
+
+    @SuppressWarnings("unused")
+    private static final String JAVA_CLASS_PREFIX = "java.";
+
+    public static class MethodAndParameterTypes {
+        public final String methodName;
+        public final Class<?>[] methodParameters;
+
+        public MethodAndParameterTypes(final String methodName, final Class<?>[] methodParameters) {
+            this.methodName = methodName;
+            this.methodParameters = methodParameters;
+        }
+    }
+
+
+    private final InjectorMethodEvaluator injectorMethodEvaluator = new InjectorMethodEvaluatorDefault();
+
+    private final List<MethodAndParameterTypes> javaLangObjectMethodsToIgnore = Lists.newArrayList();
+
+
+    public RemoveMethodsFacetFactory() {
+        super(FeatureType.OBJECTS_ONLY);
+
+        final Class<?> typeToIgnore = Object.class;
+
+        final Method[] methods = typeToIgnore.getMethods();
+        for (final Method method : methods) {
+            javaLangObjectMethodsToIgnore
+                    .add(new RemoveMethodsFacetFactory.MethodAndParameterTypes(method.getName(), method.getParameterTypes()));
+        }
+
+    }
+
+    @Override
+    public void process(final ProcessClassContext processClassContext) {
+        super.process(processClassContext);
+
+        removeSyntheticOrAbstractMethods(processClassContext);
+        removeSuperclassMethods(processClassContext.getCls(), processClassContext);
+
+        removeJavaLangObjectMethods(processClassContext);
+        removeJavaLangComparable(processClassContext);
+
+        removeSetDomainObjectContainerMethod(processClassContext);
+        removeInitMethod(processClassContext);
+
+        removeInjectMethods(processClassContext);
+
+        removeGetClass(processClassContext);
+    }
+
+    private void removeSyntheticOrAbstractMethods(final ProcessClassContext processClassContext) {
+        Class<?> cls = processClassContext.getCls();
+        Method[] methods = cls.getMethods();
+        for (Method method : methods) {
+            if (method.isSynthetic() || Modifier.isAbstract(method.getModifiers())) {
+                processClassContext.removeMethod(method);
+            }
+        }
+    }
+
+    private void removeSuperclassMethods(Class<?> type, final ProcessClassContext processClassContext) {
+        if (type == null) {
+            return;
+        }
+
+        if (!ClassExtensions.isJavaClass(type)) {
+            removeSuperclassMethods(type.getSuperclass(), processClassContext);
+            return;
+        }
+
+        final Method[] methods = type.getMethods();
+        for (final Method method : methods) {
+            processClassContext.removeMethod(method);
+        }
+
+    }
+
+    private void removeJavaLangObjectMethods(final ProcessClassContext processClassContext) {
+        for (final RemoveMethodsFacetFactory.MethodAndParameterTypes mapt : javaLangObjectMethodsToIgnore) {
+            processClassContext.removeMethod(MethodScope.OBJECT, mapt.methodName, null, mapt.methodParameters);
+        }
+    }
+
+
+    private void removeJavaLangComparable(final ProcessClassContext processClassContext) {
+        Class<?> cls = processClassContext.getCls();
+        Method[] methods = cls.getMethods(); // not getDeclaredMethods !!!
+        for (Method method : methods) {
+            if(method.getName().equals("compareTo")) {
+                processClassContext.removeMethod(method);
+            }
+
+        }
+    }
+
+    private void removeSetDomainObjectContainerMethod(final ProcessClassContext processClassContext) {
+        processClassContext.removeMethod(
+                MethodScope.OBJECT, "setContainer", void.class, new Class[] { DomainObjectContainer.class });
+        processClassContext.removeMethod(MethodScope.OBJECT, "set_Container", void.class, new Class[] { DomainObjectContainer.class });
+    }
+
+
+    private void removeInitMethod(final ProcessClassContext processClassContext) {
+        processClassContext.removeMethod(MethodScope.OBJECT, "init", void.class, new Class[0]);
+    }
+
+
+    private void removeInjectMethods(final ProcessClassContext processClassContext) {
+        final List<Class<?>> serviceClasses = getSpecificationLoader().allServiceClasses();
+        for (Class<? extends Object> serviceClass : serviceClasses) {
+            Method[] methods = processClassContext.getCls().getMethods();
+            for (Method method : methods) {
+                if(injectorMethodEvaluator.isInjectorMethodFor(method, serviceClass)) {
+                    processClassContext.removeMethod(method);
+                }
+            }
+        }
+    }
+
+    private void removeGetClass(final ProcessClassContext processClassContext) {
+        processClassContext.removeMethod(MethodScope.OBJECT, "getClass", Class.class, null);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSuperclassMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSuperclassMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSuperclassMethodsFacetFactory.java
deleted file mode 100644
index 163ce79..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSuperclassMethodsFacetFactory.java
+++ /dev/null
@@ -1,65 +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.ignore.javalang;
-
-import java.lang.reflect.Method;
-
-import org.apache.isis.core.commons.lang.ClassExtensions;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MethodRemover;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-
-/**
- * Removes all superclass methods of the class, but doesn't add any
- * {@link Facet}s.
- */
-public class RemoveSuperclassMethodsFacetFactory extends FacetFactoryAbstract {
-
-    @SuppressWarnings("unused")
-    private static final String JAVA_CLASS_PREFIX = "java.";
-
-    public RemoveSuperclassMethodsFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        removeSuperclassMethods(processClassContext.getCls(), processClassContext);
-    }
-
-    private void removeSuperclassMethods(final Class<?> type, final MethodRemover methodRemover) {
-        if (type == null) {
-            return;
-        }
-
-        if (!ClassExtensions.isJavaClass(type)) {
-            removeSuperclassMethods(type.getSuperclass(), methodRemover);
-            return;
-        }
-
-        final Method[] methods = type.getMethods();
-        for (final Method method : methods) {
-            methodRemover.removeMethod(method);
-        }
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSyntheticOrAbstractMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSyntheticOrAbstractMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSyntheticOrAbstractMethodsFacetFactory.java
deleted file mode 100644
index 62ab3db..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/javalang/RemoveSyntheticOrAbstractMethodsFacetFactory.java
+++ /dev/null
@@ -1,52 +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.ignore.javalang;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-
-/**
- * Designed to simply filter out any synthetic methods.
- * 
- * <p>
- * Does not add any {@link Facet}s.
- */
-public class RemoveSyntheticOrAbstractMethodsFacetFactory extends FacetFactoryAbstract {
-
-    public RemoveSyntheticOrAbstractMethodsFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        super.process(processClassContext);
-        Class<?> cls = processClassContext.getCls();
-        Method[] methods = cls.getMethods();
-        for (Method method : methods) {
-            if (method.isSynthetic() || Modifier.isAbstract(method.getModifiers())) {
-                processClassContext.removeMethod(method);
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java
index 7f40f19..66acd59 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/jdo/RemoveJdoEnhancementTypesFacetFactory.java
@@ -19,16 +19,50 @@
 
 package org.apache.isis.core.metamodel.facets.object.ignore.jdo;
 
+import java.lang.reflect.Method;
+import java.util.List;
 
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.AbstractRemoveMethodsFacetFactory;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.factory.InstanceUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveMethodsFacetFactory;
+import org.apache.isis.core.metamodel.methodutils.MethodScope;
 
 /**
  * Removes all methods inherited from <tt>javax.jdo.spi.PersistenceCapable</tt> (if JDO is on the classpath).
  */
-public class RemoveJdoEnhancementTypesFacetFactory extends AbstractRemoveMethodsFacetFactory {
+public class RemoveJdoEnhancementTypesFacetFactory extends FacetFactoryAbstract {
+
+    private final List<RemoveMethodsFacetFactory.MethodAndParameterTypes> jdoEnhancementmethodsToIgnore = Lists.newArrayList();
 
     public RemoveJdoEnhancementTypesFacetFactory() {
-        super("javax.jdo.spi.PersistenceCapable");
+        super(FeatureType.OBJECTS_ONLY);
+
+        final String typeToIgnoreIfOnClasspath = "javax.jdo.spi.PersistenceCapable";
+        try {
+            Class<?> typeToIgnore = InstanceUtil.loadClass(typeToIgnoreIfOnClasspath);
+            addMethodsToBeIgnored(typeToIgnore);
+        } catch(Exception ex) {
+            // ignore
+        }
+    }
+
+    private void addMethodsToBeIgnored(Class<?> typeToIgnore) {
+        final Method[] methods = typeToIgnore.getMethods();
+        for (final Method method : methods) {
+            jdoEnhancementmethodsToIgnore
+                    .add(new RemoveMethodsFacetFactory.MethodAndParameterTypes(method.getName(), method.getParameterTypes()));
+        }
+    }
+
+    @Override
+    public void process(final ProcessClassContext processClassContext) {
+        for (final RemoveMethodsFacetFactory.MethodAndParameterTypes mapt : jdoEnhancementmethodsToIgnore) {
+            processClassContext.removeMethod(MethodScope.OBJECT, mapt.methodName, null, mapt.methodParameters);
+        }
     }
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index b0f9e34..7343a75 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -94,16 +94,9 @@ import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetMethodF
 import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemoveAnnotatedMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.datanucleus.RemoveDatanucleusPersistableTypesFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.datanucleus.RemoveDnPrefixedMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.isis.RemoveSetDomainObjectContainerMethodFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.isis.RemoveStaticGettersAndSettersFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveGetClassMethodFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveInitMethodFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveInjectMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveJavaLangComparableMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveJavaLangObjectMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveSuperclassMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveSyntheticOrAbstractMethodsFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoEnhancementTypesFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoPrefixedMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.CopyImmutableFacetOntoMembersFactory;
@@ -232,16 +225,9 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
 
         addFactory(new IteratorFilteringFacetFactory());
 
-        addFactory(new RemoveSyntheticOrAbstractMethodsFacetFactory());
-        addFactory(new RemoveSuperclassMethodsFacetFactory());
-        addFactory(new RemoveJavaLangObjectMethodsFacetFactory());
-        addFactory(new RemoveJavaLangComparableMethodsFacetFactory());
-        addFactory(new RemoveSetDomainObjectContainerMethodFacetFactory());
+        addFactory(new RemoveMethodsFacetFactory());
 
-        addFactory(new RemoveInitMethodFacetFactory());
-        addFactory(new RemoveInjectMethodsFacetFactory());
         addFactory(new RemoveStaticGettersAndSettersFacetFactory());
-        addFactory(new RemoveGetClassMethodFacetFactory());
 
         addFactory(new RemoveAnnotatedMethodsFacetFactory());
 

http://git-wip-us.apache.org/repos/asf/isis/blob/8e85fe0b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
index 11878d7..cbedb8c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@ -119,7 +119,7 @@ public abstract class SpecificationLoaderTestAbstract {
         final SpecificationLoader specificationLoader =
                 new SpecificationLoader(DeploymentCategory.PRODUCTION,
                         stubConfiguration,
-                        new ProgrammingModelFacetsJava5(mockConfiguration),
+                        new ProgrammingModelFacetsJava5(stubConfiguration),
                         new MetaModelValidatorDefault(),
                         Lists.<LayoutMetadataReader>newArrayList(
                                 new LayoutMetadataReaderFromJson()), stubServicesInjector);
@@ -140,7 +140,7 @@ public abstract class SpecificationLoaderTestAbstract {
 
         new SpecificationLoader(DeploymentCategory.PRODUCTION ,
                 stubConfiguration,
-                new ProgrammingModelFacetsJava5(mockConfiguration),
+                new ProgrammingModelFacetsJava5(stubConfiguration),
                 new MetaModelValidatorDefault(),
                 Lists.<LayoutMetadataReader>newArrayList(),
                 stubServicesInjector);
@@ -153,7 +153,7 @@ public abstract class SpecificationLoaderTestAbstract {
 
         new SpecificationLoader(DeploymentCategory.PRODUCTION,
                 stubConfiguration,
-                new ProgrammingModelFacetsJava5(mockConfiguration),
+                new ProgrammingModelFacetsJava5(stubConfiguration),
                 new MetaModelValidatorDefault(),
                 null,
                 stubServicesInjector);