001 /* 002 * file ProviderDomainVisitor.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.File; 022 import java.io.IOException; 023 import java.io.PrintWriter; 024 import java.util.HashMap; 025 import java.util.Map; 026 import java.util.TreeSet; 027 028 029 import com.ibm.rational.wvcm.stpex.annotation.processing.StpVisitor.TagInfo; 030 import com.sun.mirror.apt.AnnotationProcessorEnvironment; 031 import com.sun.mirror.apt.Filer; 032 import com.sun.mirror.declaration.EnumConstantDeclaration; 033 import com.sun.mirror.util.SimpleDeclarationVisitor; 034 035 public class ProviderDomainVisitor extends SimpleDeclarationVisitor implements StpVisitor 036 { 037 private final Map<Integer, TagInfo> m_enums = new HashMap<Integer, TagInfo>(); 038 private final AnnotationProcessorEnvironment m_env; 039 040 private static final String g_hxxFileName = "selector_domain_decl.hxx"; 041 private static final String g_cxxFileName = "selector_domain_impl.cxx"; 042 043 private PrintWriter m_hxxOut; 044 private PrintWriter m_cxxOut; 045 046 public ProviderDomainVisitor(AnnotationProcessorEnvironment env) 047 { 048 //System.out.println("Creating ProviderDomainVisitor"); 049 m_env = env; 050 } 051 052 public void begin() { 053 //System.out.println("ProviderDomainVisitor begin"); 054 Filer filer = m_env.getFiler(); 055 writeHxxBegin(filer); 056 writeCxxBegin(filer); 057 } 058 059 public void end() { 060 061 TreeSet<Integer> keys = new TreeSet<Integer>(m_enums.keySet()); 062 writeHxxEnd(keys); 063 writeCxxEnd(keys); 064 //System.out.println("ProviderDomainVisitor end"); 065 } 066 067 public void writeHxxBegin(Filer filer) 068 { 069 m_hxxOut = createFile(filer, g_hxxFileName); 070 071 writeCommonHeader(m_hxxOut, this); 072 } 073 074 public void writeHxxEnd(TreeSet<Integer> keys) 075 { 076 for (Integer id : keys) { 077 TagInfo info = m_enums.get(id); 078 m_hxxOut.println(INDENT + "DOMAIN_" + info.fieldName + " = " + id + ","); 079 } 080 081 m_hxxOut.flush(); 082 m_hxxOut.close(); 083 } 084 085 public void writeCxxBegin(Filer filer) 086 { 087 m_cxxOut = createFile(filer, g_cxxFileName); 088 089 writeCommonHeader(m_cxxOut, this); 090 } 091 092 public void writeCxxEnd(TreeSet<Integer> keys) 093 { 094 for (Integer id : keys) { 095 TagInfo info = m_enums.get(id); 096 m_cxxOut.println("RT_DEFN(DOMAIN_" + info.fieldName + ", L\"" + info.simple + "\");"); 097 } 098 099 m_cxxOut.flush(); 100 m_cxxOut.close(); 101 } 102 103 @Override 104 public void visitEnumConstantDeclaration(EnumConstantDeclaration ecd) { 105 106 TagInfo info = getRpcEnumValues(ecd.getAnnotationMirrors()); 107 if (info != null) { 108 info.fieldName = ecd.getSimpleName(); 109 ensureUniqueAndAddIfSo(m_enums, info); 110 } 111 } 112 }