diff options
author | Michael Bien <[email protected]> | 2009-12-01 23:24:30 +0100 |
---|---|---|
committer | Michael Bien <[email protected]> | 2009-12-01 23:24:30 +0100 |
commit | b0758ce498793c5e130493d9a03d7632de152855 (patch) | |
tree | 2597fa7f1e10dea4ffebff383ec830988460361d | |
parent | 0a5bc7f5a379b52cf5fe6bb9ea22f59fdec1fff0 (diff) |
Code cleanup. Ported package com.sun.gluegen to java 5 language level.
18 files changed, 624 insertions, 644 deletions
diff --git a/src/java/com/sun/gluegen/ArrayTypes.java b/src/java/com/sun/gluegen/ArrayTypes.java index 7e5dd95..d943a8a 100644 --- a/src/java/com/sun/gluegen/ArrayTypes.java +++ b/src/java/com/sun/gluegen/ArrayTypes.java @@ -48,23 +48,23 @@ import java.nio.*; */ public class ArrayTypes { /** Class for Java type boolean[] */ - public static final Class booleanArrayClass; + public static final Class<?> booleanArrayClass; /** Class for Java type byte[] */ - public static final Class byteArrayClass; + public static final Class<?> byteArrayClass; /** Class for Java type char[] */ - public static final Class charArrayClass; + public static final Class<?> charArrayClass; /** Class for Java type short[] */ - public static final Class shortArrayClass; + public static final Class<?> shortArrayClass; /** Class for Java type int[] */ - public static final Class intArrayClass; + public static final Class<?> intArrayClass; /** Class for Java type long[] */ - public static final Class longArrayClass; + public static final Class<?> longArrayClass; /** Class for Java type float[] */ - public static final Class floatArrayClass; + public static final Class<?> floatArrayClass; /** Class for Java type double[] */ - public static final Class doubleArrayClass; + public static final Class<?> doubleArrayClass; /** Class for Java type String[] */ - public static final Class stringArrayClass; + public static final Class<?> stringArrayClass; // Classes for two-dimensional arrays. // @@ -89,19 +89,19 @@ public class ArrayTypes { // certain OpenGL operations. /** Class for Java type Buffer[] */ - public static final Class bufferArrayClass; + public static final Class<?> bufferArrayClass; /** Class for Java type ByteBuffer[] */ - public static final Class byteBufferArrayClass; + public static final Class<?> byteBufferArrayClass; /** Class for Java type ShortBuffer[] */ - public static final Class shortBufferArrayClass; + public static final Class<?> shortBufferArrayClass; /** Class for Java type IntBuffer[] */ - public static final Class intBufferArrayClass; + public static final Class<?> intBufferArrayClass; /** Class for Java type LongBuffer[] */ - public static final Class longBufferArrayClass; + public static final Class<?> longBufferArrayClass; /** Class for Java type FloatBuffer[] */ - public static final Class floatBufferArrayClass; + public static final Class<?> floatBufferArrayClass; /** Class for Java type DoubleBuffer[] */ - public static final Class doubleBufferArrayClass; + public static final Class<?> doubleBufferArrayClass; static { booleanArrayClass = new boolean[0].getClass(); diff --git a/src/java/com/sun/gluegen/CMethodBindingEmitter.java b/src/java/com/sun/gluegen/CMethodBindingEmitter.java index af632c3..784b2f9 100644 --- a/src/java/com/sun/gluegen/CMethodBindingEmitter.java +++ b/src/java/com/sun/gluegen/CMethodBindingEmitter.java @@ -82,13 +82,13 @@ public class CMethodBindingEmitter extends FunctionEmitter /** * Optional List of Strings containing temporary C variables to declare. */ - private List/*<String>*/ temporaryCVariableDeclarations; + private List<String> temporaryCVariableDeclarations; /** * Optional List of Strings containing assignments to temporary C variables * to make after the call is completed. */ - private List/*<String>*/ temporaryCVariableAssignments; + private List<String> temporaryCVariableAssignments; /** * Capacity of the return value in the event that it is encapsulated in a @@ -161,8 +161,7 @@ public class CMethodBindingEmitter extends FunctionEmitter /** * Get the expression for the capacity of the returned java.nio.Buffer. */ - public final MessageFormat getReturnValueCapacityExpression() - { + public final MessageFormat getReturnValueCapacityExpression() { return returnValueCapacityExpression; } @@ -183,13 +182,11 @@ public class CMethodBindingEmitter extends FunctionEmitter * binding.getJavaReturnType().isCompoundTypeWrapper() == false * </code> */ - public final void setReturnValueCapacityExpression(MessageFormat expression) - { + public final void setReturnValueCapacityExpression(MessageFormat expression) { returnValueCapacityExpression = expression; if (!binding.getJavaReturnType().isNIOBuffer() && - !binding.getJavaReturnType().isCompoundTypeWrapper()) - { + !binding.getJavaReturnType().isCompoundTypeWrapper()) { throw new IllegalArgumentException( "Cannot specify return value capacity for a method that does not " + "return java.nio.Buffer or a compound type wrapper: \"" + binding + "\""); @@ -199,8 +196,7 @@ public class CMethodBindingEmitter extends FunctionEmitter /** * Get the expression for the length of the returned array */ - public final MessageFormat getReturnValueLengthExpression() - { + public final MessageFormat getReturnValueLengthExpression() { return returnValueLengthExpression; } @@ -219,13 +215,11 @@ public class CMethodBindingEmitter extends FunctionEmitter * binding.getJavaReturnType().isNIOBuffer() == false * </code> */ - public final void setReturnValueLengthExpression(MessageFormat expression) - { + public final void setReturnValueLengthExpression(MessageFormat expression) { returnValueLengthExpression = expression; if (!binding.getJavaReturnType().isArray() && - !binding.getJavaReturnType().isArrayOfCompoundTypeWrappers()) - { + !binding.getJavaReturnType().isArrayOfCompoundTypeWrappers()) { throw new IllegalArgumentException( "Cannot specify return value length for a method that does not " + "return an array: \"" + binding + "\""); @@ -236,7 +230,7 @@ public class CMethodBindingEmitter extends FunctionEmitter * Returns the List of Strings containing declarations for temporary * C variables to be assigned to after the underlying function call. */ - public final List/*<String>*/ getTemporaryCVariableDeclarations() { + public final List<String> getTemporaryCVariableDeclarations() { return temporaryCVariableDeclarations; } @@ -245,7 +239,7 @@ public class CMethodBindingEmitter extends FunctionEmitter * variables to be assigned to after the underlying function call. A * null argument indicates that no manual declarations are to be made. */ - public final void setTemporaryCVariableDeclarations(List/*<String>*/ arg) { + public final void setTemporaryCVariableDeclarations(List<String> arg) { temporaryCVariableDeclarations = arg; } @@ -255,7 +249,7 @@ public class CMethodBindingEmitter extends FunctionEmitter * null argument indicates that no manual assignments are to be * made. */ - public final List/*<String>*/ getTemporaryCVariableAssignments() { + public final List<String> getTemporaryCVariableAssignments() { return temporaryCVariableAssignments; } @@ -264,7 +258,7 @@ public class CMethodBindingEmitter extends FunctionEmitter * variables which are made after the underlying function call. A * null argument indicates that no manual assignments are to be made. */ - public final void setTemporaryCVariableAssignments(List/*<String>*/ arg) { + public final void setTemporaryCVariableAssignments(List<String> arg) { temporaryCVariableAssignments = arg; } @@ -304,29 +298,24 @@ public class CMethodBindingEmitter extends FunctionEmitter public final MachineDescription getMachineDescription() { return machDesc; } - protected void emitReturnType(PrintWriter writer) - { + protected void emitReturnType(PrintWriter writer) { writer.print("JNIEXPORT "); writer.print(binding.getJavaReturnType().jniTypeName()); writer.print(" JNICALL"); } - protected void emitName(PrintWriter writer) - { + protected void emitName(PrintWriter writer) { writer.println(); // start name on new line writer.print("Java_"); writer.print(jniMangle(getJavaPackageName())); writer.print("_"); writer.print(jniMangle(getJavaClassName())); writer.print("_"); - if (isOverloadedBinding) - { + if (isOverloadedBinding) { writer.print(jniMangle(binding)); //System.err.println("OVERLOADED MANGLING FOR " + getName() + // " = " + jniMangle(binding)); - } - else - { + } else { writer.print(jniMangle(getName())); //System.err.println(" NORMAL MANGLING FOR " + binding.getName() + // " = " + jniMangle(getName())); @@ -344,23 +333,18 @@ public class CMethodBindingEmitter extends FunctionEmitter return ""; } - protected int emitArguments(PrintWriter writer) - { + protected int emitArguments(PrintWriter writer) { writer.print("JNIEnv *env, "); int numEmitted = 1; // initially just the JNIEnv - if (isJavaMethodStatic && !binding.hasContainingType()) - { + if (isJavaMethodStatic && !binding.hasContainingType()) { writer.print("jclass"); - } - else - { + } else { writer.print("jobject"); } writer.print(" _unused"); ++numEmitted; - if (binding.hasContainingType()) - { + if (binding.hasContainingType()) { // "this" argument always comes down in argument 0 as direct buffer writer.print(", jobject " + JavaMethodBindingEmitter.javaThisArgumentName()); } @@ -394,8 +378,7 @@ public class CMethodBindingEmitter extends FunctionEmitter } - protected void emitBody(PrintWriter writer) - { + protected void emitBody(PrintWriter writer) { writer.println(" {"); emitBodyVariableDeclarations(writer); emitBodyUserVariableDeclarations(writer); @@ -410,8 +393,7 @@ public class CMethodBindingEmitter extends FunctionEmitter writer.println(); } - protected void emitBodyVariableDeclarations(PrintWriter writer) - { + protected void emitBodyVariableDeclarations(PrintWriter writer) { // Emit declarations for all pointer and String conversion variables if (binding.hasContainingType()) { emitPointerDeclaration(writer, @@ -489,7 +471,7 @@ public class CMethodBindingEmitter extends FunctionEmitter writer.print(arrayResLength); writer.println(";"); - Class componentType = javaReturnType.getJavaClass().getComponentType(); + Class<?> componentType = javaReturnType.getJavaClass().getComponentType(); if (componentType.isArray()) { throw new RuntimeException("Multi-dimensional arrays not supported yet"); } @@ -511,8 +493,7 @@ public class CMethodBindingEmitter extends FunctionEmitter TemporaryCVariableDeclarations directive in the .cfg file. */ protected void emitBodyUserVariableDeclarations(PrintWriter writer) { if (temporaryCVariableDeclarations != null) { - for (Iterator iter = temporaryCVariableDeclarations.iterator(); iter.hasNext(); ) { - String val = (String) iter.next(); + for (String val : temporaryCVariableDeclarations) { writer.print(" "); writer.println(val); } @@ -566,9 +547,8 @@ public class CMethodBindingEmitter extends FunctionEmitter * emitBodyVariableDeclarations(), PRIOR TO calling the actual C * function. */ - protected void emitBodyVariablePreCallSetup(PrintWriter writer, - boolean emittingPrimitiveArrayCritical) - { + protected void emitBodyVariablePreCallSetup(PrintWriter writer, boolean emittingPrimitiveArrayCritical) { + if (!emittingPrimitiveArrayCritical) { // Convert all Buffers to pointers first so we don't have to // call ReleasePrimitiveArrayCritical for any arrays if any @@ -1033,8 +1013,7 @@ public class CMethodBindingEmitter extends FunctionEmitter TemporaryCVariableAssignments directive in the .cfg file. */ protected void emitBodyUserVariableAssignments(PrintWriter writer) { if (temporaryCVariableAssignments != null) { - for (Iterator iter = temporaryCVariableAssignments.iterator(); iter.hasNext(); ) { - String val = (String) iter.next(); + for (String val : temporaryCVariableAssignments) { writer.print(" "); writer.println(val); } @@ -1178,7 +1157,7 @@ public class CMethodBindingEmitter extends FunctionEmitter throw new RuntimeException("Saw illegal \"void\" argument while emitting \"" + getName() + "\""); } } else { - Class c = type.getJavaClass(); + Class<?> c = type.getJavaClass(); if (c != null) { jniMangle(c, buf, false); // If Buffer offset arguments were added, we need to mangle the JNI for the @@ -1212,7 +1191,7 @@ public class CMethodBindingEmitter extends FunctionEmitter return buf.toString(); } - protected void jniMangle(Class c, StringBuffer res, boolean syntheticArgument) { + protected void jniMangle(Class<?> c, StringBuffer res, boolean syntheticArgument) { if (c.isPrimitive()) { if (c == Boolean.TYPE) res.append("Z"); else if (c == Byte.TYPE) res.append("B"); @@ -1233,7 +1212,7 @@ public class CMethodBindingEmitter extends FunctionEmitter if (syntheticArgument) { if (c.isArray()) { res.append("_3"); - Class componentType = c.getComponentType(); + Class<?> componentType = c.getComponentType(); // Handle arrays of compound type wrappers differently for // convenience of the Java-level glue code generation jniMangle(componentType, res, @@ -1260,9 +1239,7 @@ public class CMethodBindingEmitter extends FunctionEmitter } } - private void emitOutOfMemoryCheck(PrintWriter writer, String varName, - String errorMessage) - { + private void emitOutOfMemoryCheck(PrintWriter writer, String varName, String errorMessage) { writer.print(" if ("); writer.print(varName); writer.println(" == NULL) {"); @@ -1284,8 +1261,7 @@ public class CMethodBindingEmitter extends FunctionEmitter String elementTypeString, boolean elementTypeIsConst, String numElementsExpression, - String mallocFailureErrorString) - { + String mallocFailureErrorString) { writer.print(" "); writer.print(targetVarName); writer.print(" = ("); @@ -1310,8 +1286,7 @@ public class CMethodBindingEmitter extends FunctionEmitter String targetVarName, String elementTypeString, String numElementsExpression, - String mallocFailureErrorString) - { + String mallocFailureErrorString) { writer.print(" "); writer.print(targetVarName); writer.print(" = ("); @@ -1333,8 +1308,7 @@ public class CMethodBindingEmitter extends FunctionEmitter String sourceVarName, String receivingVarName, boolean isUTF8, - boolean emitElseClause) - { + boolean emitElseClause) { if (EMIT_NULL_CHECKS) { writer.print(" if ("); writer.print(sourceVarName); @@ -1443,9 +1417,9 @@ public class CMethodBindingEmitter extends FunctionEmitter javaType.isArrayOfCompoundTypeWrappers()) { ptrTypeString = cType.getName(); } else if (!javaType.isStringArray()) { - Class elementType = javaType.getJavaClass().getComponentType(); + Class<?> elementType = javaType.getJavaClass().getComponentType(); if (elementType.isArray()) { - Class subElementType = elementType.getComponentType(); + Class<?> subElementType = elementType.getComponentType(); if (subElementType.isPrimitive()) { // type is pointer to pointer to primitive ptrTypeString = cType.getName(); diff --git a/src/java/com/sun/gluegen/CodeGenUtils.java b/src/java/com/sun/gluegen/CodeGenUtils.java index ab81bec..a558c66 100644 --- a/src/java/com/sun/gluegen/CodeGenUtils.java +++ b/src/java/com/sun/gluegen/CodeGenUtils.java @@ -42,8 +42,7 @@ package com.sun.gluegen; import java.io.*; import java.util.*; -public class CodeGenUtils -{ +public class CodeGenUtils { /** * Given a java package name (e.g., "java.lang"), return the package as a * directory path (i.e., "java/lang"). @@ -60,8 +59,7 @@ public class CodeGenUtils */ public static void emitAutogeneratedWarning(PrintWriter w, Object generator) { w.print("/* !---- DO NOT EDIT: This file autogenerated "); - if (generator != null) - { + if (generator != null) { w.print("by "); w.print(packageAsPath(generator.getClass().getName())); w.print(".java "); @@ -75,18 +73,16 @@ public class CodeGenUtils /** * Emit the opening headers for one java class/interface file. */ - public static void emitJavaHeaders( - PrintWriter w, - String packageName, - String className, - String gluegenRuntimePackage, - boolean isClassNotInterface, - String[] imports, - String[] accessModifiers, - String[] interfaces, - String classExtended, - EmissionCallback classDocComment) throws IOException - { + public static void emitJavaHeaders( PrintWriter w, + String packageName, + String className, + String gluegenRuntimePackage, + boolean isClassNotInterface, + String[] imports, + String[] accessModifiers, + String[] interfaces, + String classExtended, + EmissionCallback classDocComment) throws IOException { w.println("package " + packageName + ";"); w.println(); @@ -142,8 +138,7 @@ public class CodeGenUtils //----------------------------------------- /** A class that emits source code of some time when activated. */ - public interface EmissionCallback - { + public interface EmissionCallback { /** Emit appropriate source code through the given writer. */ public void emit(PrintWriter output); } diff --git a/src/java/com/sun/gluegen/CommentEmitter.java b/src/java/com/sun/gluegen/CommentEmitter.java index 30004f8..e5fdc6f 100644 --- a/src/java/com/sun/gluegen/CommentEmitter.java +++ b/src/java/com/sun/gluegen/CommentEmitter.java @@ -41,8 +41,7 @@ package com.sun.gluegen; import java.io.*; -public interface CommentEmitter -{ +public interface CommentEmitter { /** * Emit the body of a comment for the specified function; do NOT emit the * open (e.g., comment "/*") or close (e.g., "*\/") characters. diff --git a/src/java/com/sun/gluegen/ConstantDefinition.java b/src/java/com/sun/gluegen/ConstantDefinition.java index 44ce8e0..e4cb3f5 100644 --- a/src/java/com/sun/gluegen/ConstantDefinition.java +++ b/src/java/com/sun/gluegen/ConstantDefinition.java @@ -38,13 +38,14 @@ import java.util.*; /** Represents the definition of a constant which was provided either via a #define statement or through an enum definition. */ public class ConstantDefinition { + private String origName; - private HashSet aliasedNames; + private HashSet<String> aliasedNames; private String name; private String value; private boolean isEnum; private String enumName; - private Set/*<String>*/ aliases; + private Set<String> aliases; public ConstantDefinition(String name, String value, @@ -55,7 +56,7 @@ public class ConstantDefinition { this.value = value; this.isEnum = isEnum; this.enumName = enumName; - this.aliasedNames=new HashSet(); + this.aliasedNames=new HashSet<String>(); } public boolean equals(ConstantDefinition other) { @@ -75,6 +76,7 @@ public class ConstantDefinition { return s1.equals(s2); } + @Override public int hashCode() { return name.hashCode(); } @@ -90,7 +92,7 @@ public class ConstantDefinition { public void addAliasedName(String name) { aliasedNames.add(name); } - public Collection getAliasedNames() { + public Collection<String> getAliasedNames() { return aliasedNames; } @@ -109,13 +111,13 @@ public class ConstantDefinition { public boolean isEnum() { return isEnum; } - public Set/*<String>*/ getAliases() { + public Set<String> getAliases() { return aliases; } public void addAlias(String alias) { if (aliases == null) { - aliases = new LinkedHashSet/*<String>*/(); + aliases = new LinkedHashSet<String>(); } aliases.add(alias); } diff --git a/src/java/com/sun/gluegen/DebugEmitter.java b/src/java/com/sun/gluegen/DebugEmitter.java index 34586a1..06fba30 100644 --- a/src/java/com/sun/gluegen/DebugEmitter.java +++ b/src/java/com/sun/gluegen/DebugEmitter.java @@ -46,6 +46,7 @@ import com.sun.gluegen.cgram.types.*; /** Debug emitter which prints the parsing results to standard output. */ public class DebugEmitter implements GlueEmitter { + public void readConfigurationFile(String filename) {} public void setMachineDescription(MachineDescription md32, @@ -54,10 +55,13 @@ public class DebugEmitter implements GlueEmitter { public void beginEmission(GlueEmitterControls controls) { System.out.println("----- BEGIN EMISSION OF GLUE CODE -----"); } + public void endEmission() { System.out.println("----- END EMISSION OF GLUE CODE -----"); } + public void beginDefines() {} + public void emitDefine(ConstantDefinition def, String optionalComment) { String name = def.getName(); String value = def.getValue(); @@ -68,18 +72,16 @@ public class DebugEmitter implements GlueEmitter { public void beginFunctions(TypeDictionary typedefDictionary, TypeDictionary structDictionary, - Map canonMap) { - Set keys = typedefDictionary.keySet(); - for (Iterator iter = keys.iterator(); iter.hasNext(); ) { - String key = (String) iter.next(); + Map<Type, Type> canonMap) { + Set<String> keys = typedefDictionary.keySet(); + for (String key: keys) { Type value = typedefDictionary.get(key); System.out.println("typedef " + value + " " + key + ";"); } } - public Iterator emitFunctions(List/*<FunctionSymbol>*/ originalCFunctions) - throws Exception { - for (Iterator iter = originalCFunctions.iterator(); iter.hasNext(); ) { - FunctionSymbol sym = (FunctionSymbol) iter.next(); + + public Iterator<FunctionSymbol> emitFunctions(List<FunctionSymbol> originalCFunctions) throws Exception { + for (FunctionSymbol sym : originalCFunctions) { emitSingleFunction(sym); } return originalCFunctions.iterator(); @@ -94,10 +96,9 @@ public class DebugEmitter implements GlueEmitter { public void layoutStruct(CompoundType t) throws Exception {} public void endStructLayout() throws Exception {} - public void beginStructs(TypeDictionary typedefDictionary, - TypeDictionary structDictionary, - Map canonMap) { + public void beginStructs(TypeDictionary typedefDictionary, TypeDictionary structDictionary, Map<Type, Type> canonMap) { } + public void emitStruct(CompoundType t, String alternateName) { String name = t.getName(); if (name == null && alternateName != null) { @@ -106,5 +107,6 @@ public class DebugEmitter implements GlueEmitter { System.out.println("Referenced type \"" + name + "\""); } + public void endStructs() {} } diff --git a/src/java/com/sun/gluegen/FunctionEmitter.java b/src/java/com/sun/gluegen/FunctionEmitter.java index 32ac071..a9bfc5a 100644 --- a/src/java/com/sun/gluegen/FunctionEmitter.java +++ b/src/java/com/sun/gluegen/FunctionEmitter.java @@ -41,22 +41,20 @@ package com.sun.gluegen; import java.util.*; import java.io.*; -import com.sun.gluegen.cgram.types.MachineDescription; -public abstract class FunctionEmitter -{ +public abstract class FunctionEmitter { + public static final EmissionModifier STATIC = new EmissionModifier("static"); private boolean isInterfaceVal; - private ArrayList modifiers = new ArrayList(); + private ArrayList<EmissionModifier> modifiers = new ArrayList<EmissionModifier>(); private CommentEmitter commentEmitter = null; private PrintWriter defaultOutput; /** * Constructs the FunctionEmitter with a CommentEmitter that emits nothing. */ - public FunctionEmitter(PrintWriter defaultOutput, boolean isInterface) - { + public FunctionEmitter(PrintWriter defaultOutput, boolean isInterface) { assert(defaultOutput != null); this.defaultOutput = defaultOutput; this.isInterfaceVal = isInterface; @@ -65,8 +63,9 @@ public abstract class FunctionEmitter /** * Makes this FunctionEmitter a copy of the passed one. */ + @SuppressWarnings("unchecked") public FunctionEmitter(FunctionEmitter arg) { - modifiers = (ArrayList) arg.modifiers.clone(); + modifiers = (ArrayList<EmissionModifier>)arg.modifiers.clone(); commentEmitter = arg.commentEmitter; defaultOutput = arg.defaultOutput; isInterfaceVal = arg.isInterfaceVal; @@ -76,11 +75,9 @@ public abstract class FunctionEmitter public PrintWriter getDefaultOutput() { return defaultOutput; } - public void addModifiers(Iterator/*<EmissionModifier>*/ mi) - { - while (mi.hasNext()) - { - modifiers.add((EmissionModifier) mi.next()); + public void addModifiers(Iterator<EmissionModifier> mi) { + while (mi.hasNext()) { + modifiers.add(mi.next()); } } public void addModifier(EmissionModifier m) { modifiers.add(m); } @@ -91,7 +88,7 @@ public abstract class FunctionEmitter public boolean hasModifier(EmissionModifier m) { return modifiers.contains(m); } - public Iterator getModifiers() { return modifiers.iterator(); } + public Iterator<EmissionModifier> getModifiers() { return modifiers.iterator(); } public abstract String getName(); @@ -99,8 +96,7 @@ public abstract class FunctionEmitter * Emit the function to the specified output (instead of the default * output). */ - public void emit(PrintWriter output) - { + public void emit(PrintWriter output) { emitDocComment(output); //output.println(" // Emitter: " + getClass().getName()); emitSignature(output); @@ -111,14 +107,13 @@ public abstract class FunctionEmitter * Emit the function to the default output (the output that was passed to * the constructor) */ - public final void emit() - { + public final void emit() { emit(getDefaultOutput()); } /** Returns, as a String, whatever {@link #emit} would output. */ - public String toString() - { + @Override + public String toString() { StringWriter sw = new StringWriter(500); PrintWriter w = new PrintWriter(sw); emit(w); @@ -129,8 +124,7 @@ public abstract class FunctionEmitter * Set the object that will emit the comment for this function. If the * parameter is null, no comment will be emitted. */ - public void setCommentEmitter(CommentEmitter cEmitter) - { + public void setCommentEmitter(CommentEmitter cEmitter) { commentEmitter = cEmitter; } @@ -140,10 +134,9 @@ public abstract class FunctionEmitter */ public CommentEmitter getCommentEmitter() { return commentEmitter; } - protected void emitDocComment(PrintWriter writer) - { - if (commentEmitter != null) - { + protected void emitDocComment(PrintWriter writer) { + + if (commentEmitter != null) { writer.print(getBaseIndentString()); //indent writer.print(getCommentStartString()); @@ -156,13 +149,12 @@ public abstract class FunctionEmitter } } - protected void emitSignature(PrintWriter writer) - { + protected void emitSignature(PrintWriter writer) { + writer.print(getBaseIndentString()); // indent method int numEmitted = emitModifiers(writer); - if (numEmitted > 0) - { + if (numEmitted > 0) { writer.print(" "); } @@ -176,16 +168,13 @@ public abstract class FunctionEmitter writer.print(")"); } - protected int emitModifiers(PrintWriter writer) - { + protected int emitModifiers(PrintWriter writer) { PrintWriter w = getDefaultOutput(); int numEmitted = 0; - for (Iterator it = getModifiers(); it.hasNext(); ) - { + for (Iterator<EmissionModifier> it = getModifiers(); it.hasNext(); ) { writer.print(it.next()); ++numEmitted; - if (it.hasNext()) - { + if (it.hasNext()) { writer.print(" "); } } @@ -203,16 +192,19 @@ public abstract class FunctionEmitter protected abstract int emitArguments(PrintWriter writer); protected abstract void emitBody(PrintWriter writer); - public static class EmissionModifier - { + public static class EmissionModifier { + + @Override public final String toString() { return emittedForm; } private String emittedForm; + @Override public int hashCode() { return emittedForm.hashCode(); } + @Override public boolean equals(Object arg) { if (arg == null || (!(arg instanceof EmissionModifier))) { return false; diff --git a/src/java/com/sun/gluegen/GlueEmitter.java b/src/java/com/sun/gluegen/GlueEmitter.java index 2738411..94d8981 100644 --- a/src/java/com/sun/gluegen/GlueEmitter.java +++ b/src/java/com/sun/gluegen/GlueEmitter.java @@ -93,10 +93,10 @@ public interface GlueEmitter { public void beginFunctions(TypeDictionary typedefDictionary, TypeDictionary structDictionary, - Map canonMap) throws Exception; + Map<Type, Type> canonMap) throws Exception; /** Emit glue code for the list of FunctionSymbols. */ - public Iterator emitFunctions(java.util.List/*<FunctionSymbol>*/ cFunctions) throws Exception; + public Iterator<FunctionSymbol> emitFunctions(List<FunctionSymbol> cFunctions) throws Exception; public void endFunctions() throws Exception; /** Begins the process of computing field offsets and type sizes for @@ -109,7 +109,7 @@ public interface GlueEmitter { public void beginStructs(TypeDictionary typedefDictionary, TypeDictionary structDictionary, - Map canonMap) throws Exception; + Map<Type, Type> canonMap) throws Exception; /** Emit glue code for the given CompoundType. alternateName is provided when the CompoundType (e.g. "struct foo_t") has not been typedefed to anything but the type of "pointer to struct diff --git a/src/java/com/sun/gluegen/GlueGen.java b/src/java/com/sun/gluegen/GlueGen.java index 3804795..e046850 100644 --- a/src/java/com/sun/gluegen/GlueGen.java +++ b/src/java/com/sun/gluegen/GlueGen.java @@ -43,7 +43,6 @@ import java.io.*; import java.util.*; import antlr.*; -import antlr.collections.*; import com.sun.gluegen.cgram.*; import com.sun.gluegen.cgram.types.*; import com.sun.gluegen.pcpp.*; @@ -51,12 +50,13 @@ import com.sun.gluegen.pcpp.*; /** Glue code generator for C functions and data structures. */ public class GlueGen implements GlueEmitterControls { - private java.util.List forcedStructNames = new ArrayList(); + + private List<String> forcedStructNames = new ArrayList<String>(); private PCPP preprocessor; // State for SymbolFilters - private java.util.List/*<ConstantDefinition>*/ constants; - private java.util.List/*<FunctionSymbol>*/ functions; + private List<ConstantDefinition> constants; + private List<FunctionSymbol> functions; public void forceStructEmission(String typedefName) { forcedStructNames.add(typedefName); @@ -68,8 +68,8 @@ public class GlueGen implements GlueEmitterControls { public void runSymbolFilter(SymbolFilter filter) { filter.filterSymbols(constants, functions); - java.util.List/*<ConstantDefinition>*/ newConstants = filter.getConstants(); - java.util.List/*<FunctionSymbol>*/ newFunctions = filter.getFunctions(); + List<ConstantDefinition> newConstants = filter.getConstants(); + List<FunctionSymbol> newFunctions = filter.getFunctions(); if (newConstants != null) { constants = newConstants; } @@ -84,13 +84,13 @@ public class GlueGen implements GlueEmitterControls { String filename = null; String emitterClass = null; String outputRootDir = null; - java.util.List cfgFiles = new ArrayList(); + List<String> cfgFiles = new ArrayList<String>(); if (args.length == 0) { usage(); } - java.util.List includePaths = new ArrayList(); + List<String> includePaths = new ArrayList<String>(); for (int i = 0; i < args.length; i++) { if (i < args.length - 1) { String arg = args[i]; @@ -195,8 +195,8 @@ public class GlueGen implements GlueEmitterControls { } } - for (Iterator iter = cfgFiles.iterator(); iter.hasNext(); ) { - emit.readConfigurationFile((String) iter.next()); + for (String cfgFile: cfgFiles) { + emit.readConfigurationFile(cfgFile); } if(null!=outputRootDir && outputRootDir.trim().length()>0) { @@ -216,9 +216,9 @@ public class GlueGen implements GlueEmitterControls { // Repackage the enum and #define statements from the parser into a common format // so that SymbolFilters can operate upon both identically - constants = new ArrayList/*<ConstantDefinition>*/(); - for (Iterator iter = headerParser.getEnums().iterator(); iter.hasNext(); ) { - EnumType enumeration = (EnumType)iter.next(); + constants = new ArrayList<ConstantDefinition>(); + for (Object elem: headerParser.getEnums()) { + EnumType enumeration = (EnumType)elem; String enumName = enumeration.getName(); if (enumName.equals("<anonymous>")) { enumName = null; @@ -230,8 +230,8 @@ public class GlueGen implements GlueEmitterControls { constants.add(new ConstantDefinition(enumElementName, value, true, enumName)); } } - for (Iterator iter = lexer.getDefines().iterator(); iter.hasNext(); ) { - Define def = (Define) iter.next(); + for (Object elem : lexer.getDefines()) { + Define def = (Define)elem; constants.add(new ConstantDefinition(def.getName(), def.getValue(), false, null)); } @@ -241,18 +241,16 @@ public class GlueGen implements GlueEmitterControls { emit.beginEmission(this); emit.beginDefines(); - Set emittedDefines = new HashSet(100); + Set<String> emittedDefines = new HashSet<String>(100); // emit java equivalent of enum { ... } statements - for (Iterator iter = constants.iterator(); iter.hasNext(); ) { - ConstantDefinition def = (ConstantDefinition) iter.next(); + for (ConstantDefinition def : constants) { if (!emittedDefines.contains(def.getName())) { emittedDefines.add(def.getName()); String comment = null; - Set/*<String>*/ aliases = def.getAliases(); + Set<String> aliases = def.getAliases(); if (aliases != null) { comment = "Alias for: <code>"; - for (Iterator i2 = aliases.iterator(); i2.hasNext(); ) { - String alias = (String) i2.next(); + for (String alias : aliases) { comment += " " + alias; } comment += "</code>"; @@ -274,8 +272,7 @@ public class GlueGen implements GlueEmitterControls { // Iterate through the functions finding structs that are referenced in // the function signatures; these will be remembered for later emission ReferencedStructs referencedStructs = new ReferencedStructs(); - for (Iterator iter = functions.iterator(); iter.hasNext(); ) { - FunctionSymbol sym = (FunctionSymbol) iter.next(); + for (FunctionSymbol sym : functions) { // FIXME: this doesn't take into account the possibility that some of // the functions we send to emitMethodBindings() might not actually be // emitted (e.g., if an Ignore directive in the JavaEmitter causes it @@ -286,8 +283,7 @@ public class GlueGen implements GlueEmitterControls { // Normally only referenced types will be emitted. The user can force a // type to be emitted via a .cfg file directive. Those directives are // processed here. - for (Iterator iter = forcedStructNames.iterator(); iter.hasNext(); ) { - String name = (String) iter.next(); + for (String name: forcedStructNames) { Type type = td.get(name); if (type == null) { System.err.println("WARNING: during forced struct emission: struct \"" + name + "\" not found"); @@ -300,8 +296,8 @@ public class GlueGen implements GlueEmitterControls { // Lay out structs emit.beginStructLayout(); - for (Iterator iter = referencedStructs.results(); iter.hasNext(); ) { - Type t = (Type) iter.next(); + for (Iterator<Type> iter = referencedStructs.results(); iter.hasNext(); ) { + Type t = iter.next(); if (t.isCompound()) { emit.layoutStruct(t.asCompound()); } else if (t.isPointer()) { @@ -314,8 +310,8 @@ public class GlueGen implements GlueEmitterControls { // Emit structs emit.beginStructs(td, sd, headerParser.getCanonMap()); - for (Iterator iter = referencedStructs.results(); iter.hasNext(); ) { - Type t = (Type) iter.next(); + for (Iterator<Type> iter = referencedStructs.results(); iter.hasNext(); ) { + Type t = iter.next(); if (t.isCompound()) { emit.emitStruct(t.asCompound(), null); } else if (t.isPointer()) { diff --git a/src/java/com/sun/gluegen/JavaConfiguration.java b/src/java/com/sun/gluegen/JavaConfiguration.java index 636cef8..0d7b3cc 100644 --- a/src/java/com/sun/gluegen/JavaConfiguration.java +++ b/src/java/com/sun/gluegen/JavaConfiguration.java @@ -42,6 +42,7 @@ package com.sun.gluegen; import java.io.*; import java.lang.reflect.Array; import java.util.*; +import java.util.Map.Entry; import java.util.regex.*; import com.sun.gluegen.jgram.*; @@ -52,99 +53,106 @@ import com.sun.gluegen.cgram.types.*; public class JavaConfiguration { - private int nestedReads; - private String packageName; - private String implPackageName; - private String className; - private String implClassName; - /** - * Root directory for the hierarchy of generated java classes. Default is - * working directory. - */ - private String javaOutputDir = "."; - - /** - * Top output root directory for all generated files. Default is null, ie not to use it. - */ - private String outputRootDir = null; - - /** - * Directory into which generated native JNI code will be written. Default - * is current working directory. - */ - private String nativeOutputDir = "."; - /** - * If true, then each native *.c and *.h file will be generated in the - * directory nativeOutputDir/packageAsPath(packageName). Default is false. - */ - private boolean nativeOutputUsesJavaHierarchy; - /** - * If true, then the comment of a native method binding will include a @native tag - * to allow taglets to augment the javadoc with additional information regarding - * the mapped C function. Defaults to false. - */ - private boolean tagNativeBinding; - /** - * Style of code emission. Can emit everything into one class - * (AllStatic), separate interface and implementing classes - * (InterfaceAndImpl), only the interface (InterfaceOnly), or only - * the implementation (ImplOnly). - */ - private int emissionStyle = JavaEmitter.ALL_STATIC; - /** - * List of imports to emit at the head of the output files. - */ - private List/*<String>*/ imports = new ArrayList(); - /** - * The package in which the generated glue code expects to find its - * run-time helper classes (BufferFactory, CPU, - * StructAccessor). Defaults to "com.sun.gluegen.runtime". - */ - private String gluegenRuntimePackage = "com.sun.gluegen.runtime"; - - /** - * The kind of exception raised by the generated code if run-time - * checks fail. Defaults to RuntimeException. - */ - private String runtimeExceptionType = "RuntimeException"; - private String unsupportedExceptionType = "UnsupportedOperationException"; - private Map/*<String,Integer>*/ accessControl = new HashMap(); - private Map/*<String,TypeInfo>*/ typeInfoMap = new HashMap(); - private Set/*<String>*/ returnsString = new HashSet(); - private Map/*<String, String>*/ returnedArrayLengths = new HashMap(); - /** - * Key is function that has some byte[] or short[] arguments that should be - * converted to String args; value is List of Integer argument indices - */ - private Map/*<String,List<Integer>>*/ argumentsAreString = new HashMap(); - private Set/*<String>*/ extendedIntfSymbolsIgnore = new HashSet(); - private Set/*<String>*/ extendedIntfSymbolsOnly = new HashSet(); - private Set/*<Pattern>*/ ignores = new HashSet(); - private Map/*<String,Pattern>*/ ignoreMap = new HashMap(); - private Set/*<Pattern>*/ ignoreNots = new HashSet(); - private Set/*<Pattern>*/ unignores = new HashSet(); - private Set/*<Pattern>*/ unimplemented = new HashSet(); - private boolean forceNioOnly4All=false; - private Set/*<String>*/ nioOnly = new HashSet(); - private boolean forceNioDirectOnly4All=false; - private Set/*<String>*/ nioDirectOnly = new HashSet(); - private Set/*<String>*/ manuallyImplement = new HashSet(); - private Map/*<String,List<String>>*/ customJavaCode = new HashMap(); - private Map/*<String,List<String>>*/ classJavadoc = new HashMap(); - private Map/*<String,String>*/ structPackages = new HashMap(); - private List/*<String>*/ customCCode = new ArrayList(); - private List/*<String>*/ forcedStructs = new ArrayList(); - private Map/*<String, String>*/ returnValueCapacities = new HashMap(); - private Map/*<String, String>*/ returnValueLengths = new HashMap(); - private Map/*<String, List<String>>*/ temporaryCVariableDeclarations = new HashMap(); - private Map/*<String, List<String>>*/ temporaryCVariableAssignments = new HashMap(); - private Map/*<String,List<String>>*/ extendedInterfaces = new HashMap(); - private Map/*<String,List<String>>*/ implementedInterfaces = new HashMap(); - private Map/*<String,String>*/ parentClass = new HashMap(); - private Map/*<String,String>*/ javaTypeRenames = new HashMap(); - private Map/*<String,String>*/ javaSymbolRenames = new HashMap(); - private Map/*<String,List<String>>*/ javaPrologues = new HashMap(); - private Map/*<String,List<String>>*/ javaEpilogues = new HashMap(); + private int nestedReads; + private String packageName; + private String implPackageName; + private String className; + private String implClassName; + + /** + * Root directory for the hierarchy of generated java classes. Default is + * working directory. + */ + private String javaOutputDir = "."; + + /** + * Top output root directory for all generated files. Default is null, ie not to use it. + */ + private String outputRootDir = null; + + /** + * Directory into which generated native JNI code will be written. Default + * is current working directory. + */ + private String nativeOutputDir = "."; + + /** + * If true, then each native *.c and *.h file will be generated in the + * directory nativeOutputDir/packageAsPath(packageName). Default is false. + */ + private boolean nativeOutputUsesJavaHierarchy; + + /** + * If true, then the comment of a native method binding will include a @native tag + * to allow taglets to augment the javadoc with additional information regarding + * the mapped C function. Defaults to false. + */ + private boolean tagNativeBinding; + + /** + * Style of code emission. Can emit everything into one class + * (AllStatic), separate interface and implementing classes + * (InterfaceAndImpl), only the interface (InterfaceOnly), or only + * the implementation (ImplOnly). + */ + private int emissionStyle = JavaEmitter.ALL_STATIC; + + /** + * List of imports to emit at the head of the output files. + */ + private List<String> imports = new ArrayList<String>(); + + /** + * The package in which the generated glue code expects to find its + * run-time helper classes (BufferFactory, CPU, + * StructAccessor). Defaults to "com.sun.gluegen.runtime". + */ + private String gluegenRuntimePackage = "com.sun.gluegen.runtime"; + + /** + * The kind of exception raised by the generated code if run-time + * checks fail. Defaults to RuntimeException. + */ + private String runtimeExceptionType = "RuntimeException"; + private String unsupportedExceptionType = "UnsupportedOperationException"; + private Map<String, Integer> accessControl = new HashMap<String, Integer>(); + private Map<String, TypeInfo> typeInfoMap = new HashMap<String, TypeInfo>(); + private Set<String> returnsString = new HashSet<String>(); + private Map<String, String> returnedArrayLengths = new HashMap<String, String>(); + + /** + * Key is function that has some byte[] or short[] arguments that should be + * converted to String args; value is List of Integer argument indices + */ + private Map<String, List<Integer>> argumentsAreString = new HashMap<String, List<Integer>>(); + private Set<String> extendedIntfSymbolsIgnore = new HashSet<String>(); + private Set<String> extendedIntfSymbolsOnly = new HashSet<String>(); + private Set<Pattern> ignores = new HashSet<Pattern>(); + private Map<String, Pattern> ignoreMap = new HashMap<String, Pattern>(); + private Set<Pattern> ignoreNots = new HashSet<Pattern>(); + private Set<Pattern> unignores = new HashSet<Pattern>(); + private Set<Pattern> unimplemented = new HashSet<Pattern>(); + private boolean forceNioOnly4All = false; + private Set<String> nioOnly = new HashSet<String>(); + private boolean forceNioDirectOnly4All = false; + private Set<String> nioDirectOnly = new HashSet<String>(); + private Set<String> manuallyImplement = new HashSet<String>(); + private Map<String, List<String>> customJavaCode = new HashMap<String, List<String>>(); + private Map<String, List<String>> classJavadoc = new HashMap<String, List<String>>(); + private Map<String, String> structPackages = new HashMap<String, String>(); + private List<String> customCCode = new ArrayList<String>(); + private List<String> forcedStructs = new ArrayList<String>(); + private Map<String, String> returnValueCapacities = new HashMap<String, String>(); + private Map<String, String> returnValueLengths = new HashMap<String, String>(); + private Map<String, List<String>> temporaryCVariableDeclarations = new HashMap<String, List<String>>(); + private Map<String, List<String>> temporaryCVariableAssignments = new HashMap<String, List<String>>(); + private Map<String, List<String>> extendedInterfaces = new HashMap<String, List<String>>(); + private Map<String, List<String>> implementedInterfaces = new HashMap<String, List<String>>(); + private Map<String, String> parentClass = new HashMap<String, String>(); + private Map<String, String> javaTypeRenames = new HashMap<String, String>(); + private Map<String, String> javaSymbolRenames = new HashMap<String, String>(); + private Map<String, List<String>> javaPrologues = new HashMap<String, List<String>>(); + private Map<String, List<String>> javaEpilogues = new HashMap<String, List<String>>(); /** Reads the configuration file. @param filename path to file that should be read @@ -175,20 +183,17 @@ public class JavaConfiguration { ++nestedReads; while ((line = reader.readLine()) != null) { ++lineNo; - if (hasPrefix) - { + if (hasPrefix) { line = linePrefix + " " + line; } - if (line.trim().startsWith("#")) - { + if (line.trim().startsWith("#")) { // comment line continue; } StringTokenizer tok = new StringTokenizer(line); - if (tok.hasMoreTokens()) - { + if (tok.hasMoreTokens()) { // always reset delimiters in case of CustomJavaCode, etc. String cmd = tok.nextToken(" \t\n\r\f"); @@ -243,44 +248,82 @@ public class JavaConfiguration { public void setOutputRootDir(String s) { outputRootDir=s; } - /** Returns the package name parsed from the configuration file. */ - public String packageName() { return packageName; } - /** Returns the implementation package name parsed from the configuration file. */ - public String implPackageName() { return implPackageName; } - /** Returns the class name parsed from the configuration file. */ - public String className() { return className; } - /** Returns the implementation class name parsed from the configuration file. */ - public String implClassName() { return implClassName; } - /** Returns the Java code output directory parsed from the configuration file. */ - public String javaOutputDir() { return (null!=outputRootDir)?(outputRootDir + "/" + javaOutputDir):javaOutputDir; } - /** Returns the native code output directory parsed from the configuration file. */ - public String nativeOutputDir() { return (null!=outputRootDir)?(outputRootDir + "/" + nativeOutputDir):nativeOutputDir; } - /** Returns whether the native code directory structure mirrors the Java hierarchy. */ - public boolean nativeOutputUsesJavaHierarchy() { return nativeOutputUsesJavaHierarchy; } - /** Returns whether the comment of a native method binding should include a @native tag. */ - public boolean tagNativeBinding() { return tagNativeBinding; } - /** Returns the code emission style (constants in JavaEmitter) parsed from the configuration file. */ - public int emissionStyle() { return emissionStyle; } - /** Returns the access control for the emitted Java method. Returns one of JavaEmitter.ACC_PUBLIC, JavaEmitter.ACC_PROTECTED, JavaEmitter.ACC_PRIVATE, or JavaEmitter.ACC_PACKAGE_PRIVATE. */ - public int accessControl(String methodName) { - Integer ret = (Integer) accessControl.get(methodName); - if (ret != null) { - return ret.intValue(); - } - // Default access control is public - return JavaEmitter.ACC_PUBLIC; - } - - /** Returns the package in which the generated glue code expects to - find its run-time helper classes (BufferFactory, CPU, - StructAccessor). Defaults to "com.sun.gluegen.runtime". */ - public String gluegenRuntimePackage() { return gluegenRuntimePackage; } - /** Returns the kind of exception to raise if run-time checks fail in the generated code. */ - public String runtimeExceptionType() { return runtimeExceptionType; } - /** Returns the kind of exception to raise if run-time checks fail in the generated code. */ - public String unsupportedExceptionType() { return unsupportedExceptionType; } - /** Returns the list of imports that should be emitted at the top of each .java file. */ - public List/*<String>*/ imports() { return imports; } + /** Returns the package name parsed from the configuration file. */ + public String packageName() { + return packageName; + } + + /** Returns the implementation package name parsed from the configuration file. */ + public String implPackageName() { + return implPackageName; + } + + /** Returns the class name parsed from the configuration file. */ + public String className() { + return className; + } + + /** Returns the implementation class name parsed from the configuration file. */ + public String implClassName() { + return implClassName; + } + + /** Returns the Java code output directory parsed from the configuration file. */ + public String javaOutputDir() { + return (null != outputRootDir) ? (outputRootDir + "/" + javaOutputDir) : javaOutputDir; + } + + /** Returns the native code output directory parsed from the configuration file. */ + public String nativeOutputDir() { + return (null != outputRootDir) ? (outputRootDir + "/" + nativeOutputDir) : nativeOutputDir; + } + + /** Returns whether the native code directory structure mirrors the Java hierarchy. */ + public boolean nativeOutputUsesJavaHierarchy() { + return nativeOutputUsesJavaHierarchy; + } + + /** Returns whether the comment of a native method binding should include a @native tag. */ + public boolean tagNativeBinding() { + return tagNativeBinding; + } + + /** Returns the code emission style (constants in JavaEmitter) parsed from the configuration file. */ + public int emissionStyle() { + return emissionStyle; + } + + /** Returns the access control for the emitted Java method. Returns one of JavaEmitter.ACC_PUBLIC, JavaEmitter.ACC_PROTECTED, JavaEmitter.ACC_PRIVATE, or JavaEmitter.ACC_PACKAGE_PRIVATE. */ + public int accessControl(String methodName) { + Integer ret = accessControl.get(methodName); + if (ret != null) { + return ret.intValue(); + } + // Default access control is public + return JavaEmitter.ACC_PUBLIC; + } + + /** Returns the package in which the generated glue code expects to + find its run-time helper classes (BufferFactory, CPU, + StructAccessor). Defaults to "com.sun.gluegen.runtime". */ + public String gluegenRuntimePackage() { + return gluegenRuntimePackage; + } + + /** Returns the kind of exception to raise if run-time checks fail in the generated code. */ + public String runtimeExceptionType() { + return runtimeExceptionType; + } + + /** Returns the kind of exception to raise if run-time checks fail in the generated code. */ + public String unsupportedExceptionType() { + return unsupportedExceptionType; + } + + /** Returns the list of imports that should be emitted at the top of each .java file. */ + public List<String> imports() { + return imports; + } private static final boolean DEBUG_TYPE_INFO = false; /** If this type should be considered opaque, returns the TypeInfo @@ -328,12 +371,11 @@ public class JavaConfiguration { } // Try all typedef names that map to this type - Set entrySet = typedefDictionary.entrySet(); - for (Iterator iter = entrySet.iterator(); iter.hasNext(); ) { - Map.Entry entry = (Map.Entry) iter.next(); + Set<Entry<String, Type>> entrySet = typedefDictionary.entrySet(); + for (Map.Entry<String, Type> entry : entrySet) { // "eq" equality is OK to use here since all types have been canonicalized if (entry.getValue() == type) { - name = (String) entry.getKey(); + name = entry.getKey(); if (DEBUG_TYPE_INFO) { System.err.println("Looking under typedef name " + name); } @@ -359,14 +401,12 @@ public class JavaConfiguration { // Helper functions for above private TypeInfo closestTypeInfo(String name, int pointerDepth) { - TypeInfo info = (TypeInfo) typeInfoMap.get(name); + TypeInfo info = typeInfoMap.get(name); TypeInfo closest = null; while (info != null) { if (DEBUG_TYPE_INFO) System.err.println(" Checking TypeInfo for " + name + " at pointerDepth " + pointerDepth); - if (info.pointerDepth() <= pointerDepth && - (closest == null || - info.pointerDepth() > closest.pointerDepth())) { + if (info.pointerDepth() <= pointerDepth && (closest == null || info.pointerDepth() > closest.pointerDepth())) { if (DEBUG_TYPE_INFO) System.err.println(" Accepted"); closest = info; @@ -389,7 +429,7 @@ public class JavaConfiguration { numPointersStripped); } - Class c = info.javaType().getJavaClass(); + Class<?> c = info.javaType().getJavaClass(); int pd = info.pointerDepth(); // Handle single-pointer stripping for types compatible with C @@ -432,15 +472,15 @@ public class JavaConfiguration { pointer to a CompoundType, is actually an array of the CompoundType rather than a pointer to a single object. */ public String returnedArrayLength(String functionName) { - return (String) returnedArrayLengths.get(functionName); + return returnedArrayLengths.get(functionName); } /** Returns a list of <code>Integer</code>s which are the indices of <code>const char*</code> arguments that should be converted to <code>String</code>s. Returns null if there are no such hints for the given function name. */ - public List/*<Integer>*/ stringArguments(String functionName) { - return (List) argumentsAreString.get(functionName); + public List<Integer> stringArguments(String functionName) { + return argumentsAreString.get(functionName); } public boolean isForceNioOnly4All() { return forceNioOnly4All; } @@ -474,10 +514,10 @@ public class JavaConfiguration { the given Java type name (not fully-qualified, only the class name); returns either null or an empty list if there is no custom code for the class. */ - public List customJavaCodeForClass(String className) { - List res = (List) customJavaCode.get(className); + public List<String> customJavaCodeForClass(String className) { + List<String> res = customJavaCode.get(className); if (res == null) { - res = new ArrayList(); + res = new ArrayList<String>(); customJavaCode.put(className, res); } return res; @@ -487,10 +527,10 @@ public class JavaConfiguration { the given Java type name (not fully-qualified, only the class name); returns either null or an empty list if there is no Javadoc documentation for the class. */ - public List javadocForClass(String className) { - List res = (List) classJavadoc.get(className); + public List<String> javadocForClass(String className) { + List<String> res = classJavadoc.get(className); if (res == null) { - res = new ArrayList(); + res = new ArrayList<String>(); classJavadoc.put(className, res); } return res; @@ -500,7 +540,7 @@ public class JavaConfiguration { accessing the specified struct. Defaults to emitting into the regular package (i.e., the result of {@link #packageName}). */ public String packageForStruct(String structName) { - String res = (String) structPackages.get(structName); + String res = structPackages.get(structName); if (res == null) { res = packageName; } @@ -509,13 +549,13 @@ public class JavaConfiguration { /** Returns, as a List of Strings, the custom C code to be emitted along with the glue code for the main class. */ - public List/*<String>*/ customCCode() { + public List<String> customCCode() { return customCCode; } /** Returns, as a List of Strings, the structs for which glue code emission should be forced. */ - public List/*<String>*/ forcedStructs() { + public List<String> forcedStructs() { return forcedStructs; } @@ -523,36 +563,36 @@ public class JavaConfiguration { the capacity of the java.nio.ByteBuffer being returned from a native method, or null if no expression has been specified. */ public String returnValueCapacity(String functionName) { - return (String) returnValueCapacities.get(functionName); + return returnValueCapacities.get(functionName); } /** Returns a MessageFormat string of the C expression calculating the length of the array being returned from a native method, or null if no expression has been specified. */ public String returnValueLength(String functionName) { - return (String) returnValueLengths.get(functionName); + return returnValueLengths.get(functionName); } /** Returns a List of Strings of expressions declaring temporary C variables in the glue code for the specified function. */ - public List/*<String>*/ temporaryCVariableDeclarations(String functionName) { - return (List) temporaryCVariableDeclarations.get(functionName); + public List<String> temporaryCVariableDeclarations(String functionName) { + return temporaryCVariableDeclarations.get(functionName); } /** Returns a List of Strings of expressions containing assignments to temporary C variables in the glue code for the specified function. */ - public List/*<String>*/ temporaryCVariableAssignments(String functionName) { - return (List) temporaryCVariableAssignments.get(functionName); + public List<String> temporaryCVariableAssignments(String functionName) { + return temporaryCVariableAssignments.get(functionName); } /** Returns a List of Strings indicating the interfaces the passed interface should declare it extends. May return null or a list of zero length if there are none. */ - public List/*<String>*/ extendedInterfaces(String interfaceName) { - List res = (List) extendedInterfaces.get(interfaceName); + public List<String> extendedInterfaces(String interfaceName) { + List<String> res = extendedInterfaces.get(interfaceName); if (res == null) { - res = new ArrayList(); + res = new ArrayList<String>(); extendedInterfaces.put(interfaceName, res); } return res; @@ -561,10 +601,10 @@ public class JavaConfiguration { /** Returns a List of Strings indicating the interfaces the passed class should declare it implements. May return null or a list of zero length if there are none. */ - public List/*<String>*/ implementedInterfaces(String className) { - List res = (List) implementedInterfaces.get(className); + public List<String> implementedInterfaces(String className) { + List<String> res = implementedInterfaces.get(className); if (res == null) { - res = new ArrayList(); + res = new ArrayList<String>(); implementedInterfaces.put(className, res); } return res; @@ -574,7 +614,7 @@ public class JavaConfiguration { class should declare it implements. May return null or a list of zero length if there are none. */ public String extendedParentClass(String className) { - return (String) parentClass.get(className); + return parentClass.get(className); } public static final boolean DEBUG_IGNORES = false; @@ -589,19 +629,18 @@ public class JavaConfiguration { public void dumpIgnores() { System.err.println("Extended Intf: "); - for (Iterator iter = extendedIntfSymbolsIgnore.iterator(); iter.hasNext(); ) { - System.err.println("\t"+(String)iter.next()); + for (String str : extendedIntfSymbolsIgnore) { + System.err.println("\t"+str); } System.err.println("Ignores (All): "); - for (Iterator iter = ignores.iterator(); iter.hasNext(); ) { - System.err.println("\t"+iter.next()); + for (Pattern pattern : ignores) { + System.err.println("\t"+pattern); } } public void dumpRenames() { System.err.println("Symbol Renames: "); - for (Iterator iter = javaSymbolRenames.keySet().iterator(); iter.hasNext(); ) { - String key = (String)iter.next(); + for (String key : javaSymbolRenames.keySet()) { System.err.println("\t"+key+" -> "+javaSymbolRenames.get(key)); } } @@ -653,8 +692,7 @@ public class JavaConfiguration { // Ok, the slow case. We need to check the entire table, in case the table // contains an regular expression that matches the symbol. - for (Iterator iter = ignores.iterator(); iter.hasNext(); ) { - Pattern regexp = (Pattern)iter.next(); + for (Pattern regexp : ignores) { Matcher matcher = regexp.matcher(symbol); if (matcher.matches()) { if(DEBUG_IGNORES) { @@ -668,8 +706,7 @@ public class JavaConfiguration { if (ignoreNots.size() > 0) { // Ok, the slow case. We need to check the entire table, in case the table // contains an regular expression that matches the symbol. - for (Iterator iter = ignoreNots.iterator(); iter.hasNext(); ) { - Pattern regexp = (Pattern)iter.next(); + for (Pattern regexp : ignoreNots) { Matcher matcher = regexp.matcher(symbol); if (!matcher.matches()) { // Special case as this is most often likely to be the case. @@ -682,8 +719,7 @@ public class JavaConfiguration { } boolean unignoreFound = false; - for (Iterator iter2 = unignores.iterator(); iter2.hasNext(); ) { - Pattern unignoreRegexp = (Pattern)iter2.next(); + for (Pattern unignoreRegexp : unignores) { Matcher unignoreMatcher = unignoreRegexp.matcher(symbol); if (unignoreMatcher.matches()) { unignoreFound = true; @@ -715,8 +751,7 @@ public class JavaConfiguration { // Ok, the slow case. We need to check the entire table, in case the table // contains an regular expression that matches the symbol. - for (Iterator iter = unimplemented.iterator(); iter.hasNext(); ) { - Pattern regexp = (Pattern)iter.next(); + for (Pattern regexp : unimplemented) { Matcher matcher = regexp.matcher(symbol); if (matcher.matches()) { return true; @@ -731,7 +766,7 @@ public class JavaConfiguration { unchanged if no RenameJavaType directive was specified for this type. */ public String renameJavaType(String javaTypeName) { - String rename = (String) javaTypeRenames.get(javaTypeName); + String rename = javaTypeRenames.get(javaTypeName); if (rename != null) { return rename; } @@ -744,7 +779,7 @@ public class JavaConfiguration { function under the hood. Returns null if this symbol has not been explicitly renamed. */ public String getJavaSymbolRename(String symbolName) { - return (String) javaSymbolRenames.get(symbolName); + return javaSymbolRenames.get(symbolName); } /** Programmatically adds a rename directive for the given symbol. */ @@ -773,15 +808,13 @@ public class JavaConfiguration { /** Returns a list of Strings which should be emitted as a prologue to the body for the Java-side glue code for the given method. Returns null if no prologue was specified. */ - public List/*<String>*/ javaPrologueForMethod(MethodBinding binding, + public List<String> javaPrologueForMethod(MethodBinding binding, boolean forImplementingMethodCall, boolean eraseBufferAndArrayTypes) { - List/*<String>*/ res = (List/*<String>*/) javaPrologues.get(binding.getName()); + List<String> res = javaPrologues.get(binding.getName()); if (res == null) { // Try again with method name and descriptor - res = (List/*<String>*/) javaPrologues.get(binding.getName() + - binding.getDescriptor(forImplementingMethodCall, - eraseBufferAndArrayTypes)); + res = javaPrologues.get(binding.getName() + binding.getDescriptor(forImplementingMethodCall, eraseBufferAndArrayTypes)); } return res; } @@ -789,15 +822,13 @@ public class JavaConfiguration { /** Returns a list of Strings which should be emitted as an epilogue to the body for the Java-side glue code for the given method. Returns null if no epilogue was specified. */ - public List/*<String>*/ javaEpilogueForMethod(MethodBinding binding, + public List<String> javaEpilogueForMethod(MethodBinding binding, boolean forImplementingMethodCall, boolean eraseBufferAndArrayTypes) { - List/*<String>*/ res = (List/*<String>*/) javaEpilogues.get(binding.getName()); + List<String> res = javaEpilogues.get(binding.getName()); if (res == null) { // Try again with method name and descriptor - res = (List/*<String>*/) javaEpilogues.get(binding.getName() + - binding.getDescriptor(forImplementingMethodCall, - eraseBufferAndArrayTypes)); + res = javaEpilogues.get(binding.getName() + binding.getDescriptor(forImplementingMethodCall, eraseBufferAndArrayTypes)); } return res; } @@ -978,7 +1009,7 @@ public class JavaConfiguration { } } - protected Class stringToPrimitiveType(String type) throws ClassNotFoundException { + protected Class<?> stringToPrimitiveType(String type) throws ClassNotFoundException { if (type.equals("boolean")) return Boolean.TYPE; if (type.equals("byte")) return Byte.TYPE; if (type.equals("char")) return Character.TYPE; @@ -1061,6 +1092,7 @@ public class JavaConfiguration { } } + @SuppressWarnings("unchecked") protected void readExtendedInterfaceSymbols(StringTokenizer tok, String filename, int lineNo, boolean onlyList) { File javaFile; BufferedReader javaReader; @@ -1110,7 +1142,7 @@ public class JavaConfiguration { protected void readUnignore(StringTokenizer tok, String filename, int lineNo) { try { String regex = tok.nextToken(); - Pattern pattern = (Pattern) ignoreMap.get(regex); + Pattern pattern = ignoreMap.get(regex); ignoreMap.remove(regex); ignores.remove(pattern); @@ -1171,12 +1203,12 @@ public class JavaConfiguration { protected void readCustomJavaCode(StringTokenizer tok, String filename, int lineNo) { try { - String className = tok.nextToken(); + String tokenClassName = tok.nextToken(); try { String restOfLine = tok.nextToken("\n\r\f"); - addCustomJavaCode(className, restOfLine); + addCustomJavaCode(tokenClassName, restOfLine); } catch (NoSuchElementException e) { - addCustomJavaCode(className, ""); + addCustomJavaCode(tokenClassName, ""); } } catch (NoSuchElementException e) { throw new RuntimeException("Error parsing \"CustomJavaCode\" command at line " + lineNo + @@ -1185,7 +1217,7 @@ public class JavaConfiguration { } protected void addCustomJavaCode(String className, String code) { - List codeList = customJavaCodeForClass(className); + List<String> codeList = customJavaCodeForClass(className); codeList.add(code); } @@ -1200,9 +1232,9 @@ public class JavaConfiguration { protected void readClassJavadoc(StringTokenizer tok, String filename, int lineNo) { try { - String className = tok.nextToken(); + String tokenClassName = tok.nextToken(); String restOfLine = tok.nextToken("\n\r\f"); - addClassJavadoc(className, restOfLine); + addClassJavadoc(tokenClassName, restOfLine); } catch (NoSuchElementException e) { throw new RuntimeException("Error parsing \"ClassJavadoc\" command at line " + lineNo + " in file \"" + filename + "\"", e); @@ -1210,7 +1242,7 @@ public class JavaConfiguration { } protected void addClassJavadoc(String className, String code) { - List codeList = javadocForClass(className); + List<String> codeList = javadocForClass(className); codeList.add(code); } @@ -1246,7 +1278,7 @@ public class JavaConfiguration { protected void readArgumentIsString(StringTokenizer tok, String filename, int lineNo) { try { String methodName = tok.nextToken(); - ArrayList argIndices = new ArrayList(2); + ArrayList<Integer> argIndices = new ArrayList<Integer>(2); while (tok.hasMoreTokens()) { Integer idx = Integer.valueOf(tok.nextToken()); argIndices.add(idx); @@ -1305,9 +1337,9 @@ public class JavaConfiguration { String functionName = tok.nextToken(); String restOfLine = tok.nextToken("\n\r\f"); restOfLine = restOfLine.trim(); - List list = (List) temporaryCVariableDeclarations.get(functionName); + List<String> list = temporaryCVariableDeclarations.get(functionName); if (list == null) { - list = new ArrayList/*<String>*/(); + list = new ArrayList<String>(); temporaryCVariableDeclarations.put(functionName, list); } list.add(restOfLine); @@ -1322,9 +1354,9 @@ public class JavaConfiguration { String functionName = tok.nextToken(); String restOfLine = tok.nextToken("\n\r\f"); restOfLine = restOfLine.trim(); - List list = (List) temporaryCVariableAssignments.get(functionName); + List<String> list = temporaryCVariableAssignments.get(functionName); if (list == null) { - list = new ArrayList/*<String>*/(); + list = new ArrayList<String>(); temporaryCVariableAssignments.put(functionName, list); } list.add(restOfLine); @@ -1372,7 +1404,7 @@ public class JavaConfiguration { protected void readExtend(StringTokenizer tok, String filename, int lineNo) { try { String interfaceName = tok.nextToken(); - List intfs = extendedInterfaces(interfaceName); + List<String> intfs = extendedInterfaces(interfaceName); intfs.add(tok.nextToken()); } catch (NoSuchElementException e) { throw new RuntimeException("Error parsing \"Extends\" command at line " + lineNo + @@ -1382,8 +1414,8 @@ public class JavaConfiguration { protected void readImplements(StringTokenizer tok, String filename, int lineNo) { try { - String className = tok.nextToken(); - List intfs = implementedInterfaces(className); + String tokenClassName = tok.nextToken(); + List<String> intfs = implementedInterfaces(tokenClassName); intfs.add(tok.nextToken()); } catch (NoSuchElementException e) { throw new RuntimeException("Error parsing \"Implements\" command at line " + lineNo + @@ -1393,8 +1425,8 @@ public class JavaConfiguration { protected void readParentClass(StringTokenizer tok, String filename, int lineNo) { try { - String className = tok.nextToken(); - parentClass.put(className, tok.nextToken()); + String tokenClassName = tok.nextToken(); + parentClass.put(tokenClassName, tok.nextToken()); } catch (NoSuchElementException e) { throw new RuntimeException("Error parsing \"ParentClass\" command at line " + lineNo + " in file \"" + filename + "\": missing expected parameter", e); @@ -1447,10 +1479,10 @@ public class JavaConfiguration { } protected void addJavaPrologueOrEpilogue(String methodName, String code, boolean prologue) { - Map codes = (prologue ? javaPrologues : javaEpilogues); - List/*<String>*/ data = (List/*<String>*/) codes.get(methodName); + Map<String, List<String>> codes = (prologue ? javaPrologues : javaEpilogues); + List<String> data = codes.get(methodName); if (data == null) { - data = new ArrayList/*<String>*/(); + data = new ArrayList<String>(); codes.put(methodName, data); } data.add(code); @@ -1495,7 +1527,7 @@ public class JavaConfiguration { } protected void addTypeInfo(TypeInfo info) { - TypeInfo tmp = (TypeInfo) typeInfoMap.get(info.name()); + TypeInfo tmp = typeInfoMap.get(info.name()); if (tmp == null) { typeInfoMap.put(info.name(), info); return; diff --git a/src/java/com/sun/gluegen/JavaEmitter.java b/src/java/com/sun/gluegen/JavaEmitter.java index 5a64ef6..0d118cf 100644 --- a/src/java/com/sun/gluegen/JavaEmitter.java +++ b/src/java/com/sun/gluegen/JavaEmitter.java @@ -56,10 +56,11 @@ import com.sun.gluegen.cgram.types.*; public class JavaEmitter implements GlueEmitter { + private StructLayout layout; private TypeDictionary typedefDictionary; private TypeDictionary structDictionary; - private Map canonMap; + private Map<Type, Type> canonMap; protected JavaConfiguration cfg; /** @@ -93,8 +94,8 @@ public class JavaEmitter implements GlueEmitter { cfg.read(filename); } - public void setMachineDescription(MachineDescription md32, - MachineDescription md64) { + public void setMachineDescription(MachineDescription md32, MachineDescription md64) { + if ((md32 == null) && (md64 == null)) { throw new RuntimeException("Must specify at least one MachineDescription"); } @@ -104,28 +105,26 @@ public class JavaEmitter implements GlueEmitter { } class ConstantRenamer implements SymbolFilter { - private List/*<ConstantDefinition>*/ constants; - public void filterSymbols(List/*<ConstantDefinition>*/ constants, - List/*<FunctionSymbol>*/ functions) { + private List<ConstantDefinition> constants; + + public void filterSymbols(List<ConstantDefinition> constants, List<FunctionSymbol> functions) { this.constants = constants; doWork(); } - public List/*<ConstantDefinition>*/ getConstants() { + public List<ConstantDefinition> getConstants() { return constants; } - public List/*<FunctionSymbol>*/ getFunctions() { + public List<FunctionSymbol> getFunctions() { return null; } private void doWork() { - List/*<ConstantDefinition>*/ newConstants = new ArrayList/*<ConstantDefinition>*/(); + List<ConstantDefinition> newConstants = new ArrayList<ConstantDefinition>(); JavaConfiguration cfg = getConfig(); - for (Iterator iter = constants.iterator(); iter.hasNext(); ) { - ConstantDefinition def = (ConstantDefinition) iter.next(); - String rename = cfg.getJavaSymbolRename(def.getName()); + for (ConstantDefinition def : constants) { def.rename(cfg.getJavaSymbolRename(def.getName())); newConstants.add(def); } @@ -137,15 +136,14 @@ public class JavaEmitter implements GlueEmitter { try { openWriters(); } catch (Exception e) { - throw new RuntimeException( - "Unable to open files for writing", e); + throw new RuntimeException("Unable to open files for writing", e); } emitAllFileHeaders(); // Request emission of any structs requested - for (Iterator iter = cfg.forcedStructs().iterator(); iter.hasNext(); ) { - controls.forceStructEmission((String) iter.next()); + for (String structs : cfg.forcedStructs()) { + controls.forceStructEmission(structs); } // Handle renaming of constants @@ -158,8 +156,7 @@ public class JavaEmitter implements GlueEmitter { try { closeWriters(); } catch (Exception e) { - throw new RuntimeException( - "Unable to close open files", e); + throw new RuntimeException("Unable to close open files", e); } } @@ -275,13 +272,11 @@ public class JavaEmitter implements GlueEmitter { if (value.startsWith("0x") || value.startsWith("0X")) { radix = 16; parseValue = value.substring(2); - } - else if (value.startsWith("0") && value.length() > 1) { + } else if (value.startsWith("0") && value.length() > 1) { // TODO: is "0" the prefix in C to indicate octal??? radix = 8; parseValue = value.substring(1); - } - else { + } else { radix = 10; parseValue = value; } @@ -289,9 +284,9 @@ public class JavaEmitter implements GlueEmitter { long longVal = Long.parseLong(parseValue, radix); // if constant is small enough, store it as an int instead of a long if (longVal > Integer.MIN_VALUE && longVal < Integer.MAX_VALUE) { - return new Integer((int)longVal); + return (int)longVal; } - return new Long(longVal); + return longVal; } catch (NumberFormatException e) { try { @@ -366,7 +361,7 @@ public class JavaEmitter implements GlueEmitter { public void beginFunctions(TypeDictionary typedefDictionary, TypeDictionary structDictionary, - Map canonMap) throws Exception { + Map<Type, Type> canonMap) throws Exception { this.typedefDictionary = typedefDictionary; this.structDictionary = structDictionary; this.canonMap = canonMap; @@ -375,8 +370,8 @@ public class JavaEmitter implements GlueEmitter { } } - public Iterator emitFunctions(List/*<FunctionSymbol>*/ originalCFunctions) - throws Exception { + public Iterator<FunctionSymbol> emitFunctions(List<FunctionSymbol> originalCFunctions) throws Exception { + // Sometimes headers will have the same function prototype twice, once // with the argument names and once without. We'll remember the signatures // we've already processed we don't generate duplicate bindings. @@ -384,9 +379,8 @@ public class JavaEmitter implements GlueEmitter { // Note: this code assumes that on the equals() method in FunctionSymbol // only considers function name and argument types (i.e., it does not // consider argument *names*) when comparing FunctionSymbols for equality - Set funcsToBindSet = new HashSet(100); - for (Iterator cIter = originalCFunctions.iterator(); cIter.hasNext(); ) { - FunctionSymbol cFunc = (FunctionSymbol) cIter.next(); + Set<FunctionSymbol> funcsToBindSet = new HashSet<FunctionSymbol>(100); + for (FunctionSymbol cFunc : originalCFunctions) { if (!funcsToBindSet.contains(cFunc)) { funcsToBindSet.add(cFunc); } @@ -394,38 +388,36 @@ public class JavaEmitter implements GlueEmitter { // validateFunctionsToBind(funcsToBindSet); - ArrayList funcsToBind = new ArrayList(funcsToBindSet.size()); + ArrayList<FunctionSymbol> funcsToBind = new ArrayList<FunctionSymbol>(funcsToBindSet.size()); funcsToBind.addAll(funcsToBindSet); // sort functions to make them easier to find in native code Collections.sort( funcsToBind, - new Comparator() { - public int compare(Object o1, Object o2) { - return ((FunctionSymbol)o1).getName().compareTo( - ((FunctionSymbol)o2).getName()); + new Comparator<FunctionSymbol>() { + public int compare(FunctionSymbol o1, FunctionSymbol o2) { + return o1.getName().compareTo(o2.getName()); } + @Override public boolean equals(Object obj) { return obj.getClass() == this.getClass(); } }); // Bind all the C funcs to Java methods - HashSet/*<MethodBinding>*/ methodBindingSet = new HashSet(); - ArrayList/*<FunctionEmitter>*/ methodBindingEmitters = new ArrayList(2*funcsToBind.size()); - for (Iterator iter = funcsToBind.iterator(); iter.hasNext(); ) { - FunctionSymbol cFunc = (FunctionSymbol) iter.next(); + HashSet<MethodBinding> methodBindingSet = new HashSet<MethodBinding>(); + ArrayList<FunctionEmitter> methodBindingEmitters = new ArrayList<FunctionEmitter>(2*funcsToBind.size()); + for (FunctionSymbol cFunc : funcsToBind) { // Check to see whether this function should be ignored if (cfg.shouldIgnoreInImpl(cFunc.getName())) { continue; // don't generate bindings for this symbol } - List allBindings = generateMethodBindingEmitters(methodBindingSet, cFunc); - methodBindingEmitters.addAll(allBindings); + methodBindingEmitters.addAll(generateMethodBindingEmitters(methodBindingSet, cFunc)); } // Emit all the methods for (int i = 0; i < methodBindingEmitters.size(); ++i) { - FunctionEmitter emitter = (FunctionEmitter)methodBindingEmitters.get(i); + FunctionEmitter emitter = methodBindingEmitters.get(i); try { if (!emitter.isInterface() || !cfg.shouldIgnoreInInterface(emitter.getName())) { emitter.emit(); @@ -465,7 +457,7 @@ public class JavaEmitter implements GlueEmitter { * outgoing arguments). */ protected void generatePublicEmitters(MethodBinding binding, - List allEmitters, + List<FunctionEmitter> allEmitters, boolean signatureOnly) { PrintWriter writer = ((signatureOnly || cfg.allStatic()) ? javaWriter() : javaImplWriter()); @@ -485,8 +477,8 @@ public class JavaEmitter implements GlueEmitter { // set to false; for example, if the routine doesn't take any // arrays or buffers as arguments boolean isUnimplemented = cfg.isUnimplemented(binding.getName()); - List/*<String>*/ prologue = cfg.javaPrologueForMethod(binding, false, false); - List/*<String>*/ epilogue = cfg.javaEpilogueForMethod(binding, false, false); + List<String> prologue = cfg.javaPrologueForMethod(binding, false, false); + List<String> epilogue = cfg.javaEpilogueForMethod(binding, false, false); boolean needsBody = (isUnimplemented || (binding.needsNIOWrappingOrUnwrapping() || binding.signatureUsesJavaPrimitiveArrays()) || @@ -536,7 +528,7 @@ public class JavaEmitter implements GlueEmitter { * creating duplicated methods / functions. */ protected void generatePrivateEmitters(MethodBinding binding, - List allEmitters) { + List<FunctionEmitter> allEmitters) { if (cfg.manuallyImplement(binding.getName())) { // Don't produce emitters for the implementation class return; @@ -703,9 +695,9 @@ public class JavaEmitter implements GlueEmitter { * Generate all appropriate Java bindings for the specified C function * symbols. */ - protected List generateMethodBindingEmitters(HashSet/*<MethodBinding>*/ methodBindingSet, FunctionSymbol sym) throws Exception { + protected List<FunctionEmitter> generateMethodBindingEmitters(HashSet<MethodBinding> methodBindingSet, FunctionSymbol sym) throws Exception { - ArrayList/*<FunctionEmitter>*/ allEmitters = new ArrayList(); + ArrayList<FunctionEmitter> allEmitters = new ArrayList<FunctionEmitter>(); try { // Get Java binding for the function @@ -713,10 +705,9 @@ public class JavaEmitter implements GlueEmitter { // JavaTypes representing C pointers in the initial // MethodBinding have not been lowered yet to concrete types - List bindings = expandMethodBinding(mb); + List<MethodBinding> bindings = expandMethodBinding(mb); - for (Iterator iter = bindings.iterator(); iter.hasNext(); ) { - MethodBinding binding = (MethodBinding) iter.next(); + for (MethodBinding binding : bindings) { if(!methodBindingSet.add(binding)) { // skip .. already exisiting binding .. @@ -783,8 +774,7 @@ public class JavaEmitter implements GlueEmitter { } } // end iteration over expanded bindings } catch (Exception e) { - throw new RuntimeException( - "Error while generating bindings for \"" + sym + "\"", e); + throw new RuntimeException("Error while generating bindings for \"" + sym + "\"", e); } return allEmitters; @@ -809,7 +799,7 @@ public class JavaEmitter implements GlueEmitter { public void beginStructs(TypeDictionary typedefDictionary, TypeDictionary structDictionary, - Map canonMap) throws Exception { + Map<Type, Type> canonMap) throws Exception { this.typedefDictionary = typedefDictionary; this.structDictionary = structDictionary; this.canonMap = canonMap; @@ -900,8 +890,7 @@ public class JavaEmitter implements GlueEmitter { String structClassPkg = cfg.packageForStruct(name); PrintWriter writer = null; PrintWriter cWriter = null; - try - { + try { writer = openFile( cfg.javaOutputDir() + File.separator + CodeGenUtils.packageAsPath(structClassPkg) + @@ -910,19 +899,14 @@ public class JavaEmitter implements GlueEmitter { if (needsNativeCode) { String nRoot = cfg.nativeOutputDir(); if (cfg.nativeOutputUsesJavaHierarchy()) { - nRoot += - File.separator + - CodeGenUtils.packageAsPath(cfg.packageName()); + nRoot += File.separator + CodeGenUtils.packageAsPath(cfg.packageName()); } cWriter = openFile(nRoot + File.separator + containingTypeName + "_JNI.c"); CodeGenUtils.emitAutogeneratedWarning(cWriter, this); emitCHeader(cWriter, containingTypeName); } - } - catch(Exception e) - { - throw new RuntimeException( - "Unable to open files for emission of struct class", e); + } catch(Exception e) { + throw new RuntimeException("Unable to open files for emission of struct class", e); } writer.println(); @@ -932,29 +916,29 @@ public class JavaEmitter implements GlueEmitter { writer.println(); writer.println("import " + cfg.gluegenRuntimePackage() + ".*;"); writer.println(); - List/*<String>*/ imports = cfg.imports(); - for (Iterator iter = imports.iterator(); iter.hasNext(); ) { + List<String> imports = cfg.imports(); + for (String str : imports) { writer.print("import "); - writer.print(iter.next()); + writer.print(str); writer.println(";"); } writer.println(); - List/*<String>*/ javadoc = cfg.javadocForClass(containingTypeName); - for (Iterator iter = javadoc.iterator(); iter.hasNext(); ) { - writer.println((String) iter.next()); + List<String> javadoc = cfg.javadocForClass(containingTypeName); + for (String doc : javadoc) { + writer.println(doc); } writer.print((doBaseClass ? "public " : "") + (doBaseClass ? "abstract " : "") + "class " + containingTypeName + suffix + " "); if (!doBaseClass) { writer.print("extends " + containingTypeName + " "); } boolean firstIteration = true; - List/*<String>*/ userSpecifiedInterfaces = cfg.implementedInterfaces(containingTypeName); - for (Iterator iter = userSpecifiedInterfaces.iterator(); iter.hasNext(); ) { + List<String> userSpecifiedInterfaces = cfg.implementedInterfaces(containingTypeName); + for (String userInterface : userSpecifiedInterfaces) { if (firstIteration) { writer.print("implements "); } firstIteration = false; - writer.print(iter.next()); + writer.print(userInterface); writer.print(" "); } writer.println("{"); @@ -1193,11 +1177,11 @@ public class JavaEmitter implements GlueEmitter { } public void endStructs() throws Exception {} - public static int addStrings2Buffer(StringBuffer buf, String sep, String first, Collection col) { + public static int addStrings2Buffer(StringBuffer buf, String sep, String first, Collection<String> col) { int num = 0; - if(null==buf) buf=new StringBuffer(); + if(null==buf) buf = new StringBuffer(); - Iterator iter=col.iterator(); + Iterator<String> iter = col.iterator(); if(null!=first) { buf.append(first); if( iter.hasNext() ) { @@ -1206,7 +1190,7 @@ public class JavaEmitter implements GlueEmitter { num++; } while( iter.hasNext() ) { - buf.append((String)iter.next()); + buf.append(iter.next()); if( iter.hasNext() ) { buf.append(sep); } @@ -1368,7 +1352,7 @@ public class JavaEmitter implements GlueEmitter { } } - private static boolean isIntegerType(Class c) { + private static boolean isIntegerType(Class<?> c) { return ((c == Byte.TYPE) || (c == Short.TYPE) || (c == Character.TYPE) || @@ -1422,7 +1406,7 @@ public class JavaEmitter implements GlueEmitter { private String compatiblePrimitiveJavaTypeName(Type fieldType, JavaType javaType, MachineDescription curMachDesc) { - Class c = javaType.getJavaClass(); + Class<?> c = javaType.getJavaClass(); if (!isIntegerType(c)) { // FIXME throw new RuntimeException("Can't yet handle opaque definitions of structs' fields to non-integer types (byte, short, int, long, etc.)"); @@ -1545,16 +1529,15 @@ public class JavaEmitter implements GlueEmitter { * Emit all the strings specified in the "CustomJavaCode" parameters of * the configuration file. */ - protected void emitCustomJavaCode(PrintWriter writer, String className) throws Exception - { - List code = cfg.customJavaCodeForClass(className); + protected void emitCustomJavaCode(PrintWriter writer, String className) throws Exception { + List<String> code = cfg.customJavaCodeForClass(className); if (code.size() == 0) return; writer.println(); writer.println(" // --- Begin CustomJavaCode .cfg declarations"); - for (Iterator iter = code.iterator(); iter.hasNext(); ) { - writer.println((String) iter.next()); + for (String line : code) { + writer.println(line); } writer.println(" // ---- End CustomJavaCode .cfg declarations"); } @@ -1567,7 +1550,7 @@ public class JavaEmitter implements GlueEmitter { try { if (cfg.allStatic() || cfg.emitInterface()) { String[] interfaces; - List userSpecifiedInterfaces = null; + List<String> userSpecifiedInterfaces = null; if (cfg.emitInterface()) { userSpecifiedInterfaces = cfg.extendedInterfaces(cfg.className()); } else { @@ -1576,7 +1559,7 @@ public class JavaEmitter implements GlueEmitter { interfaces = new String[userSpecifiedInterfaces.size()]; userSpecifiedInterfaces.toArray(interfaces); - final List/*<String>*/ intfDocs = cfg.javadocForClass(cfg.className()); + final List<String> intfDocs = cfg.javadocForClass(cfg.className()); CodeGenUtils.EmissionCallback docEmitter = new CodeGenUtils.EmissionCallback() { public void emit(PrintWriter w) { @@ -1598,8 +1581,7 @@ public class JavaEmitter implements GlueEmitter { cfg.packageName(), cfg.className(), cfg.gluegenRuntimePackage(), - cfg.allStatic() ? true : false, - (String[]) cfg.imports().toArray(new String[] {}), + cfg.allStatic() ? true : false, cfg.imports().toArray(new String[] {}), accessModifiers, interfaces, cfg.extendedParentClass(cfg.className()), @@ -1607,7 +1589,7 @@ public class JavaEmitter implements GlueEmitter { } if (!cfg.allStatic() && cfg.emitImpl()) { - final List/*<String>*/ implDocs = cfg.javadocForClass(cfg.implClassName()); + final List<String> implDocs = cfg.javadocForClass(cfg.implClassName()); CodeGenUtils.EmissionCallback docEmitter = new CodeGenUtils.EmissionCallback() { public void emit(PrintWriter w) { @@ -1618,7 +1600,7 @@ public class JavaEmitter implements GlueEmitter { }; String[] interfaces; - List userSpecifiedInterfaces = null; + List<String> userSpecifiedInterfaces = null; userSpecifiedInterfaces = cfg.implementedInterfaces(cfg.implClassName()); int additionalNum = 0; if (cfg.className() != null) { @@ -1643,7 +1625,7 @@ public class JavaEmitter implements GlueEmitter { cfg.implClassName(), cfg.gluegenRuntimePackage(), true, - (String[]) cfg.imports().toArray(new String[] {}), + cfg.imports().toArray(new String[] {}), accessModifiers, interfaces, cfg.extendedParentClass(cfg.implClassName()), @@ -1651,8 +1633,7 @@ public class JavaEmitter implements GlueEmitter { } if (cfg.emitImpl()) { - PrintWriter cWriter = cWriter(); - emitCHeader(cWriter, cfg.implClassName()); + emitCHeader(cWriter(), cfg.implClassName()); } } catch (Exception e) { throw new RuntimeException( @@ -1673,8 +1654,8 @@ public class JavaEmitter implements GlueEmitter { cWriter.println(); } - for (Iterator iter = cfg.customCCode().iterator(); iter.hasNext(); ) { - cWriter.println((String) iter.next()); + for (String code : cfg.customCCode()) { + cWriter.println(code); } cWriter.println(); } @@ -1688,14 +1669,13 @@ public class JavaEmitter implements GlueEmitter { javaWriter().println(); javaWriter().println("} // end of class " + cfg.className()); } - if (!cfg.allStatic() && cfg.emitImpl()) - { + if (!cfg.allStatic() && cfg.emitImpl()) { javaImplWriter().println(); javaImplWriter().println("} // end of class " + cfg.implClassName()); } } - private JavaType javaType(Class c) { + private JavaType javaType(Class<?> c) { return JavaType.createForClass(c); } @@ -1730,7 +1710,7 @@ public class JavaEmitter implements GlueEmitter { // List of the indices of the arguments in this function that should be // converted from byte[] or short[] to String - List stringArgIndices = cfg.stringArguments(binding.getName()); + List<Integer> stringArgIndices = cfg.stringArguments(binding.getName()); for (int i = 0; i < sym.getNumArguments(); i++) { Type cArgType = sym.getArgumentType(i); @@ -1739,7 +1719,7 @@ public class JavaEmitter implements GlueEmitter { //System.out.println(" Java -> \"" + mappedType + "\"" ); // Take into account any ArgumentIsString configuration directives that apply - if (stringArgIndices != null && stringArgIndices.contains(new Integer(i))) { + if (stringArgIndices != null && stringArgIndices.contains(i)) { //System.out.println("Forcing conversion of " + binding.getName() + " arg #" + i + " from byte[] to String "); if (mappedType.isCVoidPointerType() || mappedType.isCCharPointerType() || @@ -1864,8 +1844,8 @@ public class JavaEmitter implements GlueEmitter { // Expands a MethodBinding containing C primitive pointer types into // multiple variants taking Java primitive arrays and NIO buffers, subject // to the per-function "NIO only" rule in the configuration file - protected List/*<MethodBinding>*/ expandMethodBinding(MethodBinding binding) { - List result = new ArrayList(); + protected List<MethodBinding> expandMethodBinding(MethodBinding binding) { + List<MethodBinding> result = new ArrayList<MethodBinding>(); // Indicates whether it is possible to produce an array variant // Prevents e.g. char* -> String conversions from emitting two entry points boolean[] canProduceArrayVariant = new boolean[1]; @@ -1895,7 +1875,7 @@ public class JavaEmitter implements GlueEmitter { } private Type canonicalize(Type t) { - Type res = (Type) canonMap.get(t); + Type res = canonMap.get(t); if (res != null) { return res; } diff --git a/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java b/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java index 558c184..bf9d3ae 100644 --- a/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java +++ b/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java @@ -60,8 +60,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter public static final EmissionModifier SYNCHRONIZED = new EmissionModifier("synchronized"); protected final CommentEmitter defaultJavaCommentEmitter = new DefaultCommentEmitter(); - protected final CommentEmitter defaultInterfaceCommentEmitter = - new InterfaceCommentEmitter(); + protected final CommentEmitter defaultInterfaceCommentEmitter = new InterfaceCommentEmitter(); // Exception type raised in the generated code if runtime checks fail private String runtimeExceptionType; @@ -79,8 +78,8 @@ public class JavaMethodBindingEmitter extends FunctionEmitter protected MethodBinding binding; // Manually-specified prologue and epilogue code - protected List/*<String>*/ prologue; - protected List/*<String>*/ epilogue; + protected List<String> prologue; + protected List<String> epilogue; // A non-null value indicates that rather than returning a compound // type accessor we are returning an array of such accessors; this @@ -109,8 +108,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter boolean forIndirectBufferAndArrayImplementation, boolean isUnimplemented, boolean isInterface, - JavaConfiguration configuration) - { + JavaConfiguration configuration) { super(output, isInterface); this.binding = binding; this.runtimeExceptionType = runtimeExceptionType; @@ -187,12 +185,12 @@ public class JavaMethodBindingEmitter extends FunctionEmitter } /** Sets the manually-generated prologue code for this emitter. */ - public void setPrologue(List/*<String>*/ prologue) { + public void setPrologue(List<String> prologue) { this.prologue = prologue; } /** Sets the manually-generated epilogue code for this emitter. */ - public void setEpilogue(List/*<String>*/ epilogue) { + public void setEpilogue(List<String> epilogue) { this.epilogue = epilogue; } @@ -228,8 +226,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter this.forIndirectBufferAndArrayImplementation = indirect; } - protected void emitReturnType(PrintWriter writer) - { + protected void emitReturnType(PrintWriter writer) { writer.print(getReturnTypeString(false)); } @@ -294,8 +291,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter return erasedTypeString(binding.getJavaReturnType(), true) + "[]"; } - protected void emitName(PrintWriter writer) - { + protected void emitName(PrintWriter writer) { if (forImplementingMethodCall) { if (forIndirectBufferAndArrayImplementation) { writer.print(getImplMethodName(false)); @@ -307,8 +303,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter } } - protected int emitArguments(PrintWriter writer) - { + protected int emitArguments(PrintWriter writer) { boolean needComma = false; int numEmitted = 0; @@ -392,31 +387,29 @@ public class JavaMethodBindingEmitter extends FunctionEmitter return getArgumentName(i) + "_offset"; } - protected void emitBody(PrintWriter writer) - { + protected void emitBody(PrintWriter writer) { if (!emitBody) { writer.println(';'); } else { - MethodBinding binding = getBinding(); + MethodBinding mBinding = getBinding(); writer.println(); writer.println(" {"); if (isUnimplemented) { writer.println(" throw new " + getUnsupportedExceptionType() + "(\"Unimplemented\");"); } else { emitPrologueOrEpilogue(prologue, writer); - emitPreCallSetup(binding, writer); + emitPreCallSetup(mBinding, writer); //emitReturnVariableSetup(binding, writer); - emitReturnVariableSetupAndCall(binding, writer); + emitReturnVariableSetupAndCall(mBinding, writer); } writer.println(" }"); } } - protected void emitPrologueOrEpilogue(List/*<String>*/ code, PrintWriter writer) { + protected void emitPrologueOrEpilogue(List<String> code, PrintWriter writer) { if (code != null) { String[] argumentNames = argumentNameArray(); - for (Iterator iter = code.iterator(); iter.hasNext(); ) { - String str = (String) iter.next(); + for (String str : code) { try { MessageFormat fmt = new MessageFormat(str); writer.println(" " + fmt.format(argumentNames)); @@ -434,7 +427,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter } protected void emitArrayLengthAndNIOBufferChecks(MethodBinding binding, PrintWriter writer) { - int numBufferOffsetArrayArgs = 0; + boolean firstBuffer = true; // Check lengths of any incoming arrays if necessary for (int i = 0; i < binding.getNumArguments(); i++) { @@ -799,8 +792,10 @@ public class JavaMethodBindingEmitter extends FunctionEmitter return "jthis0"; } + @Override protected String getCommentStartString() { return "/** "; } + @Override protected String getBaseIndentString() { return " "; } protected String getReturnedArrayLengthExpression() { @@ -838,7 +833,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter // don't emit param comments for anonymous enums, since we can't // distinguish between the values found within multiple anonymous // enums in the same C translation unit. - if (type.isEnum() && type.getName() != HeaderParser.ANONYMOUS_ENUM_NAME) { + if (type.isEnum() && !HeaderParser.ANONYMOUS_ENUM_NAME.equals(type.getName())) { EnumType enumType = (EnumType)type; writer.println(); writer.print(emitter.getBaseIndentString()); @@ -863,13 +858,13 @@ public class JavaMethodBindingEmitter extends FunctionEmitter } } - protected class InterfaceCommentEmitter - extends JavaMethodBindingEmitter.DefaultCommentEmitter - { - protected void emitBeginning(FunctionEmitter emitter, - PrintWriter writer) { - writer.print("Interface to C language function: <br> "); + protected class InterfaceCommentEmitter extends JavaMethodBindingEmitter.DefaultCommentEmitter { + + @Override + protected void emitBeginning(FunctionEmitter emitter, + PrintWriter writer) { + writer.print("Interface to C language function: <br> "); + } } - } } diff --git a/src/java/com/sun/gluegen/JavaType.java b/src/java/com/sun/gluegen/JavaType.java index 3e9a399..30f30a2 100644 --- a/src/java/com/sun/gluegen/JavaType.java +++ b/src/java/com/sun/gluegen/JavaType.java @@ -57,7 +57,7 @@ public class JavaType { private static final int PTR_C_FLOAT = 6; private static final int PTR_C_DOUBLE = 7; - private Class clazz; // Primitive types and other types representable as Class objects + private Class<?> clazz; // Primitive types and other types representable as Class objects private String name; // Types we're generating glue code for (i.e., C structs) private Type elementType; // Element type if this JavaType represents a C array private int primitivePointerType; // Represents C arrays that @@ -75,6 +75,7 @@ public class JavaType { private static JavaType nioDoubleBufferType; private static JavaType nioByteBufferArrayType; + @Override public boolean equals(Object arg) { if ((arg == null) || (!(arg instanceof JavaType))) { return false; @@ -82,13 +83,14 @@ public class JavaType { JavaType t = (JavaType) arg; return (this == t || (t.clazz == clazz && - ((name == t.name) || + ((name == null ? t.name == null : name.equals(t.name)) || ((name != null) && (t.name != null) && (name.equals(t.name)))) && ((elementType == t.elementType) || (elementType != null) && (t.elementType != null) && (elementType.equals(t.elementType))) && (primitivePointerType == t.primitivePointerType))); } + @Override public int hashCode() { if (clazz == null) { if (name == null) { @@ -107,7 +109,7 @@ public class JavaType { can be used to represent arrays of primitive values or Strings; the emitters understand how to perform proper conversion from the corresponding C type. */ - public static JavaType createForClass(Class clazz) { + public static JavaType createForClass(Class<?> clazz) { return new JavaType(clazz); } @@ -225,7 +227,7 @@ public class JavaType { * Returns the Java Class corresponding to this type. Returns null if this * object corresponds to a C primitive array type. */ - public Class getJavaClass() { + public Class<?> getJavaClass() { return clazz; } @@ -301,7 +303,7 @@ public class JavaType { return "jobjectArray /*elements are String*/"; } - Class elementType = clazz.getComponentType(); + Class<?> elementType = clazz.getComponentType(); if (isNIOBufferArray()) { return "jobjectArray /*elements are " + elementType.getName() + "*/"; @@ -471,9 +473,10 @@ public class JavaType { } public boolean isJNIEnv() { - return clazz == null && name == "JNIEnv"; + return clazz == null && "JNIEnv".equals(name); } + @Override public Object clone() { JavaType clone = new JavaType(primitivePointerType); @@ -484,6 +487,7 @@ public class JavaType { return clone; } + @Override public String toString() { return getName(); } @@ -504,7 +508,7 @@ public class JavaType { * Constructs a representation for a type corresponding to the given Class * argument. */ - private JavaType(Class clazz) { + private JavaType(Class<?> clazz) { this.clazz = clazz; } @@ -524,7 +528,7 @@ public class JavaType { this.primitivePointerType = primitivePointerType; } - private String arrayName(Class clazz) { + private String arrayName(Class<?> clazz) { StringBuffer buf = new StringBuffer(); int arrayCount = 0; while (clazz.isArray()) { @@ -538,7 +542,7 @@ public class JavaType { return buf.toString(); } - private String arrayDescriptor(Class clazz) { + private String arrayDescriptor(Class<?> clazz) { StringBuffer buf = new StringBuffer(); int arrayCount = 0; while (clazz.isArray()) { @@ -549,7 +553,7 @@ public class JavaType { return buf.toString(); } - private String descriptor(Class clazz) { + private String descriptor(Class<?> clazz) { if (clazz.isPrimitive()) { if (clazz == Boolean.TYPE) return "Z"; if (clazz == Byte.TYPE) return "B"; diff --git a/src/java/com/sun/gluegen/MethodBinding.java b/src/java/com/sun/gluegen/MethodBinding.java index 228f581..dae381b 100644 --- a/src/java/com/sun/gluegen/MethodBinding.java +++ b/src/java/com/sun/gluegen/MethodBinding.java @@ -51,9 +51,9 @@ public class MethodBinding { private FunctionSymbol sym; private String renamedMethodName; - private HashSet aliasedNames; + private HashSet<String> aliasedNames; private JavaType javaReturnType; - private List javaArgumentTypes; + private List<JavaType> javaArgumentTypes; private boolean computedSignatureProperties; private boolean argumentsUseNIO; private boolean signatureUsesNIO; @@ -77,12 +77,11 @@ public class MethodBinding { this.sym = bindingToCopy.sym; this.renamedMethodName = bindingToCopy.renamedMethodName; - this.aliasedNames=new HashSet(); - this.aliasedNames.addAll(bindingToCopy.aliasedNames); + this.aliasedNames = new HashSet<String>(bindingToCopy.aliasedNames); this.containingType = bindingToCopy.containingType; this.containingCType = bindingToCopy.containingCType; this.javaReturnType = bindingToCopy.javaReturnType; - this.javaArgumentTypes = (List)((ArrayList)bindingToCopy.javaArgumentTypes).clone(); + this.javaArgumentTypes = new ArrayList<JavaType>(bindingToCopy.javaArgumentTypes); this.computedSignatureProperties = bindingToCopy.computedSignatureProperties; this.argumentsUseNIO = bindingToCopy.argumentsUseNIO; this.signatureUsesNIO = bindingToCopy.signatureUsesNIO; @@ -99,7 +98,7 @@ public class MethodBinding { /** Constructor for calling a C function. */ public MethodBinding(FunctionSymbol sym) { this.sym = sym; - this.aliasedNames=new HashSet(); + this.aliasedNames = new HashSet<String>(); } /** Constructor for calling a function pointer contained in a @@ -108,92 +107,92 @@ public class MethodBinding { this.sym = sym; this.containingType = containingType; this.containingCType = containingCType; - this.aliasedNames=new HashSet(); + this.aliasedNames = new HashSet<String>(); } - public void setJavaReturnType(JavaType type) { - javaReturnType = type; - computedSignatureProperties = false; - } + public void setJavaReturnType(JavaType type) { + javaReturnType = type; + computedSignatureProperties = false; + } - public void addJavaArgumentType(JavaType type) { - if (javaArgumentTypes == null) { - javaArgumentTypes = new ArrayList(); + public void addJavaArgumentType(JavaType type) { + if (javaArgumentTypes == null) { + javaArgumentTypes = new ArrayList<JavaType>(); + } + javaArgumentTypes.add(type); + computedSignatureProperties = false; } - javaArgumentTypes.add(type); - computedSignatureProperties = false; - } - public JavaType getJavaReturnType() { - return javaReturnType; - } + public JavaType getJavaReturnType() { + return javaReturnType; + } - public int getNumArguments() { - return sym.getNumArguments(); - } + public int getNumArguments() { + return sym.getNumArguments(); + } - public JavaType getJavaArgumentType(int i) { - return (JavaType) javaArgumentTypes.get(i); - } + public JavaType getJavaArgumentType(int i) { + return javaArgumentTypes.get(i); + } - public Type getCReturnType() { - return sym.getReturnType(); - } + public Type getCReturnType() { + return sym.getReturnType(); + } - public Type getCArgumentType(int i) { - return sym.getArgumentType(i); - } + public Type getCArgumentType(int i) { + return sym.getArgumentType(i); + } - public FunctionSymbol getCSymbol() { - return sym; - } + public FunctionSymbol getCSymbol() { + return sym; + } - /** Returns either the argument name specified by the underlying - FunctionSymbol or a fabricated argument name based on the - position. Note that it is currently not guaranteed that there - are no namespace clashes with these fabricated argument - names. */ - public String getArgumentName(int i) { - String ret = sym.getArgumentName(i); - if (ret != null) { - return ret; - } - return "arg" + i; - } + /** Returns either the argument name specified by the underlying + FunctionSymbol or a fabricated argument name based on the + position. Note that it is currently not guaranteed that there + are no namespace clashes with these fabricated argument + names. */ + public String getArgumentName(int i) { + String ret = sym.getArgumentName(i); + if (ret != null) { + return ret; + } + return "arg" + i; + } - public String getOrigName() { - return sym.getName(); - } + public String getOrigName() { + return sym.getName(); + } - public String getName() { - // Defaults to same as C symbol unless renamed - if (renamedMethodName != null) { - return renamedMethodName; + public String getName() { + // Defaults to same as C symbol unless renamed + if (renamedMethodName != null) { + return renamedMethodName; + } + return sym.getName(); } - return sym.getName(); - } - /** Supports renaming C function in Java binding. */ - public void renameMethodName(String name) { - if(null!=name) { - renamedMethodName = name; - aliasedNames.add(sym.getName()); + /** Supports renaming C function in Java binding. */ + public void renameMethodName(String name) { + if (null != name) { + renamedMethodName = name; + aliasedNames.add(sym.getName()); + } } - } - public void addAliasedName(String name) { - aliasedNames.add(name); - } + public void addAliasedName(String name) { + aliasedNames.add(name); + } - public Collection getAliasedNames() { - return aliasedNames; - } + public Collection<String> getAliasedNames() { + return aliasedNames; + } /** Creates a new MethodBinding replacing the specified Java argument type with a new argument type. If argumentNumber is less than 0 then replaces the return type. */ - public MethodBinding replaceJavaArgumentType(int argumentNumber, - JavaType newArgType) { + public MethodBinding replaceJavaArgumentType(int argumentNumber, JavaType newArgType) { + MethodBinding binding = (MethodBinding) clone(); binding.javaArgumentTypes = null; if (argumentNumber < 0) { @@ -457,6 +456,7 @@ public class MethodBinding { public boolean isArgumentThisPointer(int i) { return (thisPointerIndex == i); } + @Override public boolean equals(Object obj) { if (obj == this) { return true; @@ -490,6 +490,7 @@ public class MethodBinding { return true; } + @Override public int hashCode() { StringBuffer buf = new StringBuffer(200); buf.append(getName()); @@ -514,6 +515,7 @@ public class MethodBinding { } /** Returns the signature of this binding. */ + @Override public String toString() { StringBuffer buf = new StringBuffer(200); buf.append(getJavaReturnType().getName()); @@ -547,6 +549,7 @@ public class MethodBinding { return buf.toString(); } + @Override public final Object clone() { return new MethodBinding(this); } diff --git a/src/java/com/sun/gluegen/ReferencedStructs.java b/src/java/com/sun/gluegen/ReferencedStructs.java index 6c0dfb4..21d1142 100644 --- a/src/java/com/sun/gluegen/ReferencedStructs.java +++ b/src/java/com/sun/gluegen/ReferencedStructs.java @@ -43,13 +43,14 @@ import java.util.*; import com.sun.gluegen.cgram.types.*; public class ReferencedStructs implements TypeVisitor { - private Set results = new HashSet(); + + private final Set<Type> results = new HashSet<Type>(); public void clear() { results.clear(); } - public Iterator results() { + public Iterator<Type> results() { return results.iterator(); } diff --git a/src/java/com/sun/gluegen/SymbolFilter.java b/src/java/com/sun/gluegen/SymbolFilter.java index 1cc31aa..dcac628 100644 --- a/src/java/com/sun/gluegen/SymbolFilter.java +++ b/src/java/com/sun/gluegen/SymbolFilter.java @@ -33,6 +33,7 @@ package com.sun.gluegen; +import com.sun.gluegen.cgram.types.FunctionSymbol; import java.util.List; /** Provides a mechanism by which the GlueEmitter can look at all of @@ -49,16 +50,15 @@ public interface SymbolFilter { * @param defines a list of {@link com.sun.gluegen.cgram.Define Define} objects * @param functions a list of {@link com.sun.gluegen.cgram.types.FunctionSymbol FunctionSymbol} objects */ - public void filterSymbols(List/*<ConstantDefinition>*/ constants, - List/*<FunctionSymbol>*/ functions); + public void filterSymbols(List<ConstantDefinition> constants, List<FunctionSymbol> functions); /** Returns the filtered list of constants. This method may return a new list, the original list, or null, in which case the original list will be used. */ - public List/*<ConstantDefinition>*/ getConstants(); + public List<ConstantDefinition> getConstants(); /** Returns the filtered list of function symbols. This method may return a new list, the original list, or null, in which case the original list will be used. */ - public List/*<FunctionSymbol>*/ getFunctions(); + public List<FunctionSymbol> getFunctions(); } diff --git a/src/java/com/sun/gluegen/TypeInfo.java b/src/java/com/sun/gluegen/TypeInfo.java index 8f21c9f..4a626bc 100644 --- a/src/java/com/sun/gluegen/TypeInfo.java +++ b/src/java/com/sun/gluegen/TypeInfo.java @@ -59,6 +59,7 @@ public class TypeInfo { public void setNext(TypeInfo info) { this.next = info; } public TypeInfo next() { return next; } + @Override public String toString() { StringBuffer buf = new StringBuffer("TypeInfo: "); buf.append(name); diff --git a/src/java/com/sun/gluegen/cgram/types/TypeDictionary.java b/src/java/com/sun/gluegen/cgram/types/TypeDictionary.java index 5c74455..256b5ce 100644 --- a/src/java/com/sun/gluegen/cgram/types/TypeDictionary.java +++ b/src/java/com/sun/gluegen/cgram/types/TypeDictionary.java @@ -45,10 +45,10 @@ import java.util.*; public class TypeDictionary { /** Mapping from type name to type.*/ - private HashMap/*<String, Type>*/ map = new HashMap/*<String, Type>*/(); + private HashMap<String, Type> map = new HashMap<String, Type>(); /** Reverse mapping; created lazily from the regular map */ - private HashMap/*<Set<Type>, String>*/ reverseMap = new HashMap/*<Set<Type>, String>*/(); + private HashMap<Set<Type>, String> reverseMap = new HashMap<Set<Type>, String>(); /** Has a type been added/removed since the last time the reverse map was * calculated? */ @@ -61,43 +61,44 @@ public class TypeDictionary { */ public Type put(String name, Type type) { reverseMapOutOfDate = true; - return (Type) map.put(name, type); + return map.put(name, type); } /** Get the type corresponding to the given name. Returns null if no type * was found corresponding to the given name. */ public Type get(String name) { - return (Type) map.get(name); + return map.get(name); } + //this method is broken /** * Get the names that correspond to the given type. There will be more than * one name in the returned list if the type has been defined to multiple * names. Returns null if no names were found for given type. */ - public Set/*<String>*/ get(Type type) { - if (reverseMapOutOfDate) { - rebuildReverseMap(); - reverseMapOutOfDate = false; - } - // Don't let callers muck with the set. - return Collections.unmodifiableSet((Set)reverseMap.get(type)); - } +// public Set/*<String>*/ get(Type type) { +// if (reverseMapOutOfDate) { +// rebuildReverseMap(); +// reverseMapOutOfDate = false; +// } +// // Don't let callers muck with the set. +// return Collections.unmodifiableSet((Set)reverseMap.get(type)); +// } /** Remove the mapping from the specified name to its associated type.*/ public Type remove(String name) { reverseMapOutOfDate = true; - return (Type) map.remove(name); + return map.remove(name); } /** Get all the names that map to Types. * @return a Set of Strings that are the typedef names that map to Types in the dictionary. */ - public Set keySet() { + public Set<String> keySet() { return map.keySet(); } - public Set entrySet() { + public Set<Map.Entry<String, Type>> entrySet() { return map.entrySet(); } @@ -114,16 +115,17 @@ public class TypeDictionary { } /** Returns a collection of all the Types in the dictionary that are mapped via typedefs names. */ - public Collection values() { + public Collection<Type> values() { return map.values(); } /** Build the mapping of from each Type to all the names by which is may be * referenced. Warning: this is a slow operation! - */ + */ + /* private void rebuildReverseMap() { reverseMap.clear(); - for (Iterator/*<String>*/ it = map.keySet().iterator(); it.hasNext(); ) { + for (Iterator<String> it = map.keySet().iterator(); it.hasNext(); ) { String name = (String)it.next(); Type type = (Type)map.get(name); if (type == null) { @@ -131,17 +133,18 @@ public class TypeDictionary { } HashSet allNamesForType = (HashSet)reverseMap.get(type); if (allNamesForType == null) { - allNamesForType = new HashSet/*<String>*/(); + allNamesForType = new HashSet<String>(); reverseMap.put(type, allNamesForType); } allNamesForType.add(name); } } - +*/ /** * Dumps the dictionary contents to the specified output stream, annotated * with the specified description. Useful for debugging. */ + /* public void dumpDictionary(java.io.PrintStream out, String description) { out.println("------------------------------------------------------------------------------"); out.println("TypeDictionary: " + (description == null ? "" : description)); @@ -166,4 +169,5 @@ public class TypeDictionary { } out.println("------------------------------------------------------------------------------"); } + */ } |