/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.gecko.annotationProcessors.classloader; import org.mozilla.gecko.annotationProcessors.AnnotationInfo; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Modifier; /** * Union type to hold either a method, field, or ctor. Allows us to iterate "The generatable stuff", despite * the fact that such things can be of either flavour. */ public class AnnotatableEntity { public enum ENTITY_TYPE {METHOD, NATIVE, FIELD, CONSTRUCTOR} private final Member mMember; public final ENTITY_TYPE mEntityType; public final AnnotationInfo mAnnotationInfo; public AnnotatableEntity(Member aObject, AnnotationInfo aAnnotationInfo) { mMember = aObject; mAnnotationInfo = aAnnotationInfo; if (aObject instanceof Method) { if (Modifier.isNative(aObject.getModifiers())) { mEntityType = ENTITY_TYPE.NATIVE; } else { mEntityType = ENTITY_TYPE.METHOD; } } else if (aObject instanceof Field) { mEntityType = ENTITY_TYPE.FIELD; } else { mEntityType = ENTITY_TYPE.CONSTRUCTOR; } } public Method getMethod() { if (mEntityType != ENTITY_TYPE.METHOD && mEntityType != ENTITY_TYPE.NATIVE) { throw new UnsupportedOperationException("Attempt to cast to unsupported member type."); } return (Method) mMember; } public Field getField() { if (mEntityType != ENTITY_TYPE.FIELD) { throw new UnsupportedOperationException("Attempt to cast to unsupported member type."); } return (Field) mMember; } public Constructor getConstructor() { if (mEntityType != ENTITY_TYPE.CONSTRUCTOR) { throw new UnsupportedOperationException("Attempt to cast to unsupported member type."); } return (Constructor) mMember; } }