diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextInvocationContext.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextInvocationContext.java
index d4dc09c..e428077 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextInvocationContext.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextInvocationContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2020 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@
  * Structured Text quick assist invocation context.
  */
 public final class StructuredTextInvocationContext extends TextInvocationContext {
-	private Map fAttributes;
+	private Map<String, String> fAttributes;
 
 	/**
 	 * @param sourceViewer
@@ -38,7 +38,7 @@
 	 * @param length
 	 * @param attributes
 	 */
-	public StructuredTextInvocationContext(ISourceViewer sourceViewer, int offset, int length, Map attributes) {
+	public StructuredTextInvocationContext(ISourceViewer sourceViewer, int offset, int length, Map<String, String> attributes) {
 		super(sourceViewer, offset, length);
 		fAttributes = attributes;
 	}
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java
index 4e8effe..779f90d 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/StructuredTextViewerConfiguration.java
@@ -178,7 +178,7 @@
 	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
 	 */
 	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
-		List allStrategies = new ArrayList(0);
+		List<IAutoEditStrategy> allStrategies = new ArrayList<>(0);
 
 		IAutoEditStrategy[] superStrategies = super.getAutoEditStrategies(sourceViewer, contentType);
 		for (int i = 0; i < superStrategies.length; i++) {
@@ -186,12 +186,12 @@
 		}
 
 		// add auto edit strategies contributed by clients
-		List extendedAutoEdits = ExtendedConfigurationBuilder.getInstance().getConfigurations(AUTOEDITSTRATEGY, contentType);
+		List<IAutoEditStrategy> extendedAutoEdits = ExtendedConfigurationBuilder.getInstance().getConfigurations(AUTOEDITSTRATEGY, contentType);
 		if (!extendedAutoEdits.isEmpty()) {
 			allStrategies.addAll(extendedAutoEdits);
 		}
 
-		return (IAutoEditStrategy[]) allStrategies.toArray(new IAutoEditStrategy[allStrategies.size()]);
+		return allStrategies.toArray(new IAutoEditStrategy[allStrategies.size()]);
 	}
 
 	/**
@@ -582,6 +582,7 @@
 	public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
 		if (fQuickAssistant == null) {
 			IQuickAssistAssistant assistant = new QuickAssistAssistant();
+
 			assistant.setQuickAssistProcessor(new CompoundQuickAssistProcessor());
 			assistant.setInformationControlCreator(getQuickAssistAssistantInformationControlCreator());
 
@@ -679,8 +680,8 @@
 	 * @return
 	 */
 	private ITextHover[] createDocumentationHovers(String partitionType) {
-		List extendedTextHover = ExtendedConfigurationBuilder.getInstance().getConfigurations(ExtendedConfigurationBuilder.DOCUMENTATIONTEXTHOVER, partitionType);
-		ITextHover[] hovers = (ITextHover[]) extendedTextHover.toArray(new ITextHover[extendedTextHover.size()]);
+		List<ITextHover> extendedTextHover = ExtendedConfigurationBuilder.getInstance().getConfigurations(ExtendedConfigurationBuilder.DOCUMENTATIONTEXTHOVER, partitionType);
+		ITextHover[] hovers = extendedTextHover.toArray(new ITextHover[extendedTextHover.size()]);
 		return hovers;
 	}
 
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/GenericCompletionProposalComputer.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/GenericCompletionProposalComputer.java
index 96816fc..ed93a2f 100755
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/GenericCompletionProposalComputer.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/contentassist/GenericCompletionProposalComputer.java
@@ -17,6 +17,12 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.filebuffers.FileBuffers;
+import org.eclipse.core.filebuffers.ITextFileBuffer;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.content.IContentType;
@@ -31,10 +37,10 @@
 import org.eclipse.wst.sse.ui.contentassist.ICompletionProposalComputer;
 import org.eclipse.wst.sse.ui.internal.Logger;
 
-public class GenericCompletionProposalComputer implements ICompletionProposalComputer {
+public class GenericCompletionProposalComputer implements ICompletionProposalComputer, IExecutableExtension {
 	List<IContentAssistProcessor> fContentAssistProcessors = null;
 	private String fLastErrorMessage;
-	private static final String fExampleFileName = "filename.html"; //$NON-NLS-1$
+	private String fDefaultFileName = "filename.html"; //$NON-NLS-1$
 
 	public void sessionEnded() {
 		fContentAssistProcessors = null;
@@ -52,10 +58,18 @@
 			viewer = (ISourceViewer) context.getViewer();
 		}
 		if (fContentAssistProcessors == null && viewer != null) {
+			String filename = fDefaultFileName;
+			ITextFileBuffer fileBuffer = FileBuffers.getTextFileBufferManager().getTextFileBuffer(viewer.getDocument());
+			if (fileBuffer != null) {
+				IPath path = fileBuffer.getLocation();
+				if (path != null  ) {
+					filename = path.lastSegment();
+				}
+			}
 			IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
 			ContentAssistProcessorRegistry contentAssistProcessorRegistry = GenericEditorPlugin.getDefault().getContentAssistProcessorRegistry();
 			Set<IContentType> types = new HashSet<>();
-			types.addAll(Arrays.asList(contentTypeManager.findContentTypesFor(fExampleFileName)));
+			types.addAll(Arrays.asList(contentTypeManager.findContentTypesFor(filename)));
 			IContentType contentType = contentTypeManager.getContentType(IContentTypeManager.CT_TEXT);
 			types.add(contentType);
 			try {
@@ -93,7 +107,7 @@
 			IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
 			ContentAssistProcessorRegistry contentAssistProcessorRegistry = GenericEditorPlugin.getDefault().getContentAssistProcessorRegistry();
 			Set<IContentType> types = new HashSet<>();
-			types.addAll(Arrays.asList(contentTypeManager.findContentTypesFor(fExampleFileName)));
+			types.addAll(Arrays.asList(contentTypeManager.findContentTypesFor(fDefaultFileName)));
 			IContentType contentType = contentTypeManager.getContentType(IContentTypeManager.CT_TEXT);
 			types.add(contentType);
 			fContentAssistProcessors = contentAssistProcessorRegistry.getContentAssistProcessors(viewer, null, types);
@@ -119,4 +133,11 @@
 	public String getErrorMessage() {
 		return fLastErrorMessage;
 	}
+
+	@Override
+	public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+		if (data instanceof String) {
+			fDefaultFileName = data.toString();
+		}
+	}
 }
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/CompoundQuickAssistProcessor.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/CompoundQuickAssistProcessor.java
index acdcaa0..a9de0b1 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/CompoundQuickAssistProcessor.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/CompoundQuickAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2020 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -41,69 +41,74 @@
  */
 public class CompoundQuickAssistProcessor implements IQuickAssistProcessor {
 	private final String QUICK_ASSIST_PROCESSOR_EXTENDED_ID = IQuickAssistProcessor.class.getName();
-	private Map fProcessors;
+	private Map<String, Set<IQuickAssistProcessor>> fProcessors;
 	private IQuickAssistProcessor fQuickFixProcessor;
+
 	/**
 	 * list of partition types where extended processors have been installed
 	 */
-	private List fInstalledExtendedContentTypes;
+	private List<String> fInstalledExtendedContentTypes;
 
-	private Set getQuickAssistProcessors(String partitionType) {
+	private Set<IQuickAssistProcessor> getQuickAssistProcessors(IQuickAssistInvocationContext invocationContext, String partitionType) {
 		if (fInstalledExtendedContentTypes == null || !fInstalledExtendedContentTypes.contains(partitionType)) {
 			// get extended quick assist processors that have not already
 			// been set
-			List processors = ExtendedConfigurationBuilder.getInstance().getConfigurations(QUICK_ASSIST_PROCESSOR_EXTENDED_ID, partitionType);
+			List<IQuickAssistProcessor> processors = ExtendedConfigurationBuilder.getInstance().getConfigurations(QUICK_ASSIST_PROCESSOR_EXTENDED_ID, partitionType);
 			if (processors != null && !processors.isEmpty()) {
-				Iterator iter = processors.iterator();
+				Iterator<IQuickAssistProcessor> iter = processors.iterator();
 				while (iter.hasNext()) {
-					IQuickAssistProcessor processor = (IQuickAssistProcessor) iter.next();
+					IQuickAssistProcessor processor = iter.next();
 					setQuickAssistProcessor(partitionType, processor);
 				}
 			}
 			// add partition type to list of extended partition types
 			// installed (regardless of whether or not any extended content
-			// assist processors were installed because dont want to look it
+			// assist processors were installed because don't want to look it
 			// up every time)
-			if (fInstalledExtendedContentTypes == null)
-				fInstalledExtendedContentTypes = new ArrayList();
+			if (fInstalledExtendedContentTypes == null) {
+				fInstalledExtendedContentTypes = new ArrayList<>();
+			}
 			fInstalledExtendedContentTypes.add(partitionType);
 		}
 
-		Set processors = null;
-		if (fProcessors != null)
-			processors = (Set) fProcessors.get(partitionType);
+		Set<IQuickAssistProcessor> processors = null;
+		if (fProcessors != null) {
+			processors = fProcessors.get(partitionType);
+		}
 
 		return processors;
 	}
 
 	/**
-	 * Gets all the quick assist processors relevant to the partion which is
-	 * calcuated from the given document and offset.
+	 * Gets all the quick assist processors relevant to the partition which is
+	 * calculated from the given document and offset.
 	 * 
 	 * @param invocationContext
 	 * @return Set of quick assist processors or null if none exist
 	 */
-	private Set getQuickAssistProcessors(IQuickAssistInvocationContext invocationContext) {
-		Set processsors = null;
+	private Set<IQuickAssistProcessor> getQuickAssistProcessors(IQuickAssistInvocationContext invocationContext) {
+		Set<IQuickAssistProcessor> processors = null;
 
 		ISourceViewer sourceViewer = invocationContext.getSourceViewer();
 		if (sourceViewer != null) {
 			IDocument document = sourceViewer.getDocument();
 			try {
 				String partitionType;
-				if (document != null)
+				if (document != null) {
 					partitionType = TextUtilities.getContentType(document, IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING, invocationContext.getOffset(), true);
-				else
+				}
+				else {
 					partitionType = IDocument.DEFAULT_CONTENT_TYPE;
+				}
 
-				processsors = getQuickAssistProcessors(partitionType);
+				processors = getQuickAssistProcessors(invocationContext, partitionType);
 			}
 			catch (BadLocationException x) {
 				Logger.log(Logger.WARNING_DEBUG, x.getMessage(), x);
 			}
 		}
 
-		return processsors;
+		return processors;
 	}
 
 	/**
@@ -127,9 +132,9 @@
 	 */
 	private void setQuickAssistProcessor(String partitionType, IQuickAssistProcessor processor) {
 		if (fProcessors == null)
-			fProcessors = new HashMap();
+			fProcessors = new HashMap<>();
 
-		Set processors = (Set) fProcessors.get(partitionType);
+		Set<IQuickAssistProcessor> processors = fProcessors.get(partitionType);
 
 		if (processor == null && processors != null) {
 			// removing quick assist processor for this partition type
@@ -139,7 +144,7 @@
 		}
 		else {
 			if (processors == null) {
-				processors = new LinkedHashSet();
+				processors = new LinkedHashSet<>();
 			}
 			processors.add(processor);
 			fProcessors.put(partitionType, processors);
@@ -147,12 +152,12 @@
 	}
 
 	public boolean canAssist(IQuickAssistInvocationContext invocationContext) {
-		Set processors = getQuickAssistProcessors(invocationContext);
+		Set<IQuickAssistProcessor> processors = getQuickAssistProcessors(invocationContext);
 		if (processors != null) {
 			// iterate through list of processors until one processor says
 			// canAssist
-			for (Iterator it = processors.iterator(); it.hasNext();) {
-				IQuickAssistProcessor p = (IQuickAssistProcessor) it.next();
+			for (Iterator<IQuickAssistProcessor> it = processors.iterator(); it.hasNext();) {
+				IQuickAssistProcessor p = it.next();
 				if (p.canAssist(invocationContext))
 					return true;
 			}
@@ -167,7 +172,7 @@
 	}
 
 	public ICompletionProposal[] computeQuickAssistProposals(IQuickAssistInvocationContext invocationContext) {
-		List proposalsList = new ArrayList();
+		List<ICompletionProposal> proposalsList = new ArrayList<>();
 
 		// first get list of fixes
 		IQuickAssistProcessor processor = getQuickFixProcessor();
@@ -178,12 +183,12 @@
 
 		// no fixes, so try adding assists
 		if (proposalsList.isEmpty()) {
-			Set processors = getQuickAssistProcessors(invocationContext);
+			Set<IQuickAssistProcessor> processors = getQuickAssistProcessors(invocationContext);
 			if (processors != null) {
 				// iterate through list of processors until one processor says
 				// canAssist
-				for (Iterator it = processors.iterator(); it.hasNext();) {
-					IQuickAssistProcessor assistProcessor = (IQuickAssistProcessor) it.next();
+				for (Iterator<IQuickAssistProcessor> it = processors.iterator(); it.hasNext();) {
+					IQuickAssistProcessor assistProcessor = it.next();
 					ICompletionProposal[] assistProposals = assistProcessor.computeQuickAssistProposals(invocationContext);
 					if (assistProposals != null && assistProposals.length > 0) {
 						proposalsList.addAll(Arrays.asList(assistProposals));
@@ -202,7 +207,7 @@
 			return null;
 		}
 
-		return (ICompletionProposal[]) proposalsList.toArray(new ICompletionProposal[proposalsList.size()]);
+		return proposalsList.toArray(new ICompletionProposal[proposalsList.size()]);
 	}
 
 	public String getErrorMessage() {
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/QuickFixRegistry.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/QuickFixRegistry.java
index 7826836..197267d 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/QuickFixRegistry.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/QuickFixRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2019 IBM Corporation and others.
+ * Copyright (c) 2008, 2020 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,8 @@
 	/**
 	 * Table of queries for marker resolutions
 	 */
-	private Map resolutionQueries = new HashMap();
+	private Map<AnnotationQuery, Map<AnnotationQueryResult, Collection<IConfigurationElement>>> resolutionQueries = new HashMap<>();
+
 	/**
 	 * Resolution class attribute name in configuration element
 	 */
@@ -72,36 +73,36 @@
 	 * @param element
 	 *            the configuration element defining the result
 	 */
-	private void addQuery(Map table, AnnotationQuery query, AnnotationQueryResult result, IConfigurationElement element) {
+	private void addQuery(Map<AnnotationQuery, Map<AnnotationQueryResult, Collection<IConfigurationElement>>> table, AnnotationQuery query, AnnotationQueryResult result, IConfigurationElement element) {
 
 		// See if the query is already in the table
-		Map results = (Map) table.get(query);
+		Map<AnnotationQueryResult, Collection<IConfigurationElement>> results = table.get(query);
 		if (results == null) {
 			// Create a new results table
-			results = new HashMap();
+			results = new HashMap<>();
 
 			// Add the query to the table
 			table.put(query, results);
 		}
 
 		if (results.containsKey(result)) {
-			Collection currentElements = (Collection) results.get(result);
+			Collection<IConfigurationElement> currentElements = results.get(result);
 			currentElements.add(element);
 		}
 		else {
-			Collection elements = new HashSet();
-			elements.add(element);
+			Collection<IConfigurationElement> configElements = new HashSet<>();
+			configElements.add(element);
 
 			// Add the new result
-			results.put(result, elements);
+			results.put(result, configElements);
 		}
 	}
 
 	public IQuickAssistProcessor[] getQuickFixProcessors(Annotation anno) {
 		// Collect all matches
 		List<IQuickAssistProcessor> processors = new ArrayList<>();
-		for (Iterator iter = resolutionQueries.keySet().iterator(); iter.hasNext();) {
-			AnnotationQuery query = (AnnotationQuery) iter.next();
+		for (Iterator<AnnotationQuery> iter = resolutionQueries.keySet().iterator(); iter.hasNext();) {
+			AnnotationQuery query = iter.next();
 			AnnotationQueryResult result = null;
 			try {
 				/* AnnotationQuery objects are contributed by extension point */
@@ -112,13 +113,13 @@
 			}
 			if (result != null) {
 				// See if a matching result is registered
-				Map resultsTable = (Map) resolutionQueries.get(query);
+				Map<AnnotationQueryResult, Collection<IConfigurationElement>> resultsTable = resolutionQueries.get(query);
 
 				if (resultsTable.containsKey(result)) {
 
-					Iterator elements = ((Collection) resultsTable.get(result)).iterator();
+					Iterator<IConfigurationElement> elements = resultsTable.get(result).iterator();
 					while (elements.hasNext()) {
-						IConfigurationElement element = (IConfigurationElement) elements.next();
+						IConfigurationElement element = elements.next();
 
 						IQuickAssistProcessor processor = null;
 						try {
diff --git a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/SourceValidationQuickAssistProcessor.java b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/SourceValidationQuickAssistProcessor.java
index a2ce9ae..09dde2a 100644
--- a/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/SourceValidationQuickAssistProcessor.java
+++ b/core/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/correction/SourceValidationQuickAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2020 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -53,23 +53,23 @@
 		int documentOffset = quickAssistContext.getOffset();
 		int length = viewer != null ? viewer.getSelectedRange().y : 0;
 
-		IAnnotationModel model = viewer.getAnnotationModel();
+		IAnnotationModel model = viewer != null ? viewer.getAnnotationModel() : null;
 		if (model == null)
 			return null;
 
-		List allProposals = new ArrayList();
+		List<ICompletionProposal> allProposals = new ArrayList<>();
 		if (model instanceof IAnnotationModelExtension2) {
-			Iterator iter = ((IAnnotationModelExtension2) model).getAnnotationIterator(documentOffset, length, true, true);
+			Iterator<Annotation> iter = ((IAnnotationModelExtension2) model).getAnnotationIterator(documentOffset, length, true, true);
 			while (iter.hasNext()) {
-				List processors = new ArrayList();
-				Annotation anno = (Annotation) iter.next();
+				List<IQuickAssistProcessor> processors = new ArrayList<>();
+				Annotation anno = iter.next();
 				if (canFix(anno)) {
 					// first check to see if annotation already has a quick
 					// fix processor attached to it
 					if (anno instanceof TemporaryAnnotation) {
 						Object o = ((TemporaryAnnotation) anno).getAdditionalFixInfo();
 						if (o instanceof IQuickAssistProcessor) {
-							processors.add(o);
+							processors.add((IQuickAssistProcessor) o);
 						}
 					}
 
@@ -78,7 +78,7 @@
 					processors.addAll(Arrays.asList(registry.getQuickFixProcessors(anno)));
 
 					// set up context
-					Map attributes = null;
+					Map<String, String> attributes = null;
 					if (anno instanceof TemporaryAnnotation) {
 						attributes = ((TemporaryAnnotation) anno).getAttributes();
 					}
@@ -87,8 +87,8 @@
 
 					// call each processor
 					for (int i = 0; i < processors.size(); ++i) {
-						List proposals = new ArrayList();
-						collectProposals((IQuickAssistProcessor) processors.get(i), anno, sseContext, proposals);
+						List<ICompletionProposal> proposals = new ArrayList<>();
+						collectProposals(processors.get(i), anno, sseContext, proposals);
 
 						if (proposals.size() > 0) {
 							allProposals.addAll(proposals);
@@ -102,10 +102,10 @@
 		if (allProposals.isEmpty())
 			return null;
 
-		return (ICompletionProposal[]) allProposals.toArray(new ICompletionProposal[allProposals.size()]);
+		return allProposals.toArray(new ICompletionProposal[allProposals.size()]);
 	}
 
-	private void collectProposals(IQuickAssistProcessor processor, Annotation annotation, IQuickAssistInvocationContext invocationContext, List proposalsList) {
+	private void collectProposals(IQuickAssistProcessor processor, Annotation annotation, IQuickAssistInvocationContext invocationContext, List<ICompletionProposal> proposalsList) {
 		ICompletionProposal[] proposals = processor.computeQuickAssistProposals(invocationContext);
 		if (proposals != null && proposals.length > 0) {
 			proposalsList.addAll(Arrays.asList(proposals));
diff --git a/site/category.xml b/site/category.xml
index 923b40e..3655397 100644
--- a/site/category.xml
+++ b/site/category.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-    Copyright (c) 2015, 2018 IBM Corporation and others.
+    Copyright (c) 2015, 2020 IBM Corporation and others.
     This program and the accompanying materials
     are made available under the terms of the Eclipse Public License 2.0
     which accompanies this distribution, and is available at
@@ -50,11 +50,11 @@
   <bundle id="org.eclipse.wtp.web.capabilities"><category name="wtp.bundles"/></bundle>
   <bundle id="org.eclipse.wtp.xml.capabilities"><category name="wtp.bundles"/></bundle>
 
-  <feature id="org.eclipse.wst.web_js_support.feature"><category name="wtp.js_sopport"/></feature>
-  <feature id="org.eclipse.wst.web_js_support_sdk.feature"><category name="wtp.js_sopport.sdk"/></feature>
+  <feature id="org.eclipse.wst.web_js_support.feature"><category name="wtp.js_support"/></feature>
+  <feature id="org.eclipse.wst.web_js_support_sdk.feature"><category name="wtp.js_support.sdk"/></feature>
 
-  <bundle id="org.eclipse.wst.jsdt.web.support.jsp"><category name="wtp.js_sopport"/></bundle>
-  <bundle id="org.eclipse.wtp.javascript.capabilities"><category name="wtp.js_sopport"/></bundle>
+  <bundle id="org.eclipse.wst.jsdt.web.support.jsp"><category name="wtp.js_support"/></bundle>
+  <bundle id="org.eclipse.wtp.javascript.capabilities"><category name="wtp.js_support"/></bundle>
   
   <!-- sources -->
 
@@ -76,11 +76,11 @@
   <feature id="org.eclipse.wst.xml.xpath2.processor.sdk.feature.source"><category name="wtp.sdk.sources"/></feature>
   <bundle id="org.eclipse.wst.xml.xpath2.processor.sdk.doc.source"><category name="wtp.bundles.sdk.sources"/></bundle>
 
-  <feature id="org.eclipse.wst.web_js_support.feature.source"><category name="wtp.js_sopport.sources"/></feature>
-  <feature id="org.eclipse.wst.web_js_support_sdk.feature.source"><category name="wtp.js_sopport.sdk.sources"/></feature>
+  <feature id="org.eclipse.wst.web_js_support.feature.source"><category name="wtp.js_support.sources"/></feature>
+  <feature id="org.eclipse.wst.web_js_support_sdk.feature.source"><category name="wtp.js_support.sdk.sources"/></feature>
   
-  <bundle id="org.eclipse.wst.jsdt.web.support.jsp.source"><category name="wtp.js_sopport.sources"/></bundle>
-  <bundle id="org.eclipse.wtp.javascript.capabilities.source"><category name="wtp.js_sopport.sources"/></bundle>
+  <bundle id="org.eclipse.wst.jsdt.web.support.jsp.source"><category name="wtp.js_support.sources"/></bundle>
+  <bundle id="org.eclipse.wtp.javascript.capabilities.source"><category name="wtp.js_support.sources"/></bundle>
 
   <!-- tests -->
 
@@ -90,7 +90,7 @@
   <feature id="org.eclipse.wst.xsl_tests.feature.source"><category name="wtp.tests"/></feature>
   <bundle id="org.eclipse.wst.xml.xpath2.wtptypes.tests.source"><category name="wtp.tests"/></bundle>
 
-  <feature id="org.eclipse.wst.web_js_support_tests.feature.source"><category name="wtp.js_sopport.tests"/></feature>
+  <feature id="org.eclipse.wst.web_js_support_tests.feature.source"><category name="wtp.js_support.tests"/></feature>
   
   <!-- bundles -->
 
@@ -113,9 +113,9 @@
   <category-def name="wtp.bundles.sources" label="Web Tools Platform (WTP) Bundle Sources"><description>These bundles provide sources.</description></category-def>
   <category-def name="wtp.bundles.sdk.sources" label="Web Tools Platform SDK (WTP SDK) Bundle Sources"><description>These bundles provide sources.</description></category-def>
 
-  <category-def name="wtp.js_sopport" label="Web Tools Platform (WTP) JavaScript Support"><description>These bundles are most likely include in features, but are provided here for completeness.</description></category-def>
+  <category-def name="wtp.js_support" label="Web Tools Platform (WTP) JavaScript Support"><description>These bundles are most likely include in features, but are provided here for completeness.</description></category-def>
   <category-def name="wtp.js_support.sdk" label="Web Tools Platform SDK (WTP SDK) JavaScript Support"><description>These bundles are most likely include in features, but are provided here for completeness.</description></category-def>
 
-  <category-def name="wtp.js_sopport.sources" label="Web Tools Platform (WTP) JavaScript Support Sources"><description>These bundles provide sources.</description></category-def>
-  <category-def name="wtp.js_sopport.sdk.sources" label="Web Tools Platform SDK (WTP SDK) JavaScript Support Sources"><description>These bundles provide sources.</description></category-def>
+  <category-def name="wtp.js_support.sources" label="Web Tools Platform (WTP) JavaScript Support Sources"><description>These bundles provide sources.</description></category-def>
+  <category-def name="wtp.js_support.sdk.sources" label="Web Tools Platform SDK (WTP SDK) JavaScript Support Sources"><description>These bundles provide sources.</description></category-def>
 </site>
diff --git a/web/bundles/org.eclipse.wst.html.ui/plugin.xml b/web/bundles/org.eclipse.wst.html.ui/plugin.xml
index 1763e02..3df0ea0 100755
--- a/web/bundles/org.eclipse.wst.html.ui/plugin.xml
+++ b/web/bundles/org.eclipse.wst.html.ui/plugin.xml
@@ -678,7 +678,7 @@
     <proposalComputer
           activate="false"
           categoryId="org.eclipse.wst.html.ui.proposalCategory.generic"
-          class="org.eclipse.wst.sse.ui.internal.contentassist.GenericCompletionProposalComputer"
+          class="org.eclipse.wst.sse.ui.internal.contentassist.GenericCompletionProposalComputer:example.html"
           id="org.eclipse.wst.html.ui.proposalComputer.generic">
        <contentType
              id="org.eclipse.wst.html.core.htmlsource">
diff --git a/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/search/JSPSearchTests.java b/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/search/JSPSearchTests.java
index fd3e913..34b93f8 100644
--- a/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/search/JSPSearchTests.java
+++ b/web/tests/org.eclipse.jst.jsp.ui.tests/src/org/eclipse/jst/jsp/ui/tests/search/JSPSearchTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2018 IBM Corporation and others.
+ * Copyright (c) 2004, 2020 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -48,8 +48,8 @@
 	 */
 	class TestJspSearchRequestor extends BasicJSPSearchRequestor {
 
-		private List expected = null;
-		List actual = null;
+		List expected = null;
+		List<TestSearchMatch> actual = null;
 
 		public TestJspSearchRequestor() {
 			this.expected = new ArrayList();
