Java 类com.badlogic.gdx.utils.reflect.Field 实例源码

项目:gdx-cclibs    文件:JsonFieldUpdater.java   
private OrderedMap<String, Field> getStaticFields(Class type) {
    if (staticFields.containsKey(type))
        return staticFields.get(type);
    Field[] fields = ClassReflection.getDeclaredFields(type);
    OrderedMap<String, Field> nameToField = new OrderedMap(fields.length);
    for (Field field : fields) {
        if (!field.isStatic())
            continue;
        if (!field.isAccessible()) {
            try {
                field.setAccessible(true);
            } catch (AccessControlException ex) {
                continue;
            }
        }

        nameToField.put(field.getName(), field);
    }
    staticFields.put(type, nameToField);
    return nameToField;
}
项目:Inspiration    文件:BehaviorTreeParser.java   
private Metadata findMetadata (Class<?> clazz) {
    Metadata metadata = metadataCache.get(clazz);
    if (metadata == null) {
        Annotation tca = ClassReflection.getAnnotation(clazz, TaskConstraint.class);
        if (tca != null) {
            TaskConstraint taskConstraint = tca.getAnnotation(TaskConstraint.class);
            ObjectMap<String, AttrInfo> taskAttributes = new ObjectMap<String, AttrInfo>();
            Field[] fields = ClassReflection.getFields(clazz);
            for (Field f : fields) {
                Annotation a = f.getDeclaredAnnotation(TaskAttribute.class);
                if (a != null) {
                    AttrInfo ai = new AttrInfo(f.getName(), a.getAnnotation(TaskAttribute.class));
                    taskAttributes.put(ai.name, ai);
                }
            }
            metadata = new Metadata(taskConstraint.minChildren(), taskConstraint.maxChildren(), taskAttributes);
            metadataCache.put(clazz, metadata);
        }
    }
    return metadata;
}
项目:gdx-autumn    文件:ContextInitializer.java   
/** Does the actual processing of found fields.
 *
 * @param component owner of the fields.
 * @param fields present in one of superclasses of the component.
 * @param context used to resolve dependencies.
 * @param contextDestroyer used to register destruction callbacks. */
@SuppressWarnings({ "rawtypes", "unchecked" }) // Using correct types, but wildcards fail to see that.
private void processFields(final Object component, final Field[] fields, final Context context,
        final ContextDestroyer contextDestroyer) {
    for (final Field field : fields) {
        final com.badlogic.gdx.utils.reflect.Annotation[] annotations = getAnnotations(field);
        if (annotations == null || annotations.length == 0) {
            continue;
        }
        for (final com.badlogic.gdx.utils.reflect.Annotation annotation : annotations) {
            if (fieldProcessors.containsKey(annotation.getAnnotationType())) {
                for (final AnnotationProcessor processor : fieldProcessors.get(annotation.getAnnotationType())) {
                    processor.processField(field, annotation.getAnnotation(annotation.getAnnotationType()),
                            component, context, this, contextDestroyer);
                }
            }
        }
    }
}
项目:gdx-autumn-mvc    文件:LmlMacroAnnotationProcessor.java   
@Override
public void processField(final Field field, final LmlMacro annotation, final Object component,
        final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    try {
        final Object macroData = Reflection.getFieldValue(field, component);
        final LmlParser parser = interfaceService.get().getParser();
        final FileType fileType = annotation.fileType();
        if (macroData instanceof String) {
            parser.parseTemplate(Gdx.files.getFileHandle((String) macroData, fileType));
        } else if (macroData instanceof String[]) {
            for (final String macroPath : (String[]) macroData) {
                parser.parseTemplate(Gdx.files.getFileHandle(macroPath, fileType));
            }
        } else {
            throw new GdxRuntimeException("Invalid type of LML macro definition in component: " + component
                    + ". String or String[] expected, received: " + macroData + ".");
        }
    } catch (final ReflectionException exception) {
        throw new GdxRuntimeException(
                "Unable to extract macro paths from field: " + field + " of component: " + component + ".",
                exception);
    }
}
项目:gdx-lml    文件:ContextInitializer.java   
/** Does the actual processing of found fields.
 *
 * @param component owner of the fields.
 * @param fields present in one of superclasses of the component.
 * @param context used to resolve dependencies.
 * @param contextDestroyer used to register destruction callbacks. */
