package net.jangaroo.jooc.model; /** * A model of a field of an ActionScript class. */ public class PropertyModel extends MemberModel { private boolean isFinal = false; private MethodModel getter = null; private MethodModel setter = null; public PropertyModel() { } public PropertyModel(String name, String type) { super(name, type); } PropertyModel(MethodModel accessor, MethodModel counterpart) { super(accessor.getName(), accessor.isGetter() ? accessor.getType() : accessor.getParams().get(0).getType()); this.isFinal = accessor.isFinal(); this.setStatic(accessor.isStatic()); this.getter = accessor.isGetter() ? accessor : counterpart; this.setter = accessor.isSetter() ? accessor : counterpart; } @SuppressWarnings("UnusedDeclaration") public boolean isFinal() { return isFinal; } @SuppressWarnings("UnusedDeclaration") public void setFinal(boolean isFinal) { this.isFinal = isFinal; if (getter != null) { getter.setFinal(isFinal); } if (setter != null) { setter.setFinal(isFinal); } } @Override public boolean isProperty() { return true; } public MethodModel getGetter() { return getter; } public MethodModel addGetter() { getter = new MethodModel(MethodType.GET, getName(), getType()); getter.setStatic(isStatic()); getter.setAsdoc(getAsdoc()); return getter; } public MethodModel getSetter() { return setter; } public MethodModel addSetter() { setter = new MethodModel(MethodType.SET, getName(), getType()); setter.setStatic(isStatic()); return setter; } public MethodModel getMethod(MethodType methodType) { return methodType == MethodType.GET ? getter : setter; } public boolean isReadable() { return getter != null; } public boolean isWritable() { return setter != null; } @Override public void setType(String type) { super.setType(type); if (getter != null) { getter.setType(type); } if (setter != null) { setter.getParams().get(0).setType(type); } } @Override public void setStatic(boolean isStatic) { super.setStatic(isStatic); if (getter != null) { getter.setStatic(isStatic); } if (setter != null) { setter.setStatic(isStatic); } } @Override public void visit(ModelVisitor visitor) { visitor.visitProperty(this); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } if (!super.equals(o)) { return false; } PropertyModel that = (PropertyModel) o; return isFinal == that.isFinal && !(getter != null ? !getter.equals(that.getter) : that.getter != null) && !(setter != null ? !setter.equals(that.setter) : that.setter != null); } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (isFinal ? 1 : 0); result = 31 * result + (getter != null ? getter.hashCode() : 0); result = 31 * result + (setter != null ? setter.hashCode() : 0); return result; } }