/******************************************************************************* * Copyright (c) 2004, 2017 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.tools.internal; import java.lang.reflect.*; public class MetaDataGenerator extends JNIGenerator { @Override public void generateCopyright() { generateMetaData("swt_properties_copyright"); } @Override public void generate(JNIClass clazz) { output(toC(clazz.getName())); output("="); output(((AbstractItem)clazz).flatten()); outputln(); JNIField[] fields = clazz.getDeclaredFields(); generate(fields); JNIMethod[] methods = clazz.getDeclaredMethods(); generate(methods); outputln(); } public void generate(JNIField[] fields) { for (int i = 0; i < fields.length; i++) { JNIField field = fields[i]; int mods = field.getModifiers(); if ((mods & Modifier.PUBLIC) == 0) continue; if ((mods & Modifier.FINAL) != 0) continue; if ((mods & Modifier.STATIC) != 0) continue; generate(field); outputln(); } } public void generate(JNIField field) { output(field.getDeclaringClass().getSimpleName()); output("_"); output(field.getName()); output("="); output(((AbstractItem)field).flatten()); } public void generate(JNIMethod[] methods) { sort(methods); for (int i = 0; i < methods.length; i++) { JNIMethod method = methods[i]; if ((method.getModifiers() & Modifier.NATIVE) == 0) continue; generate(method); outputln(); if (progress != null) progress.step(); } } public void generate(JNIMethod method) { StringBuilder buffer = new StringBuilder(); buffer.append(method.getDeclaringClass().getSimpleName()); buffer.append("_"); if (method.isNativeUnique()) { buffer.append(method.getName()); } else { buffer.append(getFunctionName(method)); } String key = buffer.toString(); output(key); output("="); output(((AbstractItem)method).flatten()); outputln(); JNIParameter[] params = method.getParameters(); for (int i = 0; i < params.length; i++) { output(key); output("_"); output(i + "="); output(((AbstractItem)params[i]).flatten()); outputln(); } } @Override public String getExtension() { return ".properties"; } @Override protected boolean getGenerate(JNIItem item) { return true; } @Override public String getOutputName() { return getMainClass().getName(); } protected boolean getGenerate() { return true; } }