diff options
Diffstat (limited to 'src/main/java/org/yaml/snakeyaml/introspector/Property.java')
-rw-r--r-- | src/main/java/org/yaml/snakeyaml/introspector/Property.java | 133 |
1 files changed, 76 insertions, 57 deletions
diff --git a/src/main/java/org/yaml/snakeyaml/introspector/Property.java b/src/main/java/org/yaml/snakeyaml/introspector/Property.java index 286ca0e3..a65d8505 100644 --- a/src/main/java/org/yaml/snakeyaml/introspector/Property.java +++ b/src/main/java/org/yaml/snakeyaml/introspector/Property.java @@ -1,85 +1,104 @@ /** - * Copyright (c) 2008, http://www.snakeyaml.org + * Copyright (c) 2008, SnakeYAML * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. */ package org.yaml.snakeyaml.introspector; +import java.lang.annotation.Annotation; +import java.util.List; + /** * <p> - * A <code>Property</code> represents a single member variable of a class, - * possibly including its accessor methods (getX, setX). The name stored in this - * class is the actual name of the property as given for the class, not an - * alias. + * A <code>Property</code> represents a single member variable of a class, possibly including its + * accessor methods (getX, setX). The name stored in this class is the actual name of the property + * as given for the class, not an alias. * </p> - * + * * <p> - * Objects of this class have a total ordering which defaults to ordering based - * on the name of the property. + * Objects of this class have a total ordering which defaults to ordering based on the name of the + * property. * </p> */ public abstract class Property implements Comparable<Property> { - private final String name; - private final Class<?> type; + private final String name; + private final Class<?> type; - public Property(String name, Class<?> type) { - this.name = name; - this.type = type; - } + public Property(String name, Class<?> type) { + this.name = name; + this.type = type; + } - public Class<?> getType() { - return type; - } + public Class<?> getType() { + return type; + } - abstract public Class<?>[] getActualTypeArguments(); + public abstract Class<?>[] getActualTypeArguments(); - public String getName() { - return name; - } + public String getName() { + return name; + } - @Override - public String toString() { - return getName() + " of " + getType(); - } + @Override + public String toString() { + return getName() + " of " + getType(); + } - public int compareTo(Property o) { - return name.compareTo(o.name); - } + public int compareTo(Property o) { + return getName().compareTo(o.getName()); + } - public boolean isWritable() { - return true; - } + public boolean isWritable() { + return true; + } - public boolean isReadable() { - return true; - } + public boolean isReadable() { + return true; + } - abstract public void set(Object object, Object value) throws Exception; + public abstract void set(Object object, Object value) throws Exception; - abstract public Object get(Object object); + public abstract Object get(Object object); - @Override - public int hashCode() { - return name.hashCode() + type.hashCode(); - } + /** + * Returns the annotations that are present on this property or empty {@code List} if there're no + * annotations. + * + * @return the annotations that are present on this property or empty {@code List} if there're no + * annotations + */ + public abstract List<Annotation> getAnnotations(); + + /** + * Returns property's annotation for the given type or {@code null} if it's not present. + * + * @param annotationType the type of the annotation to be returned + * @param <A> class of the annotation + * + * @return property's annotation for the given type or {@code null} if it's not present + */ + public abstract <A extends Annotation> A getAnnotation(Class<A> annotationType); + + @Override + public int hashCode() { + return getName().hashCode() + getType().hashCode(); + } - @Override - public boolean equals(Object other) { - if (other instanceof Property) { - Property p = (Property) other; - return name.equals(p.getName()) && type.equals(p.getType()); - } - return false; + @Override + public boolean equals(Object other) { + if (other instanceof Property) { + Property p = (Property) other; + return getName().equals(p.getName()) && getType().equals(p.getType()); } -}
\ No newline at end of file + return false; + } +} |