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