Bug: org.eclipse.equinox.http.servlet.internal.context.ProxyContext$ContextAttributes
is serializable but also an inner class of a non-serializable class

This Serializable class is an inner class of a non-serializable class.
Thus, attempts to serialize it will also attempt to associate instance
of the outer class with which it is associated, leading to a runtime
error.

If possible, making the inner class a static inner class should solve
the problem. Making the outer class serializable might also work, but
that would mean serializing an instance of the inner class would always
also serialize the instance of the outer class, which it often not what
you really want.

Rank: Troubling (14), confidence: High
Pattern: SE_BAD_FIELD_INNER_CLASS
Type: Se, Category: BAD_PRACTICE (Bad practice)

Change-Id: I06c93020982fd2a593189bb5650e2734410c0134
Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
diff --git a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ProxyContext.java b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ProxyContext.java
index c668225..4c66f40 100644
--- a/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ProxyContext.java
+++ b/bundles/org.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/context/ProxyContext.java
@@ -67,7 +67,7 @@
 			ContextAttributes contextAttributes = attributesMap.get(controller);
 
 			if (contextAttributes == null) {
-				contextAttributes = new ContextAttributes(controller);
+				contextAttributes = new ContextAttributes(controller, proxyContextTempDir);
 
 				attributesMap.put(controller, contextAttributes);
 			}
@@ -122,13 +122,13 @@
 		return directory.delete();
 	}
 
-	public class ContextAttributes
+	public static class ContextAttributes
 		extends Dictionary<String, Object> implements Serializable {
 
 		private static final long serialVersionUID = 1916670423277243587L;
 		private final AtomicInteger referenceCount = new AtomicInteger();
 
-		public ContextAttributes(ContextController controller) {
+		public ContextAttributes(ContextController controller, File proxyContextTempDir) {
 			if (proxyContextTempDir != null) {
 				File contextTempDir = new File(
 					proxyContextTempDir,