FieldProperty.java revision a9de7ef39a1f086be052dfcc75ad671078c5a8a4
1/**
2 * Copyright (c) 2008-2009 Andrey Somov
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.yaml.snakeyaml.introspector;
17
18import java.lang.reflect.Field;
19import java.lang.reflect.ParameterizedType;
20import java.lang.reflect.Type;
21
22import org.yaml.snakeyaml.error.YAMLException;
23
24public class FieldProperty extends Property {
25    private final Field field;
26
27    public FieldProperty(Field field) {
28        super(field.getName(), field.getType());
29        this.field = field;
30    }
31
32    @Override
33    public void set(Object object, Object value) throws Exception {
34        field.set(object, value);
35    }
36
37    @Override
38    public Object get(Object object) {
39        try {
40            return field.get(object);
41        } catch (Exception e) {
42            throw new YAMLException("Unable to access field " + field.getName() + " on object "
43                    + object + " : " + e);
44        }
45    }
46
47    @Override
48    public Type[] getActualTypeArguments() {
49        if (field.getGenericType() instanceof ParameterizedType) {
50            ParameterizedType t = (ParameterizedType) field.getGenericType();
51            return t.getActualTypeArguments();
52        } else {
53            return null;
54        }
55    }
56}