Test and fix for Bug 348146 - [compiler] NPE when compiling serializable team at compliance level 1.3
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SerializationGenerator.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SerializationGenerator.java
index 816f2fd..eae12cb 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SerializationGenerator.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/transformer/SerializationGenerator.java
@@ -115,9 +115,16 @@
// FIXME(SH): unclear if needed after allowing generated qualified role type referneces:
TypeReference cacheTypeRef = caches[i].type; // robustness, but with wrong source position
- if (! (caches[i].type.resolvedType instanceof ParameterizedTypeBinding)
- || ((ParameterizedTypeBinding)cacheTypeRef.resolvedType).arguments.length != 2)
+ if (! cacheTypeRef.resolvedType.isParameterizedType()
+ || ((ParameterizedTypeBinding)cacheTypeRef.resolvedType).arguments.length != 2)
+ {
+ if (teamType.scope.environment().globalOptions.complianceLevel < ClassFileConstants.JDK1_5) {
+ restoreMethod.statements = new Statement[] { gen.emptyStatement() };
+ restoreMethod.tagAsHavingErrors();
+ return; // incompatible compliance level, assume errors have been reported.
+ }
throw new InternalCompilerError("Unexpected resolved cache type "+cacheTypeRef.resolvedType); //$NON-NLS-1$
+ }
// reconstruct a type reference from the resolved cache type
ParameterizedTypeBinding oldBinding = (ParameterizedTypeBinding)cacheTypeRef.resolvedType;