Android Open Source - baracus-framework Annotation Scanner






From Project

Back to project page baracus-framework.

License

The source code is released under:

Apache License

If you think the Android project baracus-framework listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package net.mantucon.baracus.context;
// w  ww  .j a  v a  2  s.  c  o  m
import android.content.Context;
import android.content.ContextWrapper;
import dalvik.system.DexClassLoader;
import dalvik.system.DexFile;
import dalvik.system.PathClassLoader;
import net.mantucon.baracus.util.Logger;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

/**
 * Annotation scanner
 * <p/>
 * Disfunctional on some android versions. do not use yet!
 */

@Deprecated
public class AnnotationScanner {

    private AnnotationScanner() {
    }

    private static final Logger logger = new Logger(AnnotationScanner.class);

    public static <T extends Annotation> List<Class<?>> getClassesAnnotatedWith(Class<T> theAnnotation, Context context) {

        // In theory, the class loader is not required to be a PathClassLoader
        Field field = null;
        List<Class<?>> candidates = new ArrayList<Class<?>>();
        String sourceDir = context.getApplicationInfo().sourceDir;
        try {
            DexFile dex = new DexFile(sourceDir);
            PathClassLoader classLoader2 = new PathClassLoader(sourceDir, Thread.currentThread().getContextClassLoader());
            DexClassLoader classLoader = new DexClassLoader(sourceDir, new ContextWrapper(context).getCacheDir().getAbsolutePath(), null, classLoader2);

            Enumeration<String> entries = dex.entries();
            while (entries.hasMoreElements()) {
                // Each entry is a class name, like "foo.bar.MyClass"
                String entry = entries.nextElement();
                if (!entry.contains("$")) {

                    try {
                        // Load the class
//                        Class<?> entryClass = dex.loadClass(entry, classLoader);
                        Class<?> entryClass = classLoader.loadClass(entry);//dexFile.loadClass(entry, classLoader);

                        logger.debug("FOUND CLASS $1", entry);
                        if (entryClass == null) {
                            logger.error("WARNING! Class of $1 is NULL!", entry);
                        }
                        if (entryClass != null && entryClass.getAnnotation(theAnnotation) != null) {
                            logger.error("ADDED CLASS " + entryClass.getName());
                            candidates.add(entryClass);
                        }
                    } catch (IllegalAccessError e) {
                        logger.error("Exception during scan on $1", entry);
                    }
                }
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        return candidates;
    }

    public static boolean carriesAnnotation(Class<?> clazz, Class<?> annotation) {
        for (Annotation a : clazz.getAnnotations()) {
            logger.error("$1 carries $2", clazz.getSimpleName(), a.getClass().getName());
            if (a.getClass().getName().equals(annotation.getName())) {
                return true;
            }
        }
        return false;
    }

}




Java Source Code List

net.mantucon.baracus.annotations.Bean.java
net.mantucon.baracus.context.AnnotationScanner.java
net.mantucon.baracus.context.BaracusApplicationContext.java
net.mantucon.baracus.context.BeanContainer.java
net.mantucon.baracus.context.Exceptions.java
net.mantucon.baracus.context.ManagedActivity.java
net.mantucon.baracus.context.ManagedFragment.java
net.mantucon.baracus.dao.BaracusOpenHelper.java
net.mantucon.baracus.dao.BaseDao.java
net.mantucon.baracus.dao.ConfigurationDao.java
net.mantucon.baracus.errorhandling.CustomErrorHandler.java
net.mantucon.baracus.errorhandling.ErrorHandler.java
net.mantucon.baracus.errorhandling.ErrorHandlingFactory.java
net.mantucon.baracus.errorhandling.ErrorSeverity.java
net.mantucon.baracus.errorhandling.StandardErrorHandler.java
net.mantucon.baracus.errorhandling.TextEditErrorHandler.java
net.mantucon.baracus.lifecycle.ApplicationContextInitializer.java
net.mantucon.baracus.lifecycle.Destroyable.java
net.mantucon.baracus.lifecycle.Initializeable.java
net.mantucon.baracus.migr8.MigrationStep.java
net.mantucon.baracus.migr8.ModelVersion000.java
net.mantucon.baracus.model.ConfigurationParameter.java
net.mantucon.baracus.orm.AbstractModelBase.java
net.mantucon.baracus.orm.FieldList.java
net.mantucon.baracus.orm.Field.java
net.mantucon.baracus.orm.Identifiable.java
net.mantucon.baracus.orm.LazyCollection.java
net.mantucon.baracus.orm.LazyMorphicCollection.java
net.mantucon.baracus.orm.LazyReference.java
net.mantucon.baracus.orm.LegacyModelBase.java
net.mantucon.baracus.orm.ModelBase.java
net.mantucon.baracus.orm.NullReference.java
net.mantucon.baracus.orm.ObjectReference.java
net.mantucon.baracus.orm.OptimisticLockingModelBase.java
net.mantucon.baracus.orm.OptmisticLocking.java
net.mantucon.baracus.orm.ReferenceLoader.java
net.mantucon.baracus.orm.Reference.java
net.mantucon.baracus.orm.Timestamped.java
net.mantucon.baracus.signalling.ConfigurationChangeListener.java
net.mantucon.baracus.signalling.DataChangeAwareComponent.java
net.mantucon.baracus.signalling.DataSetChangeAwareComponent.java
net.mantucon.baracus.signalling.DeleteAwareComponent.java
net.mantucon.baracus.signalling.GenericEventAwareComponent.java
net.mantucon.baracus.signalling.GenericEvent.java
net.mantucon.baracus.ui.ConstrainedEditText.java
net.mantucon.baracus.ui.ConstrainedSpinner.java
net.mantucon.baracus.ui.ErrorView.java
net.mantucon.baracus.ui.Popup.java
net.mantucon.baracus.util.DBBackup.java
net.mantucon.baracus.util.DataUtil.java
net.mantucon.baracus.util.DateUtil.java
net.mantucon.baracus.util.DayDate.java
net.mantucon.baracus.util.Logger.java
net.mantucon.baracus.util.StringUtil.java
net.mantucon.baracus.validation.AbstractValidator.java
net.mantucon.baracus.validation.ConstrainedView.java
net.mantucon.baracus.validation.ValidatableView.java
net.mantucon.baracus.validation.ValidationFactory.java
net.mantucon.baracus.validation.Validator.java
net.mantucon.baracus.validation.builtins.DateFromNow.java
net.mantucon.baracus.validation.builtins.NumberMustBeGreaterThanZero.java
net.mantucon.baracus.validation.builtins.StringIsNumericDouble.java
net.mantucon.baracus.validation.builtins.StringIsNumericInteger.java
net.mantucon.baracus.validation.builtins.StringNotEmpty.java