@SuppressWarnings({ "rawtypes", "unchecked" }) // Using correct types, but wildcards fail to see that.
private void processFields(final Object component, final Field[] fields, final Context context,
        final ContextDestroyer contextDestroyer) {
    for (final Field field : fields) {
        final com.badlogic.gdx.utils.reflect.Annotation[] annotations = getAnnotations(field);
        if (annotations == null || annotations.length == 0) {
            continue;
        }
        for (final com.badlogic.gdx.utils.reflect.Annotation annotation : annotations) {
            if (fieldProcessors.containsKey(annotation.getAnnotationType())) {
                for (final AnnotationProcessor processor : fieldProcessors.get(annotation.getAnnotationType())) {
                    processor.processField(field, annotation.getAnnotation(annotation.getAnnotationType()),
                            component, context, this, contextDestroyer);
                }
            }
        }
    }
}
项目:gdx-lml    文件:AssetService.java   
private void handleLazyAssetInjection(final Object component, final Field field, final Asset assetData) {
    if (Annotations.isNotVoid(assetData.lazyCollection())) {
        handleLazyAssetCollectionInjection(component, field, assetData);
        return;
    } else if (assetData.value().length != 1) {
        throw new GdxRuntimeException(
                "Lazy wrapper can contain only one asset if lazy collection type is not provided. Found multiple assets in field: "
                        + field + " of component: " + component);
    }
    final String assetPath = assetData.value()[0];
    if (!assetData.loadOnDemand()) {
        load(assetPath, assetData.type());
    }
    try {
        Reflection.setFieldValue(field, component,
                Lazy.providedBy(new AssetProvider(this, assetPath, assetData.type(), assetData.loadOnDemand())));
    } catch (final ReflectionException exception) {
        throw new GdxRuntimeException("Unable to inject lazy asset.", exception);
    }
}
项目:gdx-autumn-mvc    文件:LmlParserSyntaxAnnotationProcessor.java   
@Override
public void processField(final Field field, final LmlParserSyntax annotation, final Object component,
        final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    try {
        final Object syntax = Reflection.getFieldValue(field, component);
        if (syntax instanceof LmlSyntax) {
            interfaceService.getParser().setSyntax((LmlSyntax) syntax);
        } else {
            throw new ContextInitiationException(
                    "LmlParserSyntax-annotated fields need to contain an instance of LmlSyntax. Found: " + syntax
                            + " in field: " + field + " of component: " + component);
        }
    } catch (final ReflectionException exception) {
        throw new ContextInitiationException(
                "Unable to extract LML syntax from field: " + field + " of component: " + component, exception);
    }
}
项目:gdx-autumn-mvc    文件:AssetService.java   
private void handleLazyAssetInjection(final Object component, final Field field, final Asset assetData) {
    if (Annotations.isNotVoid(assetData.lazyCollection())) {
        handleLazyAssetCollectionInjection(component, field, assetData);
        return;
    } else if (assetData.value().length != 1) {
        throw new GdxRuntimeException(
                "Lazy wrapper can contain only one asset if lazy collection type is not provided. Found multiple assets in field: "
                        + field + " of component: " + component);
    }
    final String assetPath = assetData.value()[0];
    if (!assetData.loadOnDemand()) {
        load(assetPath, assetData.type());
    }
    try {
        Reflection.setFieldValue(field, component,
                Lazy.providedBy(new AssetProvider(this, assetPath, assetData.type(), assetData.loadOnDemand())));
    } catch (final ReflectionException exception) {
        throw new GdxRuntimeException("Unable to inject lazy asset.", exception);
    }
}
项目:gdx-autumn-mvc    文件:AvailableLocalesAnnotationProcessor.java   
@Override
public void processField(final Field field, final AvailableLocales annotation, final Object component,
        final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    try {
        final Object locales = Reflection.getFieldValue(field, component);
        if (locales instanceof String[]) {
            final String[] availableLocales = (String[]) locales;
            final LmlParser parser = interfaceService.getParser();

            parser.getData().addArgument(annotation.viewArgumentName(), availableLocales);
            for (final String locale : availableLocales) {
                parser.getData().addActorConsumer(annotation.localeChangeMethodPrefix() + locale,
                        new LocaleChangingAction(localeService, LocaleService.toLocale(locale)));
            }
            return;
        }
        throw new GdxRuntimeException("Invalid field annotated with @AvailableLocales in component " + component
                + ". Expected String[], received: " + locales + ".");
    } catch (final ReflectionException exception) {
        throw new GdxRuntimeException(
                "Unable to read available locales from field: " + field + " of component: " + component + ".",
                exception);
    }
}
项目:gdx-lml    文件:AssetService.java   
@Override
public void processField(final Field field, final Asset annotation, final Object component, final Context context,
        final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    validateAssetData(component, field, annotation);
    if (field.getType().equals(Lazy.class)) {
        handleLazyAssetInjection(component, field, annotation);
    } else if (field.getType().equals(Array.class)) {
        handleArrayInjection(component, field, annotation);
    } else if (field.getType().equals(ObjectSet.class)) {
        handleSetInjection(component, field, annotation);
    } else if (field.getType().equals(ObjectMap.class)) {
        handleMapInjection(component, field, annotation);
    } else {
        handleRegularAssetInjection(component, field, annotation);
    }
}
项目:gdx-lml    文件:AvailableLocalesAnnotationProcessor.java   
@Override
public void processField(final Field field, final AvailableLocales annotation, final Object component,
        final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    try {
        final Object locales = Reflection.getFieldValue(field, component);
        if (locales instanceof String[]) {
            final String[] availableLocales = (String[]) locales;
            final LmlParser parser = interfaceService.getParser();

            parser.getData().addArgument(annotation.viewArgumentName(), availableLocales);
            for (final String locale : availableLocales) {
                parser.getData().addActorConsumer(annotation.localeChangeMethodPrefix() + locale,
                        new LocaleChangingAction(localeService, LocaleService.toLocale(locale)));
            }
            return;
        }
        throw new GdxRuntimeException("Invalid field annotated with @AvailableLocales in component " + component
                + ". Expected String[], received: " + locales + ".");
    } catch (final ReflectionException exception) {
        throw new GdxRuntimeException(
                "Unable to read available locales from field: " + field + " of component: " + component + ".",
                exception);
    }
}
项目:gdx-lml    文件:AbstractLmlParser.java   
protected <View> void processLmlActorAnnotation(final View view, final Field field) {
    if (Reflection.isAnnotationPresent(field, LmlActor.class)) {
        final LmlActor actorData = Reflection.getAnnotation(field, LmlActor.class);
        String[] actorIds = actorData.value();
        if (actorIds.length == 0) {
            actorIds = new String[] { field.getName() };
        }
        if (Reflection.isExtending(field.getType(), Array.class)) {
            injectArrayOfActors(view, field, actorIds);
        } else if (Reflection.isExtending(field.getType(), ObjectSet.class)) {
            injectSetOfActors(view, field, actorIds);
        } else if (Reflection.isExtending(field.getType(), ObjectMap.class)) {
            injectMapOfActors(view, field, actorIds);
        } else {
            injectSingleActor(view, field, actorIds);
        }
    }
}
项目:gdx-lml    文件:AbstractLmlParser.java   
/** @param actionContainer action container that might contain the referenced method.
 * @param actionId name of the requested action.
 * @param forActor will be used as potential action argument.
 * @return actor consumer constructed with container's method (or field) or null if action not found. */
