aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/yaml/snakeyaml/introspector/Property.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/yaml/snakeyaml/introspector/Property.java')
-rw-r--r--src/main/java/org/yaml/snakeyaml/introspector/Property.java133
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;
+ }
+}