close Stream in finally block
git-svn-id: https://svn.apache.org/repos/asf/directmemory/lightning/trunk@1393789 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lightning-core/pom.xml b/lightning-core/pom.xml
index 201d456..f2fb156 100644
--- a/lightning-core/pom.xml
+++ b/lightning-core/pom.xml
@@ -38,6 +38,11 @@
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<scope>provided</scope>
diff --git a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
index b47a3d3..642e37e 100644
--- a/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
+++ b/lightning-core/src/main/java/org/apache/directmemory/lightning/internal/generator/BytecodeMarshallerGenerator.java
@@ -1,3 +1,5 @@
+package org.apache.directmemory.lightning.internal.generator;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -16,17 +18,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.directmemory.lightning.internal.generator;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
+import org.apache.commons.io.IOUtils;
import org.apache.directmemory.lightning.Marshaller;
import org.apache.directmemory.lightning.MarshallerStrategy;
import org.apache.directmemory.lightning.SerializationStrategy;
@@ -43,6 +36,15 @@
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
public class BytecodeMarshallerGenerator
implements Opcodes, GeneratorConstants, MarshallerGenerator
{
@@ -54,7 +56,8 @@
Map<Class<?>, Marshaller> marshallers,
ClassDescriptorAwareSerializer serializer,
SerializationStrategy serializationStrategy,
- ObjectInstantiatorFactory objectInstantiatorFactory, File debugCacheDirectory )
+ ObjectInstantiatorFactory objectInstantiatorFactory,
+ File debugCacheDirectory )
{
try
@@ -66,9 +69,9 @@
Collections.sort( propertyDescriptorsCopy );
// Build className e.g. "SomeTypeMarshaller$$X$$Lightning"
- String className =
- new StringBuilder( !type.isArray() ? type.getSimpleName() : type.getComponentType().getSimpleName()
- + "Array" ).append( "Marshaller" ).append( GENEREATED_CLASS_ID.getAndIncrement() ).append( "Lightning" ).toString();
+ String className = new StringBuilder(
+ !type.isArray() ? type.getSimpleName() : type.getComponentType().getSimpleName() + "Array" ).append(
+ "Marshaller" ).append( GENEREATED_CLASS_ID.getAndIncrement() ).append( "Lightning" ).toString();
// Build class
cw.visit( V1_6, ACC_PUBLIC & ACC_SUPER, className, null, SUPER_CLASS_INTERNAL_TYPE, null );
@@ -94,9 +97,15 @@
{
File file = new File( debugCacheDirectory, className + ".class" );
FileOutputStream out = new FileOutputStream( file );
- out.write( bytecode );
- out.flush();
- out.close();
+ try
+ {
+ out.write( bytecode );
+ out.flush();
+ }
+ finally
+ {
+ IOUtils.closeQuietly( out );
+ }
}
Class<? extends Marshaller> generatedClass = classloader.loadClass( bytecode );
@@ -110,8 +119,7 @@
}
catch ( Exception e )
{
- throw new SerializerMarshallerGeneratorException(
- "Marshaller for type " + type + " could not be generated",
+ throw new SerializerMarshallerGeneratorException( "Marshaller for type " + type + " could not be generated",
e );
}
}
@@ -124,31 +132,27 @@
FieldVisitor fv = null;
// Write PropertyDescriptor field
- fv =
- cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "descriptor", propertyDescriptor ),
- PROPERTYDESCRIPTOR_CLASS_DESCRIPTOR, null, null );
+ fv = cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "descriptor", propertyDescriptor ),
+ PROPERTYDESCRIPTOR_CLASS_DESCRIPTOR, null, null );
fv.visitEnd();
if ( propertyDescriptor.getType().isArray()
&& !propertyDescriptor.getType().getComponentType().isPrimitive() )
{
// Write ComponentType PropertyDescriptor field
- fv =
- cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "component", propertyDescriptor ),
- CHEATINGPROPERTYDESCRIPTOR_CLASS_DESCRIPTOR, null, null );
+ fv = cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "component", propertyDescriptor ),
+ CHEATINGPROPERTYDESCRIPTOR_CLASS_DESCRIPTOR, null, null );
fv.visitEnd();
}
// Write Marshaller field
- fv =
- cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "marshaller", propertyDescriptor ),
- MARSHALLER_CLASS_DESCRIPTOR, null, null );
+ fv = cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "marshaller", propertyDescriptor ),
+ MARSHALLER_CLASS_DESCRIPTOR, null, null );
fv.visitEnd();
// Write PropertyAccessor field
- fv =
- cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "accessor", propertyDescriptor ),
- PROPERTYACCESSOR_CLASS_DESCRIPTOR, null, null );
+ fv = cw.visitField( ACC_FINAL & ACC_PRIVATE, toFinalFieldName( "accessor", propertyDescriptor ),
+ PROPERTYACCESSOR_CLASS_DESCRIPTOR, null, null );
fv.visitEnd();
}
}
@@ -174,7 +178,8 @@
mv.visitVarInsn( ALOAD, 4 );
// Call super(Class, Map)
- mv.visitMethodInsn( INVOKESPECIAL, SUPER_CLASS_INTERNAL_TYPE, "<init>", MARSHALLER_SUPER_CONSTRUCTOR_SIGNATURE );
+ mv.visitMethodInsn( INVOKESPECIAL, SUPER_CLASS_INTERNAL_TYPE, "<init>",
+ MARSHALLER_SUPER_CONSTRUCTOR_SIGNATURE );
// Fill fields with marshallers
for ( int i = 0; i < propertyDescriptors.size(); i++ )
@@ -390,7 +395,8 @@
mv.visitVarInsn( ALOAD, 4 );
// Call Marshaller#marshall on properties marshaller
- mv.visitMethodInsn( INVOKEINTERFACE, MARSHALLER_CLASS_INTERNAL_TYPE, "marshall", MARSHALLER_MARSHALL_SIGNATURE );
+ mv.visitMethodInsn( INVOKEINTERFACE, MARSHALLER_CLASS_INTERNAL_TYPE, "marshall",
+ MARSHALLER_MARSHALL_SIGNATURE );
}
private void visitObjectArrayPropertyAccessorRead( MethodVisitor mv, String className,
@@ -475,7 +481,8 @@
mv.visitVarInsn( ALOAD, 4 );
// Call Marshaller#marshall on properties marshaller
- mv.visitMethodInsn( INVOKEINTERFACE, MARSHALLER_CLASS_INTERNAL_TYPE, "marshall", MARSHALLER_MARSHALL_SIGNATURE );
+ mv.visitMethodInsn( INVOKEINTERFACE, MARSHALLER_CLASS_INTERNAL_TYPE, "marshall",
+ MARSHALLER_MARSHALL_SIGNATURE );
// Test if loop ends
mv.visitIincInsn( 7, 1 );
@@ -884,7 +891,8 @@
private String toFinalFieldName( String prefix, PropertyDescriptor propertyDescriptor )
{
- return new StringBuilder( prefix.toUpperCase() ).append( "_" ).append( propertyDescriptor.getPropertyName().toUpperCase() ).append( "_LIGHTNING" ).toString();
+ return new StringBuilder( prefix.toUpperCase() ).append( "_" ).append(
+ propertyDescriptor.getPropertyName().toUpperCase() ).append( "_LIGHTNING" ).toString();
}
protected void visitSystemOutPrintln( MethodVisitor mv, int stackPosition )
diff --git a/pom.xml b/pom.xml
index fb57a99..9ce3731 100644
--- a/pom.xml
+++ b/pom.xml
@@ -200,6 +200,12 @@
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.4</version>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>2.0-alpha-1</version>