protected ActorConsumer<?, ?> extractActionFromContainer(final ActionContainerWrapper actionContainer,
        final String actionId, final Object forActor) {
    Method method = actionContainer.getNamedMethod(actionId);
    if (method == null && Lml.EXTRACT_UNANNOTATED_METHODS) {
        method = findUnnamedMethod(actionContainer, actionId, forActor);
    }
    if (method != null) {
        return new MethodActorConsumer(method, actionContainer.getActionContainer());
    } else if (Lml.EXTRACT_FIELDS_AS_METHODS) {
        Field field = actionContainer.getNamedField(actionId);
        if (field == null && Lml.EXTRACT_UNANNOTATED_METHODS) {
            field = actionContainer.getField(actionId);
        }
        if (field != null) {
            return new FieldActorConsumer(field, actionContainer.getActionContainer());
        }
    }
    return null;
}
项目:gdx-lml    文件:ActionContainerWrapper.java   
private void mapClassFields(final Class<?> containerClass) {
    if (!Lml.EXTRACT_FIELDS_AS_METHODS) {
        return;
    }
    for (final Field field : ClassReflection.getDeclaredFields(containerClass)) {
        final LmlAction actionData = Reflection.getAnnotation(field, LmlAction.class);
        if (actionData != null) {
            final String[] ids = actionData.value();
            if (ids.length > 0) {
                for (final String actionId : ids) {
                    annotatedFields.put(actionId, field);
                }
            } else {
                annotatedFields.put(field.getName(), field);
            }
        }
    }
}
项目:gdx-lml    文件:LmlMacroAnnotationProcessor.java   
@Override
public void processField(final Field field, final LmlMacro annotation, final Object component,
        final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    try {
        final Object macroData = Reflection.getFieldValue(field, component);
        final FileType fileType = annotation.fileType();
        if (macroData instanceof String) {
            macros.add(Gdx.files.getFileHandle((String) macroData, fileType));
        } else if (macroData instanceof String[]) {
            for (final String macroPath : (String[]) macroData) {
                macros.add(Gdx.files.getFileHandle(macroPath, fileType));
            }
        } else {
            throw new GdxRuntimeException("Invalid type of LML macro definition in component: " + component
                    + ". String or String[] expected, received: " + macroData + ".");
        }
    } catch (final ReflectionException exception) {
        throw new GdxRuntimeException(
                "Unable to extract macro paths from field: " + field + " of component: " + component + ".",
                exception);
    }
}
项目:gdx-lml    文件:DefaultContext.java   
/** @param field reflected field data.
 * @param component owner of the field.
 * @return true if the field is empty, accepted by the modifier filter, does not match modifier signature, not
 *         primitive and - if strings are ignored - not a string.
 * @throws Exception due to reflection issues. */
