diff options
Diffstat (limited to 'bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java')
-rw-r--r-- | bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java | 436 |
1 files changed, 0 insertions, 436 deletions
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java deleted file mode 100644 index 9f517c4b3c..0000000000 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorApp.java +++ /dev/null @@ -1,436 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 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.io.*; -import java.lang.reflect.*; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.zip.*; -import java.util.Arrays; - -import org.eclipse.swt.SWT; - -public class JNIGeneratorApp { - - Class mainClass; - ProgressMonitor progress; - String mainClassName, outputDir, classpath; - MetaData metaData; - -public JNIGeneratorApp() { -} - -public String getClasspath() { - return classpath; -} - -public Class getMainClass() { - return mainClass; -} - -public String getMainClassName() { - return mainClassName; -} - -public MetaData getMetaData() { - return metaData; -} - -String getMetaDataDir() { - return "./JNI Generation/org/eclipse/swt/tools/internal/"; -} - -public String getOutputDir() { - return outputDir; -} - -public void generateAll() { - String mainClasses = new MetaData(getDefaultMainClass()).getMetaData("swt_main_classes", null); - if (mainClasses != null) { - String[] list = ItemData.split(mainClasses, ","); - for (int i = 0; i < list.length; i += 2) { - String className = list[i].trim(); - try { - Class.forName(className, false, getClass().getClassLoader()); - } catch (Throwable e) { - continue; - } - System.out.println("Generating \"" + className + "\""); - setMainClassName(className); - generate(); - } - } -} - -void generateSTATS_C(Class[] classes) { - try { - StatsGenerator gen = new StatsGenerator(false); - gen.setMainClass(mainClass); - gen.setClasses(classes); - gen.setMetaData(metaData); - gen.setProgressMonitor(progress); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - gen.setOutput(new PrintStream(out)); - gen.generate(); - if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName()); - } catch (Exception e) { - System.out.println("Problem"); - e.printStackTrace(System.out); - } -} - -void generateSTATS_H(Class[] classes) { - try { - StatsGenerator gen = new StatsGenerator(true); - gen.setMainClass(mainClass); - gen.setClasses(classes); - gen.setMetaData(metaData); - gen.setProgressMonitor(progress); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - gen.setOutput(new PrintStream(out)); - gen.generate(); - if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName()); - } catch (Exception e) { - System.out.println("Problem"); - e.printStackTrace(System.out); - } -} - -void generateSTRUCTS_H(Class[] classes) { - try { - StructsGenerator gen = new StructsGenerator(true); - gen.setMainClass(mainClass); - gen.setClasses(classes); - gen.setMetaData(metaData); - gen.setProgressMonitor(progress); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - gen.setOutput(new PrintStream(out)); - gen.generate(); - if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName()); - } catch (Exception e) { - System.out.println("Problem"); - e.printStackTrace(System.out); - } - -} - -void generateSTRUCTS_C(Class[] classes) { - try { - StructsGenerator gen = new StructsGenerator(false); - gen.setMainClass(mainClass); - gen.setClasses(classes); - gen.setMetaData(metaData); - gen.setProgressMonitor(progress); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - gen.setOutput(new PrintStream(out)); - gen.generate(); - if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName()); - } catch (Exception e) { - System.out.println("Problem"); - e.printStackTrace(System.out); - } - -} - -void generateSWT_C(Class[] classes) { - try { - NativesGenerator gen = new NativesGenerator(); - gen.setMainClass(mainClass); - gen.setClasses(classes); - gen.setMetaData(metaData); - gen.setProgressMonitor(progress); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - gen.setOutput(new PrintStream(out)); - gen.generate(); - if (out.size() > 0) output(out.toByteArray(), outputDir + gen.getFileName()); - } catch (Exception e) { - System.out.println("Problem"); - e.printStackTrace(System.out); - } -} - - -void generateMetaData(Class[] classes) { - try { - MetaDataGenerator gen = new MetaDataGenerator(); - gen.setMainClass(mainClass); - gen.setClasses(classes); - gen.setMetaData(metaData); - gen.setProgressMonitor(progress); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - gen.setOutput(new PrintStream(out)); - gen.generate(); - if (!new File(getMetaDataDir()).exists()) { - System.out.println("Warning: Meta data output dir does not exist"); - return; - } - if (out.size() > 0) output(out.toByteArray(), getMetaDataDir() + gen.getFileName()); - } catch (Exception e) { - System.out.println("Problem"); - e.printStackTrace(System.out); - } -} - -public void generate() { - generate(null); -} - -public void generate(ProgressMonitor progress) { - if (mainClassName == null) return; - if (progress != null) progress.setMessage("Initializing..."); - Class[] classes = getClasses(); - Class[] natives = getNativesClasses(); - Class[] structs = getStructureClasses(); - this.progress = progress; - if (progress != null) { - int nativeCount = 0; - for (int i = 0; i < natives.length; i++) { - Class clazz = natives[i]; - Method[] methods = clazz.getDeclaredMethods(); - for (int j = 0; j < methods.length; j++) { - Method method = methods[j]; - if ((method.getModifiers() & Modifier.NATIVE) == 0) continue; - nativeCount++; - } - } - int total = nativeCount * 4; - total += classes.length; - total += natives.length * 3; - total += structs.length * 2; - progress.setTotal(total); - progress.setMessage("Generating structs.h ..."); - } - generateSTRUCTS_H(structs); - if (progress != null) progress.setMessage("Generating structs.c ..."); - generateSTRUCTS_C(structs); - if (progress != null) progress.setMessage("Generating natives ..."); - generateSWT_C(natives); - if (progress != null) progress.setMessage("Generating stats.h ..."); - generateSTATS_H(natives); - if (progress != null) progress.setMessage("Generating stats.c ..."); - generateSTATS_C(natives); - if (progress != null) progress.setMessage("Generating meta data ..."); - generateMetaData(classes); - if (progress != null) progress.setMessage("Done."); - this.progress = null; -} - -boolean compare(InputStream is1, InputStream is2) throws IOException { - while (true) { - int c1 = is1.read(); - int c2 = is2.read(); - if (c1 != c2) return false; - if (c1 == -1) break; - } - return true; -} - -void output(byte[] bytes, String fileName) throws IOException { - FileInputStream is = null; - try { - is = new FileInputStream(fileName); - if (compare(new ByteArrayInputStream(bytes), new BufferedInputStream(is))) return; - } catch (FileNotFoundException e) { - } finally { - try { - if (is != null) is.close(); - } catch (IOException e) {} - } - FileOutputStream out = new FileOutputStream(fileName); - out.write(bytes); - out.close(); -} - -String getPackageName(String className) { - int dot = mainClassName.lastIndexOf('.'); - if (dot == -1) return ""; - return mainClassName.substring(0, dot); -} - -String[] getClassNames(String mainClassName) { - String pkgName = getPackageName(mainClassName); - String classpath = getClasspath(); - if (classpath == null) classpath = System.getProperty("java.class.path"); - String pkgPath = pkgName.replace('.', File.separatorChar); - String pkgZipPath = pkgName.replace('.', '/'); - ArrayList classes = new ArrayList(); - int start = 0; - int index = 0; - while (index < classpath.length()) { - index = classpath.indexOf(File.pathSeparatorChar, start); - if (index == -1) index = classpath.length(); - String path = classpath.substring(start, index); - if (path.toLowerCase().endsWith(".jar")) { - ZipFile zipFile = null; - try { - zipFile = new ZipFile(path); - Enumeration entries = zipFile.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = (ZipEntry)entries.nextElement(); - String name = entry.getName(); - if (name.startsWith(pkgZipPath) && name.indexOf('/', pkgZipPath.length() + 1) == -1 && name.endsWith(".class")) { - String className = name.substring(pkgZipPath.length() + 1, name.length() - 6); - className.replace('/', '.'); - classes.add(className); - } - } - } catch (IOException e) { - } finally { - try { - if (zipFile != null) zipFile.close(); - } catch (IOException ex) {} - } - } else { - File file = new File(path + File.separator + pkgPath); - if (file.exists()) { - String[] entries = file.list(); - for (int i = 0; i < entries.length; i++) { - String entry = entries[i]; - File f = new File(file, entry); - if (!f.isDirectory()) { - if (f.getAbsolutePath().endsWith(".class")) { - String className = entry.substring(0, entry.length() - 6); - classes.add(className); - } - } - } - } - } - start = index + 1; - } - return (String[])classes.toArray(new String[classes.size()]); -} - -public Class[] getClasses() { - if (mainClassName == null) return new Class[0]; - String[] classNames = getClassNames(mainClassName); - Arrays.sort(classNames); - String packageName = getPackageName(mainClassName); - Class[] classes = new Class[classNames.length]; - for (int i = 0; i < classNames.length; i++) { - String className = classNames[i]; - try { - classes[i] = Class.forName(packageName + "." + className, false, getClass().getClassLoader()); - } catch (Exception e) { - e.printStackTrace(); - } - } - return classes; -} - -public Class[] getNativesClasses() { - if (mainClassName == null) return new Class[0]; - ArrayList result = new ArrayList(); - Class[] classes = getClasses(); - for (int i = 0; i < classes.length; i++) { - Class clazz = classes[i]; - Method[] methods = clazz.getDeclaredMethods(); - for (int j = 0; j < methods.length; j++) { - Method method = methods[j]; - int mods = method.getModifiers(); - if ((mods & Modifier.NATIVE) != 0) { - result.add(clazz); - break; - } - } - } - return (Class[])result.toArray(new Class[result.size()]); -} - -public Class[] getStructureClasses() { - if (mainClassName == null) return new Class[0]; - ArrayList result = new ArrayList(); - Class[] classes = getClasses(); - outer: - for (int i = 0; i < classes.length; i++) { - Class clazz = classes[i]; - Method[] methods = clazz.getDeclaredMethods(); - for (int j = 0; j < methods.length; j++) { - Method method = methods[j]; - int mods = method.getModifiers(); - if ((mods & Modifier.NATIVE) != 0) continue outer; - } - Field[] fields = clazz.getFields(); - boolean hasPublicFields = false; - for (int j = 0; j < fields.length; j++) { - Field field = fields[j]; - int mods = field.getModifiers(); - if ((mods & Modifier.PUBLIC) != 0 && (mods & Modifier.STATIC) == 0) { - hasPublicFields = true; - break; - } - } - if (!hasPublicFields) continue; - result.add(clazz); - } - return (Class[])result.toArray(new Class[result.size()]); -} - -public void setClasspath(String classpath) { - this.classpath = classpath; -} - -public void setMainClassName(String str) { - mainClassName = str; - metaData = new MetaData(mainClassName); - String mainClasses = getMetaData().getMetaData("swt_main_classes", null); - if (mainClasses != null) { - String[] list = ItemData.split(mainClasses, ","); - for (int i = 0; i < list.length; i += 2) { - if (mainClassName.equals(list[i].trim())) { - setOutputDir(list[i + 1].trim()); - } - } - } - if (mainClassName != null) { - try { - mainClass = Class.forName(mainClassName, false, getClass().getClassLoader()); - } catch (Exception e) { - e.printStackTrace(); - } - } -} - -public void setOutputDir(String str) { - if (str != null) { - if (!str.endsWith("\\") && !str.endsWith("/") ) { - str += File.separator; - } - } - outputDir = str; -} - -public static String getDefaultMainClass() { - return "org.eclipse.swt.internal." + getDefaultPlatform() + ".OS"; -} - -public static String getDefaultPlatform() { - return SWT.getPlatform(); -} - -public static void main(String[] args) { - JNIGeneratorApp gen = new JNIGeneratorApp (); - if (args.length == 1 && (args[0].equals("*") || args[0].equals("all"))) { - gen.generateAll(); - return; - } - if (args.length > 0) { - gen.setMainClassName(args[0]); - if (args.length > 1) gen.setOutputDir(args[1]); - if (args.length > 2) gen.setClasspath(args[2]); - } else { - gen.setMainClassName(getDefaultMainClass()); - } - gen.generate(); -} - -} |