001    package sysModel.classFile.constantPool.visitors;
002    
003    import sysModel.classFile.constantPool.APoolInfo;
004    import sysModel.classFile.constantPool.ASCIIPoolInfo;
005    import sysModel.classFile.constantPool.AUTFPoolInfo;
006    import sysModel.classFile.constantPool.UnicodePoolInfo;
007    
008    /**
009     * Check that the host is a UTF info.
010     *
011     * @author Mathias Ricken
012     */
013    public class CheckUTFVisitor extends ADefaultPoolInfoVisitor<AUTFPoolInfo, Object> {
014        /**
015         * Singleton constructor.
016         */
017        private CheckUTFVisitor() {
018        }
019    
020        /**
021         * Singleton instance.
022         */
023        private static CheckUTFVisitor _instance = new CheckUTFVisitor();
024    
025        /**
026         * Singleton accessor.
027         *
028         * @return singleton
029         */
030        public static CheckUTFVisitor singleton() {
031            return _instance;
032        }
033    
034        /**
035         * All other cases throw.
036         *
037         * @param host non-UTF host
038         * @param o    not used
039         *
040         * @return nothing
041         */
042        public AUTFPoolInfo defaultCase(APoolInfo host, Object o) {
043            throw new ClassFormatError("Info is of type " + host.getClass().getName() + ", needs to be AUTFPoolInfo");
044        }
045    
046        /**
047         * Return host.
048         *
049         * @param host UTF host
050         * @param o    not used
051         *
052         * @return host
053         */
054        public AUTFPoolInfo asciizCase(ASCIIPoolInfo host, Object o) {
055            return host;
056        }
057    
058        /**
059         * Return host.
060         *
061         * @param host UTF host
062         * @param o    not used
063         *
064         * @return host
065         */
066        public AUTFPoolInfo unicodeCase(UnicodePoolInfo host, Object o) {
067            return host;
068        }
069    }