protected boolean isInjectable(final Field field, final Object component) throws Exception {
    try {
        if (field.isSynthetic() || field.getType().isPrimitive()
                || isIgnoreStrings() && field.getType() == String.class) {
            return false;
        }
    } catch (final Exception exception) {
        Exceptions.ignore(exception); // GWT compatibility.
        Gdx.app.debug("UEDI", "Unable to access field of component: " + component, exception);
        return false;
    }
    final int modifier = Modifier.getModifiers(field);
    if ((modifier & getFieldsIgnoreFilter()) != 0 || modifier == getFieldsIgnoreSignature()) {
        return false;
    }
    field.setAccessible(true);
    return field.get(component) == null;
}
项目:gdx-lml    文件:LmlParserSyntaxAnnotationProcessor.java   
@Override
public void processField(final Field field, final LmlParserSyntax annotation, final Object component,
        final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    try {
        final Object syntax = Reflection.getFieldValue(field, component);
        if (syntax instanceof LmlSyntax) {
            interfaceService.getParser().setSyntax((LmlSyntax) syntax);
        } else {
            throw new ContextInitiationException(
                    "LmlParserSyntax-annotated fields need to contain an instance of LmlSyntax. Found: " + syntax
                            + " in field: " + field + " of component: " + component);
        }
    } catch (final ReflectionException exception) {
        throw new ContextInitiationException(
                "Unable to extract LML syntax from field: " + field + " of component: " + component, exception);
    }
}
项目:gdx-lml    文件:AssetService.java   
private void handleRegularAssetInjection(final Object component, final Field field, final Asset assetData) {
    if (assetData.value().length != 1) {
        throw new GdxRuntimeException(
                "Regular fields can store only 1 asset. If the field is a collection, its type is not currently supported: only LibGDX Array, ObjectSet and ObjectMap are permitted. Regular arrays will not be supported. Found multiple assets in field: "
                        + field + " of component: " + component);
    }
    final String assetPath = assetData.value()[0];
    if (assetData.loadOnDemand()) {
        // Loaded immediately.
        @SuppressWarnings("unchecked") final Object asset = finishLoading(assetPath, field.getType());
        try {
            Reflection.setFieldValue(field, component, asset);
        } catch (final ReflectionException exception) {
            throw new GdxRuntimeException("Unable to inject asset loaded on demand.", exception);
        }
    } else {
        load(assetPath, field.getType());
        // Scheduled to be loaded, delayed injection.
        assetInjections.add(new StandardAssetInjection(field, assetPath, component));
    }
}
项目:gdx-cclibs    文件:PixmapSerializer.java   
private static int getPixmapColor (Pixmap pixmap){
    int color = 0;
    try {
        Field colorField = ClassReflection.getDeclaredField(Pixmap.class, "color");
        colorField.setAccessible(true);
        color = (Integer)colorField.get(pixmap);
    } catch (ReflectionException e) {
        Log.error("Color field of pixmap could not be read. Using transparent black.", e);
    }
    return color;
}
项目:gdx-cclibs    文件:JsonFieldUpdater.java   
public <T> T getStaticFieldValue(Class<T> type, String fieldName) {
    OrderedMap<String, Field> fields = getStaticFields(type);
    Field field = fields.get(fieldName, null);
    Throwable throwable = null;
    if (field != null) {
        try {
            return (T) field.get(null);
        } catch (ReflectionException e) {
            throwable = e;
        }
    }
    error(String.format("Could not retrieve static field value %s from class %s.", fieldName, type.getName()), throwable);
    return null;
}
项目:gdx-cclibs    文件:AssignmentAssetManager.java   
@Override
public synchronized boolean update () {
    boolean done = super.update();
    if (done) {
        // assign references to Asset fields of queuedContainers
        for (Object assetContainer : queuedContainers) {
            ObjectMap<Field, AssetDescriptor<?>> fieldsToAssets = containersFieldsToAssets.get(assetContainer);
            for (ObjectMap.Entry<Field, AssetDescriptor<?>> fieldEntry : fieldsToAssets) {
                Field field = fieldEntry.key;
                makeAccessible(field);
                try {
                    field.set(assetContainer, get(fieldEntry.value));
                } catch (ReflectionException e) {
                    throw new GdxRuntimeException("Failed to assign loaded asset " + field.getName(), e);
                }
            }
            ObjectMap<Object[], AssetDescriptor<?>[]> fieldsToAssetArrays = containersFieldsToAssetArrays.get(assetContainer);
            for (ObjectMap.Entry<Object[], AssetDescriptor<?>[]> arrayEntry : fieldsToAssetArrays) {
                Object[] destinationArray = arrayEntry.key;
                AssetDescriptor<?>[] descriptors = arrayEntry.value;
                for (int i = 0; i < descriptors.length; i++) {
                    destinationArray[i] = get(descriptors[i]);
                }
            }

            if (assetContainer instanceof AssetContainer)
                ((AssetContainer) assetContainer).onAssetsLoaded();
        }

        loadedContainers.addAll(queuedContainers);
        queuedContainers.clear();
    }
    return done;
}
项目:gdx-cclibs    文件:AssignmentAssetManager.java   
private void makeAccessible (Field field) {
    if (!field.isAccessible()) {
        try {
            field.setAccessible(true);
        } catch (AccessControlException ex) {
            throw new GdxRuntimeException(String.format("Field %s cannot be made accessible", field.getName()));
        }
    }
}
项目:cachebox3.0    文件:Validate_MapWayPointItemStyle.java   
/**
 * Check if exist a MapWayPointItemStyle for all CacheTypes and WayPointTypes
 */
