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 }