001 /* 002 * file StpLocationNamespaceVisitor.java 003 * 004 * IBM Confidential 005 * OCO Source Materials 006 * Rational ClearCase 007 * (C) Copyright IBM Corp. 2010. All rights reserved. 008 * 009 * The source code for this program is not published or otherwise 010 * divested of its trade secrets, irrespective of what has been 011 * deposited with the U.S. Copyright Office. 012 */ 013 package com.ibm.rational.wvcm.stpex.annotation.processing; 014 015 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.INDENT; 016 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.createFile; 017 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.ensureUniqueAndAddIfSo; 018 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.getRpcEnumValues; 019 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.writeCommonHeader; 020 021 import java.io.PrintWriter; 022 import java.util.HashMap; 023 import java.util.Map; 024 import java.util.TreeSet; 025 026 027 import com.ibm.rational.wvcm.stpex.annotation.processing.StpVisitor.TagInfo; 028 import com.sun.mirror.apt.AnnotationProcessorEnvironment; 029 import com.sun.mirror.apt.Filer; 030 import com.sun.mirror.declaration.EnumConstantDeclaration; 031 import com.sun.mirror.util.SimpleDeclarationVisitor; 032 033 public class StpLocationNamespaceVisitor extends SimpleDeclarationVisitor implements StpVisitor{ 034 private final Map<Integer, TagInfo> m_enums = new HashMap<Integer, TagInfo>(); 035 private final AnnotationProcessorEnvironment m_env; 036 037 private static final String g_hxxFileName = "selector_ns_decl.hxx"; 038 private static final String g_cxxFileName = "selector_ns_impl.cxx"; 039 040 private PrintWriter m_hxxOut; 041 private PrintWriter m_cxxOut; 042 043 public StpLocationNamespaceVisitor(AnnotationProcessorEnvironment env) 044 { 045 //System.out.println("Creating StpLocationNamespaceVisitor"); 046 m_env = env; 047 } 048 049 public void begin() { 050 //System.out.println("StpLocationNamespaceVisitor begin"); 051 Filer filer = m_env.getFiler(); 052 writeHxxBegin(filer); 053 writeCxxBegin(filer); 054 } 055 056 public void end() { 057 058 TreeSet<Integer> keys = new TreeSet<Integer>(m_enums.keySet()); 059 writeHxxEnd(keys); 060 writeCxxEnd(keys); 061 //System.out.println("StpLocationNamespaceVisitor end"); 062 } 063 064 public void writeHxxBegin(Filer filer) 065 { 066 m_hxxOut = createFile(filer, g_hxxFileName); 067 068 writeCommonHeader(m_hxxOut, this); 069 } 070 071 public void writeHxxEnd(TreeSet<Integer> keys) 072 { 073 for (Integer id : keys) { 074 TagInfo info = m_enums.get(id); 075 m_hxxOut.println(INDENT + "NS_" + info.fieldName + " = " + id + ","); 076 } 077 078 m_hxxOut.flush(); 079 m_hxxOut.close(); 080 } 081 082 public void writeCxxBegin(Filer filer) 083 { 084 m_cxxOut = createFile(filer, g_cxxFileName); 085 086 writeCommonHeader(m_cxxOut, this); 087 } 088 089 public void writeCxxEnd(TreeSet<Integer> keys) 090 { 091 for (Integer id : keys) { 092 TagInfo info = m_enums.get(id); 093 m_cxxOut.println("NS_DEFN(NS_" + info.fieldName + ", L\"" + info.simple + "\");"); 094 } 095 096 m_cxxOut.flush(); 097 m_cxxOut.close(); 098 } 099 100 @Override 101 public void visitEnumConstantDeclaration(EnumConstantDeclaration ecd) { 102 103 TagInfo info = getRpcEnumValues(ecd.getAnnotationMirrors()); 104 if (info != null) { 105 info.fieldName = ecd.getSimpleName(); 106 ensureUniqueAndAddIfSo(m_enums, info); 107 } 108 } 109 }