@Override
public void runValidation() {

    checkCacheTypes();


    //Check changes of MapWayPointItemStyle.class
    Field[] fields = ClassReflection.getFields(MapWayPointItemStyle.class);
    String classChanged = "";
    if (fields.length > 3) {
        classChanged = "MapWayPointItemStyle is changed, maybe you must add new Validation " +
                "on de.longri.cachebox3.develop.tools.skin_editor.validation.Validate_MapWayPointItemStyle.java";
    }


    //set result
    if (missingBitmaps.length > 0 || missingSyles.length > 0) {
        errorMsg = "Missing Styles:\n\n" + missingSyles.toString() + "\n\nMissing Bitmaps:\n\n" + missingBitmaps.toString();
    }

    if (!classChanged.isEmpty()) {
        warnMsg = classChanged + "\n\n Wrong Sizes:\n\n" + wrongBitmapsSize.toString();
    } else if (wrongBitmapsSize.length > 0) {
        warnMsg = "Wrong Sizes:\n\n" + wrongBitmapsSize.toString();
    }


}
项目:cachebox3.0    文件:FontPickerDialog.java   
/**
 * Is font is already in use somewhere else?
 */
public boolean isFontInUse(BitmapFont font) {

    try {
        // Check if it is already in use somewhere!
        for (String widget : SkinEditorGame.widgets) {
            String widgetStyle = "com.badlogic.gdx.scenes.scene2d.ui." + widget + "$" + widget + "Style";
            Class<?> style = Class.forName(widgetStyle);
            ObjectMap<String, ?> styles = game.skinProject.getAll(style);
            Iterator<String> it = styles.keys().iterator();
            while (it.hasNext()) {
                Object item = styles.get((String) it.next());
                Field[] fields = ClassReflection.getFields(item.getClass());
                for (Field field : fields) {

                    if (field.getType() == BitmapFont.class) {

                        BitmapFont f = (BitmapFont) field.get(item);
                        if (font.equals(f)) {
                            return true;
                        }

                    }

                }

            }

        }
    } catch (Exception e) {
        e.printStackTrace();

    }

    return false;
}
项目:cachebox3.0    文件:DrawablePickerDialog.java   
public DrawablePickerDialog(final SkinEditorGame game, final Field field, int arrayIndex, boolean disableNinePatch, Stage stage) {
    super("Drawable Picker", game.skin);
    this.game = game;
    this.field = field;
    this.disableNinePatch = disableNinePatch;
    this.stage = stage;
    this.callSelectedSvg = false;
    this.arrayIndex = arrayIndex;
    initializeSelf();
}
项目:Inspiration    文件:BehaviorTreeParser.java   
@Override
protected <E> boolean attribute (DefaultBehaviorTreeReader<E> reader, String name, Object value) {
    StackedTask<E> stackedTask = reader.getCurrentTask();
    AttrInfo ai = stackedTask.metadata.attributes.get(name);
    if (ai == null) return false;
    boolean isNew = reader.encounteredAttributes.add(name);
    if (!isNew) throw reader.stackedTaskException(stackedTask, "attribute '" + name + "' specified more than once");
    Field attributeField = reader.getField(stackedTask.task.getClass(), ai.fieldName);
    reader.setField(attributeField, stackedTask.task, value);
    return true;
}
项目:Inspiration    文件:BehaviorTreeParser.java   
private Field getField (Class<?> clazz, String name) {
    try {
        return ClassReflection.getField(clazz, name);
    } catch (ReflectionException e) {
        throw new GdxRuntimeException(e);
    }
}
项目:Inspiration    文件:BehaviorTreeParser.java   
private void setField (Field field, Task<E> task, Object value) {
    field.setAccessible(true);
    Object valueObject = castValue(field, value);
    try {
        field.set(task, valueObject);
    } catch (ReflectionException e) {
        throw new GdxRuntimeException(e);
    }
}
项目:RavTech    文件:GamePadDevice.java   
public int getAxisAmount () {
    try {
        switch (Gdx.app.getType()) {
            case Android:
                Field androidAxes = ClassReflection
                    .getDeclaredField(ClassReflection.forName("com.badlogic.gdx.controllers.android.AndroidController"), "axes");
                androidAxes.setAccessible(true);
                return ((float[])androidAxes.get(gamePad)).length;
            case Desktop:
                Field desktopAxes = ClassReflection
                    .getDeclaredField(ClassReflection.forName("com.badlogic.gdx.controllers.lwjgl3.Lwjgl3Controller"), "axisState");
                desktopAxes.setAccessible(true);
                return ((float[])desktopAxes.get(gamePad)).length;
            case HeadlessDesktop:
                return 0;
            case WebGL:
                Field gwtAxes = ClassReflection
                    .getDeclaredField(ClassReflection.forName("com.badlogic.gdx.controllers.gwt.GwtController"), "axes");
                gwtAxes.setAccessible(true);
                return ((float[])gwtAxes.get(gamePad)).length;
            case iOS:
                return 0;
            default:
                break;
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return 0;
}
项目:RavTech    文件:GamePadDevice.java   
public int getButtonAmount () {
    try {
        switch (Gdx.app.getType()) {
            case Android:
                Field androidButtons = ClassReflection
                    .getDeclaredField(ClassReflection.forName("com.badlogic.gdx.controllers.android.AndroidController"), "buttons");
                androidButtons.setAccessible(true);
                return ((IntIntMap)androidButtons.get(gamePad)).size;
            case Desktop:
                Field desktopButtons = ClassReflection.getDeclaredField(
                    ClassReflection.forName("com.badlogic.gdx.controllers.lwjgl3.Lwjgl3Controller"), "buttonState");
                desktopButtons.setAccessible(true);
                return ((boolean[])desktopButtons.get(gamePad)).length;
            case HeadlessDesktop:
                return 0;
            case WebGL:
                Field gwtButtons = ClassReflection
                    .getDeclaredField(ClassReflection.forName("com.badlogic.gdx.controllers.gwt.GwtController"), "buttons");
                gwtButtons.setAccessible(true);
                return ((IntFloatMap)gwtButtons.get(gamePad)).size;
            case iOS:
                return 0;
            default:
                break;
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return 0;
}
项目:gdx-texture-packer-gui    文件:Scene2dUtils.java   
/** Injects actors from group into target's fields annotated with {@link InjectActor} using reflection. */
public static void injectActorFields(Object target, Group group) {
    Class<?> handledClass = target.getClass();
    while (handledClass != null && !handledClass.equals(Object.class)) {
        for (final Field field : ClassReflection.getDeclaredFields(handledClass)) {
            if (field != null && field.isAnnotationPresent(InjectActor.class)) {
                try {
                    InjectActor annotation = field.getDeclaredAnnotation(InjectActor.class).getAnnotation(InjectActor.class);
                    String actorName = annotation.value();
                    if (actorName.length() == 0) {
                        actorName = field.getName();
                    }
                    Actor actor = group.findActor(actorName);
                    if (actor == null && actorName.equals(group.getName())) {
                        actor = group;
                    }
                    if (actor == null) {
                        Gdx.app.error(TAG_INJECT_FIELDS, "Can't find actor with name: " + actorName + " in group: " + group + " to inject into: " + target);
                    } else {
                        field.setAccessible(true);
                        field.set(target, actor);
                    }
                } catch (final ReflectionException exception) {
                    Gdx.app.error(TAG_INJECT_FIELDS, "Unable to set value into field: " + field + " of object: " + target, exception);
                }
            }
        }
        handledClass = handledClass.getSuperclass();
    }
}
项目:gdx-twitter    文件:TwitterSystemUnitTests.java   
@SuppressWarnings("static-access")
@Before
public void setup() {

    Gdx.app = Mockito.mock(HeadlessApplication.class);

    when(Gdx.app.getPreferences(anyString())).thenReturn(new PreferencesStub());

    config = new TwitterConfig();

    PowerMockito.mockStatic(ClassReflection.class);
    classReflectionMock = Mockito.mock(ClassReflection.class);

    PowerMockito.mockStatic(Field.class);
    fieldMock = Mockito.mock(Field.class);

    PowerMockito.mockStatic(Constructor.class);
    constructorMock = Mockito.mock(Constructor.class);

    PowerMockito.mockStatic(Method.class);
    methodMock = Mockito.mock(Method.class);

    activityStub = new ActivityStub();
    twitterAPIStub = new TwitterAPIStub(config);
    gdxStub = new GdxStub();
    supportFragmentStub = new SupportFragmentStub();
    fragmentStub = new FragmentStub();
    gdxLifecycleListenerStub = new GdxLifecycleListenerStub();

    try {
        Mockito.when(classReflectionMock.forName("com.badlogic.gdx.Gdx")).thenReturn(gdxStub.getClass());
        Mockito.when(classReflectionMock.getField(gdxStub.getClass(), "app")).thenReturn(fieldMock);
        Mockito.when(fieldMock.get(null)).thenReturn(Gdx.app);

    } catch (ReflectionException e) {
    }
}
项目:gdx-lml    文件:LocaleService.java   
@Override
public void processField(final Field field, final I18nLocale annotation, final Object component,
        final Context context, final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    try {
        final Object locale = Reflection.getFieldValue(field, component);
        if (locale instanceof Locale) {
            currentLocale.set((Locale) locale);
        } else if (locale instanceof String) {
            extractLocaleFromAnnotatedString(annotation, (String) locale);
        }
    } catch (final ReflectionException exception) {
        throw new GdxRuntimeException("Unable to extract application's locale.", exception);
    }

}
项目:gdx-kiwi    文件:Reflection.java   
/** Utility method that allows to extract actual annotation from field, bypassing LibGDX annotation wrapper. Returns
 * null if annotation is not present.
 *
 * @param field might be annotated.
 * @param annotationType class of the annotation.
 * @return an instance of the annotation if the field is annotated or null if not. */
public static <Type extends Annotation> Type getAnnotation(final Field field, final Class<Type> annotationType) {
    if (isAnnotationPresent(field, annotationType)) {
        return field.getDeclaredAnnotation(annotationType).getAnnotation(annotationType);
    }
    return null;
}
项目:gdx-kiwi    文件:Reflection.java   
/** @param field will be set accessible and extracted.
 * @param fieldOwner instance of class that contains the field.
 * @param fieldType class of the field. Will be used to cast the field object.
 * @return current field value.
 * @throws ReflectionException if unable to extract. */
@SuppressWarnings("unchecked")
public static <FieldType> FieldType getFieldValue(final Field field, final Object fieldOwner,
        final Class<FieldType> fieldType) throws ReflectionException {
    field.setAccessible(true);
    return (FieldType) field.get(fieldOwner);
}
项目:gdx-autumn    文件:ContextInitializer.java   
/** Scans class tree of component to process all its fields.
 *
 * @param component all fields of its class tree will be processed.
 * @param context used to resolve dependencies.
 * @param contextDestroyer used to register destruction callbacks. */
private void processFields(final Object component, final Context context, final ContextDestroyer contextDestroyer) {
    Class<?> componentClass = component.getClass();
    while (componentClass != null && !componentClass.equals(Object.class)) {
        final Field[] fields = ClassReflection.getDeclaredFields(componentClass);
        if (fields != null && fields.length > 0) {
            processFields(component, fields, context, contextDestroyer);
        }
        componentClass = componentClass.getSuperclass();
    }
}
项目:gdx-autumn    文件:ContextInitializer.java   
/** @param field will return an array of its annotations.
 * @return array of annotations or null. GWT utility. */
private static com.badlogic.gdx.utils.reflect.Annotation[] getAnnotations(final Field field) {
    try {
        return field.getDeclaredAnnotations();
    } catch (final Exception exception) {
        Exceptions.ignore(exception);
        return null;
    }
}
项目:gdx-autumn    文件:InjectAnnotationProcessor.java   
@Override
public void processField(final Field field, final Inject annotation, final Object component, final Context context,
        final ContextInitializer initializer, final ContextDestroyer contextDestroyer) {
    if (Annotations.isNotVoid(annotation.lazy())) {
        processLazyInjection(field, annotation, component, context);
    } else {
        processRegularInjection(field, annotation, component, context);
    }
}
项目:gdx-autumn    文件:InjectAnnotationProcessor.java   
/** @param field will have its value injected.
 * @param annotation used to determine dependency type.
 * @param component owner of the field.
 * @param context used to resolve dependencies. */
protected void processRegularInjection(final Field field, final Inject annotation, final Object component,
        final Context context) {
    final Class<?> dependencyClass = Annotations.isNotVoid(annotation.value()) ? annotation.value()
            : field.getType();
    setFieldValue(field, component, context.provide(dependencyClass));
}
项目:gdx-lml    文件:ContextInitializer.java   
/** @param field will return an array of its annotations.
 * @return array of annotations or null. GWT utility. */
private static com.badlogic.gdx.utils.reflect.Annotation[] getAnnotations(final Field field) {
    try {
        return field.getDeclaredAnnotations();
    } catch (final Exception exception) {
        Exceptions.ignore(exception);
        return null;
    }
}