All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nakedobjects.metamodel.java5.RemoveSuperclassMethodsFacetFactory Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.metamodel.java5;

import java.lang.reflect.Method;

import org.nakedobjects.metamodel.commons.lang.JavaClassUtils;
import org.nakedobjects.metamodel.facets.Facet;
import org.nakedobjects.metamodel.facets.FacetFactoryAbstract;
import org.nakedobjects.metamodel.facets.FacetHolder;
import org.nakedobjects.metamodel.facets.MethodRemover;
import org.nakedobjects.metamodel.spec.feature.NakedObjectFeatureType;


/**
 * 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(NakedObjectFeatureType.OBJECTS_ONLY);
    }

    @Override
    public boolean process(final Class type, final MethodRemover methodRemover, final FacetHolder holder) {
        removeSuperclassMethods(type, methodRemover);
        return false;
    }

    private void removeSuperclassMethods(final Class type, final MethodRemover methodRemover) {
        if (type == null) {
            return;
        }

        if (!JavaClassUtils.isJavaClass(type)) {
            removeSuperclassMethods(type.getSuperclass(), methodRemover);
            return;
        }

        final Method[] methods = type.getMethods();
        for (int j = 0; j < methods.length; j++) {
            final Method method = methods[j];
            methodRemover.removeMethod(method);
        }

    }

}

// Copyright (c) Naked Objects Group Ltd.




© 2015 - 2024 Weber Informatics LLC | Privacy Policy