001    package sysModel.classFile.attributes.visitors;
002    
003    import sysModel.classFile.attributes.*;
004    
005    /**
006     * An attribute visitor in which all cases call an abstract default method.
007     *
008     * @author Mathias Ricken
009     */
010    public abstract class ADefaultAttributeVisitor <R, D> implements IAttributeVisitor<R, D> {
011        /**
012         * Abstract default case.
013         *
014         * @param host  host
015         * @param param visitor-specific parameter
016         *
017         * @return visitor-specific return value
018         */
019        public abstract R defaultCase(AAttributeInfo host, D param);
020    
021        /**
022         * Case for SourceFile attribute.
023         *
024         * @param host  attribute
025         * @param param visitor-specific parameter
026         *
027         * @return visitor-specific return vakue
028         */
029        public R sourceFileCase(SourceFileAttributeInfo host, D param) {
030            return defaultCase(host, param);
031        }
032    
033        /**
034         * Case for an unknown attribute.
035         *
036         * @param host  attribute
037         * @param param visitor-specific parameter
038         *
039         * @return visitor-specific return vakue
040         */
041        public R unknownCase(UnknownAttributeInfo host, D param) {
042            return defaultCase(host, param);
043        }
044    
045        /**
046         * Case for Code attribute.
047         *
048         * @param host  attribute
049         * @param param visitor-specific parameter
050         *
051         * @return visitor-specific return vakue
052         */
053        public R codeCase(CodeAttributeInfo host, D param) {
054            return defaultCase(host, param);
055        }
056    }