/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.parser; import gw.lang.parser.*; import java.util.ArrayList; import java.util.List; /** */ public class ReducedDynamicPropertySymbol extends ReducedSymbol implements IReducedDynamicPropertySymbol { private ReducedDynamicPropertySymbol _dpsParent; ReducedDynamicFunctionSymbol _dfsGetter; ReducedDynamicFunctionSymbol _dfsSetter; private String _varIdentifier; protected ReducedDynamicPropertySymbol(DynamicPropertySymbol dps) { super( dps ); _dfsGetter = dps._dfsGetter == null ? null : (ReducedDynamicFunctionSymbol) dps._dfsGetter.createReducedSymbol(); _dfsSetter = dps._dfsSetter == null ? null : (ReducedDynamicFunctionSymbol) dps._dfsSetter.createReducedSymbol(); _dpsParent = dps.getParent() == null ? null : (ReducedDynamicPropertySymbol) dps.getParent().createReducedSymbol(); _varIdentifier = dps.getVarIdentifier(); _fullDescription = dps.getFullDescription(); } public boolean isReadable() { return getGetterDfs() != null; } public boolean isWritable() { return getSetterDfs() != null; } public boolean isPublic() { return getGetterDfs() == null ? super.isPublic() : getGetterDfs().isPublic(); } public boolean isPrivate() { return getGetterDfs() == null ? super.isPrivate() : getGetterDfs().isPrivate(); } public boolean isInternal() { return getGetterDfs() == null ? super.isInternal() : getGetterDfs().isInternal(); } public boolean isProtected() { return getGetterDfs() == null ? super.isProtected() : getGetterDfs().isProtected(); } public boolean isStatic() { return getGetterDfs() == null ? super.isStatic() : getGetterDfs().isStatic(); } public boolean isAbstract() { return getGetterDfs() == null ? super.isAbstract() : getGetterDfs().isAbstract(); } public boolean isFinal() { return getGetterDfs() == null ? super.isFinal() : getGetterDfs().isFinal(); } public ReducedDynamicFunctionSymbol getGetterDfs() { return _dfsGetter == null ? _dpsParent != null ? _dpsParent.getGetterDfs() : null : _dfsGetter; } protected ReducedDynamicFunctionSymbol getImmediateGetterDfs() { return _dfsGetter; } public ReducedDynamicFunctionSymbol getSetterDfs() { return _dfsSetter == null ? _dpsParent != null ? _dpsParent.getSetterDfs() : null : _dfsSetter; } protected ReducedDynamicFunctionSymbol getImmediateSetterDfs() { return _dfsSetter; } public ReducedDynamicPropertySymbol getParent() { return _dpsParent; } public ReducedDynamicFunctionSymbol getFunction( String strFunctionName ) { if( functionNamesEqual( _dfsGetter, strFunctionName ) ) { return _dfsGetter; } if( functionNamesEqual( _dfsSetter, strFunctionName ) ) { return _dfsSetter; } return null; } private boolean functionNamesEqual( ReducedDynamicFunctionSymbol dfs, String strFunctionName ) { return dfs != null && dfs.getName().equals( strFunctionName ); } public String getVarIdentifier() { return _varIdentifier; } // // public List<IGosuAnnotation> getAnnotations() // { // return getModifierInfo().getAnnotations(); // } // // public String getFullDescription() // { // return getModifierInfo() == null ? "" : getModifierInfo().getDescription(); // } public List<IGosuAnnotation> getAnnotations() { ArrayList<IGosuAnnotation> annotations = new ArrayList<IGosuAnnotation>(); if( _dfsGetter != null ) { annotations.addAll( _dfsGetter.getAnnotations() ); } if( _dfsSetter != null && !pureVarBasedProperty() ) { annotations.addAll( _dfsSetter.getAnnotations() ); } return annotations; } private boolean pureVarBasedProperty() { return (_dfsGetter != null && _dfsGetter.isVarPropertyGet()) && (_dfsSetter != null && _dfsSetter.isVarPropertySet()); } }