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 2015/05/08 19:20:54 UTC

[2/3] isis git commit: ISIS-1146: ignoring @PostConstruct and @PreDestroy methods automatically.

ISIS-1146: ignoring @PostConstruct and @PreDestroy methods automatically.


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

Branch: refs/heads/master
Commit: a42ec2ef01de14ac8c7a4bfd17c657ee65083b65
Parents: 7d52ff4
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri May 8 18:19:51 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri May 8 18:19:51 2015 +0100

----------------------------------------------------------------------
 ...PreDestroyAnnotationMethodsFacetFactory.java | 64 ++++++++++++++++++++
 .../dflt/ProgrammingModelFacetsJava5.java       |  2 +
 2 files changed, 66 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a42ec2ef/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java
new file mode 100644
index 0000000..e739ed6
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java
@@ -0,0 +1,64 @@
+/*
+ *  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.annotation;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.MethodRemover;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+
+public class RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory extends FacetFactoryAbstract {
+
+    public RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory() {
+        super(FeatureType.OBJECTS_ONLY);
+    }
+
+    @Override
+    public void process(final ProcessClassContext processClassContext) {
+        removeIgnoredMethods(processClassContext.getCls(), processClassContext);
+    }
+
+    @SuppressWarnings("deprecation")
+    private void removeIgnoredMethods(final Class<?> cls, final MethodRemover methodRemover) {
+        if (cls == null) {
+            return;
+        }
+
+        final Method[] methods = cls.getMethods();
+        for (final Method method : methods) {
+            removeAnnotatedMethods(methodRemover, method, PreDestroy.class);
+            removeAnnotatedMethods(methodRemover, method, PostConstruct.class);
+        }
+    }
+
+    private static <T extends Annotation> void removeAnnotatedMethods(final MethodRemover methodRemover, final Method method, Class<T> annotationClass) {
+        if (!Annotations.isAnnotationPresent(method, annotationClass)) {
+            return;
+        } 
+        methodRemover.removeMethod(method);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/a42ec2ef/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 18cf284..1a36e96 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
@@ -89,6 +89,7 @@ import org.apache.isis.core.metamodel.facets.object.fieldorder.annotation.FieldO
 import org.apache.isis.core.metamodel.facets.object.hidden.annotation.HiddenFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.hidden.method.HiddenObjectFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetMethodFactory;
+import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.datanucleus.RemoveDatanucleusPersistableTypesFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.datanucleus.RemoveDnPrefixedMethodsFacetFactory;
@@ -232,6 +233,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(RemoveInjectMethodsFacetFactory.class);
         addFactory(RemoveStaticGettersAndSettersFacetFactory.class);
         addFactory(RemoveGetClassMethodFacetFactory.class);
+        addFactory(RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.class);
         addFactory(RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory.class);
 
         // come what may, we have to ignore the PersistenceCapable supertype.