001 /******************************************************************************* 002 * Copyright (c) 2009 Progress Software, Inc. 003 * Copyright (c) 2004 IBM Corporation and others. 004 * 005 * All rights reserved. This program and the accompanying materials 006 * are made available under the terms of the Eclipse Public License v1.0 007 * which accompanies this distribution, and is available at 008 * http://www.eclipse.org/legal/epl-v10.html 009 * 010 *******************************************************************************/ 011 package org.fusesource.hawtjni.generator; 012 013 import java.lang.reflect.Modifier; 014 import java.util.List; 015 016 import org.fusesource.hawtjni.generator.model.JNIClass; 017 import org.fusesource.hawtjni.generator.model.JNIField; 018 import org.fusesource.hawtjni.generator.model.JNIType; 019 import org.fusesource.hawtjni.generator.model.ReflectClass; 020 021 /** 022 * 023 * @author <a href="http://hiramchirino.com">Hiram Chirino</a> 024 */ 025 public class ConstantsGenerator extends JNIGenerator { 026 027 public void generate(JNIClass clazz) { 028 List<JNIField> fields = clazz.getDeclaredFields(); 029 generate(fields); 030 } 031 032 public void generate(List<JNIField> fields) { 033 sortFields(fields); 034 outputln("int main() {"); 035 for (JNIField field : fields) { 036 if ((field.getModifiers() & Modifier.FINAL) == 0) 037 continue; 038 generate(field); 039 } 040 outputln("}"); 041 } 042 043 public void generate(JNIField field) { 044 JNIType type = field.getType(); 045 output("\tprintf(\"public static final "); 046 output(field.getType().getTypeSignature3(false)); 047 output(" "); 048 output(field.getName()); 049 output(" = "); 050 if (type.isType("java.lang.String") || type.isType("[B")) 051 output("\"%s\""); 052 else 053 output("0x%x"); 054 output(";\\n\", "); 055 output(field.getName()); 056 outputln(");"); 057 } 058 059 public static void main(String[] args) { 060 if (args.length < 1) { 061 System.out.println("Usage: java ConstantsGenerator <className1> <className2>"); 062 return; 063 } 064 try { 065 ConstantsGenerator gen = new ConstantsGenerator(); 066 for (String clazzName : args) { 067 Class<?> clazz = Class.forName(clazzName); 068 gen.generate(new ReflectClass(clazz)); 069 } 070 } catch (Exception e) { 071 System.out.println("Problem"); 072 e.printStackTrace(System.out); 073 } 074 } 075 076 }