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);