[397904] Memory leaks in Juno when opening and closing XML Editor - Context Checker
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java
index 244dfd9..2e9a837 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextEditor.java
@@ -155,6 +155,7 @@
 import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds;
 import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
 import org.eclipse.ui.texteditor.TextOperationAction;
+import org.eclipse.ui.views.contentoutline.ContentOutline;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.wst.sse.core.StructuredModelManager;
@@ -2100,7 +2101,7 @@
 		}
 		// content outline page
 		else if (IContentOutlinePage.class.equals(required)) {
-			if (fOutlinePage == null) {
+			if (fOutlinePage == null && isCalledByOutline()) {
 				ContentOutlineConfiguration cfg = createContentOutlineConfiguration();
 				if (cfg != null) {
 					ConfigurableContentOutlinePage outlinePage = new ConfigurableContentOutlinePage();
@@ -3680,6 +3681,17 @@
 		}
 	}
 
+	private static boolean isCalledByOutline() {
+		Class[] elements= new AccessChecker().getClassContext();
+		return elements[4].equals(ContentOutline.class) || elements[5].equals(ContentOutline.class);
+	}
+
+	private static final class AccessChecker extends SecurityManager {
+		public Class[] getClassContext() {
+			return super.getClassContext();
+		}
+	}
+
 	private IInformationPresenter configureOutlinePresenter(ISourceViewer sourceViewer, SourceViewerConfiguration config) {
 		InformationPresenter presenter = null;