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.ReflectClass; 019 020 /** 021 * 022 * @author <a href="http://hiramchirino.com">Hiram Chirino</a> 023 */ 024 public class SizeofGenerator extends JNIGenerator { 025 026 public void generate(JNIClass clazz) { 027 String className = clazz.getSimpleName(); 028 output("\tprintf(\""); 029 output(className); 030 output("=%d\\n\", sizeof("); 031 output(className); 032 outputln("));"); 033 } 034 035 public void generate() { 036 outputln("int main() {"); 037 super.generate(); 038 outputln("}"); 039 } 040 041 public void generate(List<JNIField> fields) { 042 sortFields(fields); 043 for (JNIField field : fields) { 044 if ((field.getModifiers() & Modifier.FINAL) == 0) 045 continue; 046 generate(field); 047 } 048 } 049 050 public void generate(JNIField field) { 051 output("\tprintf(\""); 052 output(field.getName()); 053 output("=%d\\n\", sizeof("); 054 output(field.getName()); 055 outputln("));"); 056 } 057 058 public static void main(String[] args) { 059 if (args.length < 1) { 060 System.out.println("Usage: java SizeofGenerator <className1> <className2>"); 061 return; 062 } 063 try { 064 SizeofGenerator gen = new SizeofGenerator(); 065 for (int i = 0; i < args.length; i++) { 066 String clazzName = args[i]; 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 }