Author: limpbizkit
Date: Mon May 18 17:40:02 2009
New Revision: 960
Modified:
trunk/src/com/google/inject/Key.java
trunk/src/com/google/inject/spi/Dependency.java
trunk/src/com/google/inject/spi/InjectionPoint.java
trunk/src/com/google/inject/spi/Message.java
trunk/test/com/google/inject/KeyTest.java
trunk/test/com/google/inject/ProvisionExceptionTest.java
Log:
Stripping serializability from Key, InjectionPoint and Dependency for the
release.
Modified: trunk/src/com/google/inject/Key.java
==============================================================================
--- trunk/src/com/google/inject/Key.java (original)
+++ trunk/src/com/google/inject/Key.java Mon May 18 17:40:02 2009
@@ -21,9 +21,6 @@
import static com.google.inject.internal.Preconditions.checkArgument;
import static com.google.inject.internal.Preconditions.checkNotNull;
import com.google.inject.internal.ToStringBuilder;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
@@ -50,7 +47,7 @@
*
* @author [email protected] (Bob Lee)
*/
-public class Key<T> implements Serializable {
+public class Key<T> {
private final AnnotationStrategy annotationStrategy;
@@ -318,8 +315,7 @@
return new Key<T>(typeLiteral, annotationStrategy.withoutAttributes());
}
- interface AnnotationStrategy extends Serializable {
-
+ interface AnnotationStrategy {
Annotation getAnnotation();
Class<? extends Annotation> getAnnotationType();
boolean hasAttributes();
@@ -438,8 +434,6 @@
@Override public String toString() {
return annotation.toString();
}
-
- private static final long serialVersionUID = 0;
}
static class AnnotationTypeStrategy implements AnnotationStrategy {
@@ -487,8 +481,6 @@
@Override public String toString() {
return "@" + annotationType.getName();
}
-
- private static final long serialVersionUID = 0;
}
static boolean isBindingAnnotation(Annotation annotation) {
@@ -498,38 +490,5 @@
static boolean isBindingAnnotation(
Class<? extends Annotation> annotationType) {
return annotationType.isAnnotationPresent(BindingAnnotation.class);
- }
-
- /**
- * Serializes the key without its type literal, annotation strategy, or
- * hash code.
- */
- private static class SerializedForm implements Serializable {
- final Type type;
- final Class<? extends Annotation> annotationType;
- final Annotation annotationInstance;
-
- SerializedForm(Key<?> key) {
- this.type = key.getTypeLiteral().getType();
- this.annotationType = key.getAnnotationType();
- this.annotationInstance = key.getAnnotation();
- }
-
- final Object readResolve() {
- return annotationInstance != null ? Key.get(type, annotationInstance)
- : annotationType != null ? Key.get(type, annotationType)
- : Key.get(type);
- }
-
- private static final long serialVersionUID = 0;
- }
-
- private void readObject(ObjectInputStream stream) throws
InvalidObjectException {
- throw new InvalidObjectException("Use SerializedForm");
- }
-
- /** @since 2.0 */
- protected final Object writeReplace() {
- return new SerializedForm(this);
}
}
Modified: trunk/src/com/google/inject/spi/Dependency.java
==============================================================================
--- trunk/src/com/google/inject/spi/Dependency.java (original)
+++ trunk/src/com/google/inject/spi/Dependency.java Mon May 18 17:40:02 2009
@@ -20,7 +20,6 @@
import com.google.inject.internal.ImmutableSet;
import com.google.inject.internal.Lists;
import com.google.inject.internal.Objects;
-import java.io.Serializable;
import java.util.List;
import java.util.Set;
@@ -34,7 +33,7 @@
* @author [email protected] (Jesse Wilson)
* @since 2.0
*/
-public final class Dependency<T> implements Serializable {
+public final class Dependency<T> {
private final InjectionPoint injectionPoint;
private final Key<T> key;
private final boolean nullable;
@@ -124,6 +123,4 @@
}
return builder.toString();
}
-
- private static final long serialVersionUID = 0;
}
Modified: trunk/src/com/google/inject/spi/InjectionPoint.java
==============================================================================
--- trunk/src/com/google/inject/spi/InjectionPoint.java (original)
+++ trunk/src/com/google/inject/spi/InjectionPoint.java Mon May 18 17:40:02
2009
@@ -29,8 +29,6 @@
import com.google.inject.internal.MoreTypes;
import static com.google.inject.internal.MoreTypes.getRawType;
import com.google.inject.internal.Nullability;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Constructor;
@@ -52,7 +50,7 @@
* @author [email protected] (Bob Lee)
* @since 2.0
*/
-public final class InjectionPoint implements Serializable {
+public final class InjectionPoint {
private final boolean optional;
private final Member member;
@@ -170,11 +168,6 @@
return MoreTypes.toString(member);
}
- private Object writeReplace() throws ObjectStreamException {
- Member serializableMember = member != null ?
MoreTypes.serializableCopy(member) : null;
- return new InjectionPoint(serializableMember, dependencies, optional);
- }
-
/**
* Returns a new injection point for the injectable constructor of
{...@code type}.
*
@@ -410,6 +403,4 @@
M[] getMembers(Class<?> type);
InjectionPoint create(TypeLiteral<?> typeLiteral, M member, Errors
errors);
}
-
- private static final long serialVersionUID = 0;
}
Modified: trunk/src/com/google/inject/spi/Message.java
==============================================================================
--- trunk/src/com/google/inject/spi/Message.java (original)
+++ trunk/src/com/google/inject/spi/Message.java Mon May 18 17:40:02 2009
@@ -16,12 +16,13 @@
package com.google.inject.spi;
+import com.google.inject.Binder;
import com.google.inject.internal.Errors;
import com.google.inject.internal.ImmutableList;
import com.google.inject.internal.Objects;
import static com.google.inject.internal.Preconditions.checkNotNull;
import com.google.inject.internal.SourceProvider;
-import com.google.inject.Binder;
+import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.List;
@@ -113,4 +114,18 @@
public void applyTo(Binder binder) {
binder.withSource(getSource()).addError(this);
}
+
+ /**
+ * When serialized, we eagerly convert sources to strings. This hurts
our formatting, but it
+ * guarantees that the receiving end will be able to read the message.
+ */
+ private Object writeReplace() throws ObjectStreamException {
+ Object[] sourcesAsStrings = sources.toArray();
+ for (int i = 0; i < sourcesAsStrings.length; i++) {
+ sourcesAsStrings[i] = Errors.convert(sourcesAsStrings[i]).toString();
+ }
+ return new Message(ImmutableList.of(sourcesAsStrings), message, cause);
+ }
+
+ private static final long serialVersionUID = 0;
}
Modified: trunk/test/com/google/inject/KeyTest.java
==============================================================================
--- trunk/test/com/google/inject/KeyTest.java (original)
+++ trunk/test/com/google/inject/KeyTest.java Mon May 18 17:40:02 2009
@@ -17,8 +17,8 @@
package com.google.inject;
import static com.google.inject.Asserts.assertContains;
-import static com.google.inject.Asserts.assertEqualWhenReserialized;
import static com.google.inject.Asserts.assertEqualsBothWays;
+import static com.google.inject.Asserts.assertNotSerializable;
import com.google.inject.name.Named;
import com.google.inject.name.Names;
import com.google.inject.util.Types;
@@ -125,14 +125,13 @@
}
public void testSerialization() throws IOException, NoSuchFieldException
{
- assertEqualWhenReserialized(Key.get(B.class));
- assertEqualWhenReserialized(Key.get(B.class, Names.named("bee")));
- assertEqualWhenReserialized(Key.get(B.class, Named.class));
- assertEqualWhenReserialized(Key.get(B[].class));
- assertEqualWhenReserialized(Key.get(new TypeLiteral<Map<List<B>, B>>()
{}));
- assertEqualWhenReserialized(Key.get(new TypeLiteral<List<B[]>>() {}));
- assertEquals(new Key<List<B[]>>() {}, Asserts.reserialize(new
Key<List<B[]>>() {}));
-
assertEqualWhenReserialized(Key.get(Types.listOf(Types.subtypeOf(CharSequence.class))));
+ assertNotSerializable(Key.get(B.class));
+ assertNotSerializable(Key.get(B.class, Names.named("bee")));
+ assertNotSerializable(Key.get(B.class, Named.class));
+ assertNotSerializable(Key.get(B[].class));
+ assertNotSerializable(Key.get(new TypeLiteral<Map<List<B>, B>>() {}));
+ assertNotSerializable(Key.get(new TypeLiteral<List<B[]>>() {}));
+
assertNotSerializable(Key.get(Types.listOf(Types.subtypeOf(CharSequence.class))));
}
public void testEqualityOfAnnotationTypesAndInstances() throws
NoSuchFieldException {
Modified: trunk/test/com/google/inject/ProvisionExceptionTest.java
==============================================================================
--- trunk/test/com/google/inject/ProvisionExceptionTest.java (original)
+++ trunk/test/com/google/inject/ProvisionExceptionTest.java Mon May 18
17:40:02 2009
@@ -17,7 +17,7 @@
package com.google.inject;
import static com.google.inject.Asserts.assertContains;
-import static com.google.inject.Asserts.assertSimilarWhenReserialized;
+import static com.google.inject.Asserts.reserialize;
import java.io.IOException;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
@@ -143,7 +143,17 @@
Guice.createInjector().getInstance(A.class);
fail();
} catch (ProvisionException expected) {
- assertSimilarWhenReserialized(expected);
+ ProvisionException reserialized = reserialize(expected);
+ assertContains(reserialized.getMessage(),
+ "1) Error injecting constructor,
java.lang.UnsupportedOperationException",
+ "at com.google.inject.ProvisionExceptionTest$RealD.<init>()",
+ "at Key[type=com.google.inject.ProvisionExceptionTest$RealD,
annotation=[none]]",
+ "@com.google.inject.ProvisionExceptionTest$C.setD()[0]",
+ "at Key[type=com.google.inject.ProvisionExceptionTest$C,
annotation=[none]]",
+ "@com.google.inject.ProvisionExceptionTest$B.c",
+ "at Key[type=com.google.inject.ProvisionExceptionTest$B,
annotation=[none]]",
+ "@com.google.inject.ProvisionExceptionTest$A.<init>()[0]",
+ "at Key[type=com.google.inject.ProvisionExceptionTest$A,
annotation=[none]]");
}
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"google-guice-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/google-guice-dev?hl=en
-~----------~----~----~----~------~----~------~--~---