diff options
Diffstat (limited to 'bundles')
11 files changed, 136 insertions, 227 deletions
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java index 06aaa2c101..b1d57a68b8 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupConstants.java @@ -38,12 +38,7 @@ public void generate(Class clazz) { } public void generate(Field[] fields) { - Arrays.sort(fields, new Comparator() { - public int compare(Object a, Object b) { - return ((Field)a).getName().compareTo(((Field)b).getName()); - } - }); - + sort(fields); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; if ((field.getModifiers() & Modifier.FINAL) == 0) continue; diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java index 0e908795b1..dab69df6ee 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/CleanupNatives.java @@ -57,12 +57,7 @@ public void generate(Class clazz) { } public void generate(Method[] methods) { - Arrays.sort(methods, new Comparator() { - public int compare(Object a, Object b) { - return ((Method)a).getName().compareTo(((Method)b).getName()); - } - }); - + sort(methods); for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if ((method.getModifiers() & Modifier.NATIVE) == 0) continue; diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java index f22228b998..68ca6acd16 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/ConstantsGenerator.java @@ -11,7 +11,6 @@ package org.eclipse.swt.tools.internal; import java.lang.reflect.*; -import java.util.*; public class ConstantsGenerator extends JNIGenerator { @@ -21,12 +20,7 @@ public void generate(Class clazz) { } public void generate(Field[] fields) { - Arrays.sort(fields, new Comparator() { - public int compare(Object a, Object b) { - return ((Field)a).getName().compareTo(((Field)b).getName()); - } - }); - + sort(fields); output("int main() {"); outputDelimiter(); for (int i = 0; i < fields.length; i++) { diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java index ab4f1a4d83..5c10a01fc8 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGenerator.java @@ -176,6 +176,49 @@ static boolean isUnique(Method method, int modifierMask) { return true; } +static void sort(Method[] methods) { + Arrays.sort(methods, new Comparator() { + public int compare(Object a, Object b) { + Method mth1 = (Method)a; + Method mth2 = (Method)b; + int result = mth1.getName().compareTo(mth2.getName()); + return result != 0 ? result : getFunctionName(mth1).compareTo(getFunctionName(mth2)); + } + }); +} + +static void sort(Field[] fields) { + Arrays.sort(fields, new Comparator() { + public int compare(Object a, Object b) { + return ((Field)a).getName().compareTo(((Field)b).getName()); + } + }); +} + +static void sort(Class[] classes) { + Arrays.sort(classes, new Comparator() { + public int compare(Object a, Object b) { + return ((Class)a).getName().compareTo(((Class)b).getName()); + } + }); +} + +static String toC(String str) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + switch (c) { + case '_': buf.append("_1"); break; + case ';': buf.append("_2"); break; + case '[': buf.append("_3"); break; + case '.': buf.append("_"); break; + case '/': buf.append("_"); break; + default: buf.append(c); + } + } + return buf.toString(); +} + public String getDelimiter() { return delimiter; } @@ -198,22 +241,8 @@ public void generateMetaData(String key) { outputDelimiter(); } -public void generateNativeMacro(Class clazz) { - output("#define "); - output(getClassName(clazz)); - output("_NATIVE(func) Java_"); - output(toC(clazz.getName())); - output("_##func"); - outputDelimiter(); - outputDelimiter(); -} - public void generate(Class[] classes) { - Arrays.sort(classes, new Comparator() { - public int compare(Object a, Object b) { - return ((Class)a).getName().compareTo(((Class)b).getName()); - } - }); + sort(classes); for (int i = 0; i < classes.length; i++) { Class clazz = classes[i]; generate(clazz); @@ -240,31 +269,4 @@ public void setMetaData(MetaData data) { metaData = data; } -static void sort(Method[] methods) { - Arrays.sort(methods, new Comparator() { - public int compare(Object a, Object b) { - Method mth1 = (Method)a; - Method mth2 = (Method)b; - int result = mth1.getName().compareTo(mth2.getName()); - return result != 0 ? result : getFunctionName(mth1).compareTo(getFunctionName(mth2)); - } - }); -} - -static String toC(String str) { - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - switch (c) { - case '_': buf.append("_1"); break; - case ';': buf.append("_2"); break; - case '[': buf.append("_3"); break; - case '.': buf.append("_"); break; - case '/': buf.append("_"); break; - default: buf.append(c); - } - } - return buf.toString(); -} - } 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 index 3608f50f3f..541b14a029 100644 --- 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 @@ -17,7 +17,6 @@ import java.util.Enumeration; import java.util.Properties; import java.util.zip.*; import java.util.Arrays; -import java.util.Comparator; import org.eclipse.swt.internal.Platform; @@ -234,11 +233,7 @@ String[] getClassNames(String mainClassName) { public Class[] getClasses() { if (mainClass == null) return new Class[0]; String[] classNames = getClassNames(mainClass); - Arrays.sort(classNames, new Comparator() { - public int compare(Object a, Object b) { - return ((String)a).compareTo((String)b); - } - }); + Arrays.sort(classNames); String packageName = getPackageName(mainClass); Class[] classes = new Class[classNames.length]; for (int i = 0; i < classNames.length; i++) { diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java index 58be77208f..47901ae0b4 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/JNIGeneratorAppUI.java @@ -12,8 +12,6 @@ package org.eclipse.swt.tools.internal; import java.io.*; import java.lang.reflect.*; -import java.util.Arrays; -import java.util.Comparator; import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; @@ -69,31 +67,14 @@ void generateStructsHeader () { StructsGenerator gen = new StructsGenerator(); gen.setMetaData(app.getMetaData()); Class[] classes = getSelectedClasses(); - Arrays.sort(classes, new Comparator() { - public int compare(Object a, Object b) { - return ((Class)a).getName().compareTo(((Class)b).getName()); - } - }); - for (int i = 0; i < classes.length; i++) { - Class clazz = classes[i]; - gen.generateHeaderFile(clazz); - } + gen.generateHeaderFile(classes); } void generateStructs () { StructsGenerator gen = new StructsGenerator(); gen.setMetaData(app.getMetaData()); Class[] classes = getSelectedClasses(); - Arrays.sort(classes, new Comparator() { - public int compare(Object a, Object b) { - return ((Class)a).getName().compareTo(((Class)b).getName()); - } - }); - for (int i = 0; i < classes.length; i++) { - Class clazz = classes[i]; - gen.generateSourceFile(clazz); - gen.outputDelimiter(); - } + gen.generateSourceFile(classes); } void generateSizeof () { diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativeTest.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativeTest.java deleted file mode 100644 index 8a8e5dc1f8..0000000000 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativeTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.tools.internal; - -/** - * @author silenio - * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - */ -public class NativeTest { - -public final native void test1(); -public final static native int test2(); -public final static native void test3(boolean b); -public final static native void test4(int[] i); -public final static native double test5(int[] i); -public final native int test5(StructTest t, int i); - -} diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java index b3e45d4790..47b5da5e03 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/NativesGenerator.java @@ -91,6 +91,48 @@ public void generate(Method[] methods) { } } +public void generate(Method method) { + MethodData methodData = getMetaData().getMetaData(method); + if (methodData.getFlag("no_gen")) return; + Class returnType = method.getReturnType(); + Class[] paramTypes = method.getParameterTypes(); + String function = getFunctionName(method); + + if (!(returnType == Void.TYPE || returnType.isPrimitive())) { + output("Warnning: bad return type. :" + method); + outputDelimiter(); + return; + } + + generateSourceStart(function); + generateFunctionPrototype(method, function, paramTypes, returnType); + generateFunctionBody(method, methodData, function, paramTypes, returnType); + generateSourceEnd(function); + outputDelimiter(); +} + +public void setEnterExitMacro(boolean enterExitMacro) { + this.enterExitMacro = enterExitMacro; +} + +public void setNativeMacro(boolean nativeMacro) { + this.nativeMacro = nativeMacro; +} + +public void setUseCritical(boolean useCritical) { + this.useCritical = useCritical; +} + +void generateNativeMacro(Class clazz) { + output("#define "); + output(getClassName(clazz)); + output("_NATIVE(func) Java_"); + output(toC(clazz.getName())); + output("_##func"); + outputDelimiter(); + outputDelimiter(); +} + void generateGetParameter(int i, Class paramType, ParameterData paramData) { if (paramType.isPrimitive()) return; output("\tif (arg" + i); @@ -454,42 +496,10 @@ void generateSourceEnd(String function) { outputDelimiter(); } -public void generate(Method method) { - MethodData methodData = getMetaData().getMetaData(method); - if (methodData.getFlag("no_gen")) return; - Class returnType = method.getReturnType(); - Class[] paramTypes = method.getParameterTypes(); - String function = getFunctionName(method); - - if (!(returnType == Void.TYPE || returnType.isPrimitive())) { - output("Warnning: bad return type. :" + method); - outputDelimiter(); - return; - } - - generateSourceStart(function); - generateFunctionPrototype(method, function, paramTypes, returnType); - generateFunctionBody(method, methodData, function, paramTypes, returnType); - generateSourceEnd(function); - outputDelimiter(); -} - boolean isUnique(Method method) { return isUnique(method, Modifier.NATIVE); } -public void setEnterExitMacro(boolean enterExitMacro) { - this.enterExitMacro = enterExitMacro; -} - -public void setNativeMacro(boolean nativeMacro) { - this.nativeMacro = nativeMacro; -} - -public void setUseCritical(boolean useCritical) { - this.useCritical = useCritical; -} - public static void main(String[] args) { // args = new String[]{"org.eclipse.swt.internal.win32.OS"}; if (args.length < 1) { @@ -498,7 +508,6 @@ public static void main(String[] args) { } try { NativesGenerator gen = new NativesGenerator(); - gen.setNativeMacro(true); for (int i = 0; i < args.length; i++) { String clazzName = args[i]; Class clazz = Class.forName(clazzName); diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java index 80caa30838..8a325acc4d 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/SizeofGenerator.java @@ -11,7 +11,6 @@ package org.eclipse.swt.tools.internal; import java.lang.reflect.*; -import java.util.*; public class SizeofGenerator extends JNIGenerator { @@ -36,12 +35,7 @@ public void generate(Class clazz) { } public void generate(Field[] fields) { - Arrays.sort(fields, new Comparator() { - public int compare(Object a, Object b) { - return ((Field)a).getName().compareTo(((Field)b).getName()); - } - }); - + sort(fields); for (int i = 0; i < fields.length; i++) { Field field = fields[i]; if ((field.getModifiers() & Modifier.FINAL) == 0) continue; @@ -64,7 +58,7 @@ public static void main(String[] args) { return; } try { - ConstantsGenerator gen = new ConstantsGenerator(); + SizeofGenerator gen = new SizeofGenerator(); for (int i = 0; i < args.length; i++) { String clazzName = args[i]; Class clazz = Class.forName(clazzName); diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructTest.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructTest.java deleted file mode 100644 index f9eb16135e..0000000000 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructTest.java +++ /dev/null @@ -1,18 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.swt.tools.internal; - -public class StructTest { -public int intField; -public int charField; -public StructTest objectField; -public double[] arrayField; -} diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java index 6c2719fc76..6fd6e65b4b 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/StructsGenerator.java @@ -23,33 +23,6 @@ public void generate(Class clazz) { generateSourceFile(clazz); } -public void generateHeaderFile(Class clazz) { - generateSourceStart(clazz); - generatePrototypes(clazz); - generateBlankMacros(clazz); - generateSourceEnd(clazz); - outputDelimiter(); -} - -void sort(Class[] classes) { - Arrays.sort(classes, new Comparator() { - public int compare(Object a, Object b) { - if (a == b) return 0; - Class class1 = (Class)a; - Class class2 = (Class)b; - Class tempClass = class1; - while ((tempClass = tempClass.getSuperclass()) != Object.class) { - if (tempClass == class2) return 1; - } - tempClass = class2; - while ((tempClass = tempClass.getSuperclass()) != Object.class) { - if (tempClass == class1) return -1; - } - return class1.getName().compareTo(class2.getName()); - } - }); -} - public void generateExcludes(Class[] classes) { HashSet excludes = new HashSet(); for (int i = 0; i < classes.length; i++) { @@ -80,9 +53,17 @@ public void generateExcludes(Class[] classes) { } } +public void generateHeaderFile(Class clazz) { + generateSourceStart(clazz); + generatePrototypes(clazz); + generateBlankMacros(clazz); + generateSourceEnd(clazz); + outputDelimiter(); +} + public void generateHeaderFile(Class[] classes) { if (classes.length == 0) return; - sort(classes); + sortStructs(classes); generateMetaData("swt_copyright"); generateMetaData("swt_includes"); generateExcludes(classes); @@ -90,11 +71,7 @@ public void generateHeaderFile(Class[] classes) { Class clazz = classes[i]; ClassData classData = getMetaData().getMetaData(clazz); if (classData.getFlag("no_gen")) continue; - generateSourceStart(clazz); - generatePrototypes(clazz); - generateBlankMacros(clazz); - generateSourceEnd(clazz); - outputDelimiter(); + generateHeaderFile(clazz); } } @@ -106,42 +83,36 @@ public void generateSourceFile(Class clazz) { outputDelimiter(); generateFunctions(clazz); generateSourceEnd(clazz); + outputDelimiter(); } public void generateSourceFile(Class[] classes) { if (classes.length == 0) return; - sort(classes); + sortStructs(classes); generateMetaData("swt_copyright"); generateMetaData("swt_includes"); for (int i = 0; i < classes.length; i++) { Class clazz = classes[i]; ClassData classData = getMetaData().getMetaData(clazz); if (classData.getFlag("no_gen")) continue; - generateSourceStart(clazz); - generateFIDsStructure(clazz); - outputDelimiter(); - generateGlobalVar(clazz); - outputDelimiter(); - generateFunctions(clazz); - generateSourceEnd(clazz); - outputDelimiter(); + generateSourceFile(clazz); } } -public void generateSourceStart(Class clazz) { +void generateSourceStart(Class clazz) { String clazzName = getClassName(clazz); output("#ifndef NO_"); output(clazzName); outputDelimiter(); } -public void generateSourceEnd(Class clazz) { +void generateSourceEnd(Class clazz) { String clazzName = getClassName(clazz); output("#endif"); outputDelimiter(); } -public void generateGlobalVar(Class clazz) { +void generateGlobalVar(Class clazz) { String clazzName = getClassName(clazz); output(clazzName); output("_FID_CACHE "); @@ -150,7 +121,7 @@ public void generateGlobalVar(Class clazz) { outputDelimiter(); } -public void generateBlankMacros(Class clazz) { +void generateBlankMacros(Class clazz) { String clazzName = getClassName(clazz); output("#else"); outputDelimiter(); @@ -168,7 +139,7 @@ public void generateBlankMacros(Class clazz) { outputDelimiter(); } -public void generatePrototypes(Class clazz) { +void generatePrototypes(Class clazz) { String clazzName = getClassName(clazz); output(clazzName); output(" *get"); @@ -191,7 +162,7 @@ public void generatePrototypes(Class clazz) { outputDelimiter(); } -public void generateFIDsStructure(Class clazz) { +void generateFIDsStructure(Class clazz) { String clazzName = getClassName(clazz); output("typedef struct "); output(clazzName); @@ -219,7 +190,7 @@ public void generateFIDsStructure(Class clazz) { outputDelimiter(); } -public void generateCacheFunction(Class clazz) { +void generateCacheFunction(Class clazz) { String clazzName = getClassName(clazz); output("void cache"); output(clazzName); @@ -375,7 +346,7 @@ void generateGetFields(Class clazz) { } } } -public void generateGetFunction(Class clazz) { +void generateGetFunction(Class clazz) { String clazzName = getClassName(clazz); output(clazzName); output(" *get"); @@ -507,7 +478,7 @@ void generateSetFields(Class clazz) { } } -public void generateSetFunction(Class clazz) { +void generateSetFunction(Class clazz) { String clazzName = getClassName(clazz); output("void set"); output(clazzName); @@ -528,7 +499,7 @@ public void generateSetFunction(Class clazz) { outputDelimiter(); } -public void generateFunctions(Class clazz) { +void generateFunctions(Class clazz) { generateCacheFunction(clazz); outputDelimiter(); generateGetFunction(clazz); @@ -544,6 +515,25 @@ boolean ignoreField(Field field) { ((mods & Modifier.STATIC) != 0); } +void sortStructs(Class[] classes) { + Arrays.sort(classes, new Comparator() { + public int compare(Object a, Object b) { + if (a == b) return 0; + Class class1 = (Class)a; + Class class2 = (Class)b; + Class tempClass = class1; + while ((tempClass = tempClass.getSuperclass()) != Object.class) { + if (tempClass == class2) return 1; + } + tempClass = class2; + while ((tempClass = tempClass.getSuperclass()) != Object.class) { + if (tempClass == class1) return -1; + } + return class1.getName().compareTo(class2.getName()); + } + }); +} + public static void main(String[] args) { if (args.length < 1) { System.out.println("Usage: java StructsGenerator <className1> <className2>"); |