diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java
index 1dabe29..0c9a480 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodes.java
@@ -3635,9 +3635,8 @@
 
 		Type type= null;
 		if (node instanceof SimpleName) {
-			IBinding binding= null;
 			SimpleName name= (SimpleName) node;
-			binding= name.resolveBinding();
+			IBinding binding= name.resolveBinding();
 			if (!(binding instanceof IVariableBinding)) {
 				return false;
 			}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/SwitchExpressionsFixCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/SwitchExpressionsFixCore.java
index 77f8cd0..c840a75 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/SwitchExpressionsFixCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/SwitchExpressionsFixCore.java
@@ -316,8 +316,6 @@
 					ExpressionStatement oldExpStatement= (ExpressionStatement)oldStatements.get(statementsLen - 1);
 					Assignment oldAssignment= (Assignment)oldExpStatement.getExpression();
 					Expression rhs= oldAssignment.getRightHandSide();
-					Expression newYieldExpression= null;
-					YieldStatement newYield= null;
 					IBuffer buffer= cuRewrite.getCu().getBuffer();
 					StringBuffer b= new StringBuffer();
 					List<Comment> leadingComments= ASTNodes.getLeadingComments(oldExpStatement);
@@ -331,8 +329,8 @@
 						b.append(" " + buffer.getText(comment.getStartPosition(), comment.getLength())); //$NON-NLS-1$
 					}
 
-					newYield = (YieldStatement)rewrite.createStringPlaceholder(b.toString(), ASTNode.YIELD_STATEMENT);
-					newYieldExpression= (Expression) rewrite.createStringPlaceholder(b.toString(), rhs.getNodeType());
+					YieldStatement newYield = (YieldStatement)rewrite.createStringPlaceholder(b.toString(), ASTNode.YIELD_STATEMENT);
+					Expression newYieldExpression= (Expression) rewrite.createStringPlaceholder(b.toString(), rhs.getNodeType());
 					newYield.setExpression(newYieldExpression);
 					newBlock.statements().add(newYield);
 					newSwitchExpression.statements().add(newBlock);
diff --git a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java
index 496c872..cc30b1c 100644
--- a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java
+++ b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java
@@ -187,10 +187,9 @@
 	}
 
 	private IIndex[] getIndexes(IIndexQuery search) {
-		IPath[] fIndexKeys= null; // cache of the keys for looking index up
 		ArrayList requiredIndexKeys= new ArrayList();
 		search.computePathsKeyingIndexFiles(requiredIndexKeys);
-		fIndexKeys= new IPath[requiredIndexKeys.size()];
+		IPath[] fIndexKeys= new IPath[requiredIndexKeys.size()]; // cache of the keys for looking index up
 		requiredIndexKeys.toArray(fIndexKeys);
 
 		// acquire the in-memory indexes on the fly
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameNonPrivateFieldTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameNonPrivateFieldTests.java
index ca91430..535d17a 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameNonPrivateFieldTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameNonPrivateFieldTests.java
@@ -414,9 +414,8 @@
 	public void testStaticImport() throws Exception{
 		//bug 77622
 		IPackageFragment test1= getRoot().createPackageFragment("test1", true, null);
-		ICompilationUnit cuC= null;
 		ICompilationUnit cuB= createCUfromTestFile(test1, "B");
-		cuC= createCUfromTestFile(getRoot().getPackageFragment(""), "C");
+		ICompilationUnit cuC= createCUfromTestFile(getRoot().getPackageFragment(""), "C");
 
 		helper2("PI", "e");
 
@@ -428,9 +427,8 @@
 	public void testEnumConst() throws Exception {
 		//bug 77619
 		IPackageFragment test1= getRoot().createPackageFragment("test1", true, null);
-		ICompilationUnit cuC= null;
 		ICompilationUnit cuB= createCUfromTestFile(test1, "B");
-		cuC= createCUfromTestFile(getRoot().getPackageFragment(""), "C");
+		ICompilationUnit cuC= createCUfromTestFile(getRoot().getPackageFragment(""), "C");
 
 		helper2("RED", "REDDISH");
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
index 4bbca53..39e747b 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
@@ -265,8 +265,7 @@
 				parser.setProject(fJProject1);
 				parser.setUnitName("F.java");
 
-				CompilationUnit astRoot= null;
-				astRoot= (CompilationUnit) parser.createAST(null);
+				CompilationUnit astRoot= (CompilationUnit) parser.createAST(null);
 				IProblem[] problems= astRoot.getProblems();
 
 				ITypeBinding b1= f1.resolveBinding().getType();
@@ -322,8 +321,7 @@
 				if (b1.isPrimitive() != b2.isPrimitive())
 					continue;
 
-				CompilationUnit astRoot= null;
-				astRoot= (CompilationUnit) parser.createAST(null);
+				CompilationUnit astRoot= (CompilationUnit) parser.createAST(null);
 				IProblem[] problems= astRoot.getProblems();
 
 				boolean res= TypeRules.canCast(b2, b1);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
index dc7d3ff..956904f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
@@ -93,8 +93,7 @@
     private Hashtable<String, String> fExpectedChangesAllTests;
     {
         fExpectedChangesAllTests= new Hashtable<>();
-        StringBuffer buf= null;
-        buf= new StringBuffer();
+        StringBuffer buf= new StringBuffer();
         buf.append("package junit.runner;\n");
         buf.append("\n");
         buf.append("import java.io.BufferedReader;\n");
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java
index d8d24dd..78c6b8e 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java
@@ -74,7 +74,6 @@
 		IJavaElement convertedToJava= null;
 		IJavaElement commonJavaElementParent= null;
 		Object commonJarResourcesParent= null;
-		Object commonParent= null;
 		if (fResources.length != 0) {
 			IResource commonResourceParent= getCommonResourceParent();
 			Assert.isNotNull(commonResourceParent);
@@ -88,7 +87,7 @@
 			if (convertedToJava != null && !commonJavaElementParent.equals(convertedToJava))
 				return null;
 		}
-		commonParent= convertedToJava == null ? commonJavaElementParent : convertedToJava;
+		Object commonParent= convertedToJava == null ? commonJavaElementParent : convertedToJava;
 		if (fJarResources.length != 0) {
 			commonJarResourcesParent= getCommonJarResourceParent();
 			Assert.isNotNull(commonJarResourcesParent);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
index 98c7dbe..cb3c34a 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
@@ -814,10 +814,9 @@
 	 *            the text edit group to use
 	 */
 	protected final void rewriteTypeOccurrence(final CompilationUnitRange range, final TType estimate, final ASTRequestor requestor, final CompilationUnitRewrite rewrite, final CompilationUnit copy, final Set<String> replacements, final TextEditGroup group) {
-		ASTNode node= null;
 		IBinding binding= null;
 		final CompilationUnit target= rewrite.getRoot();
-		node= NodeFinder.perform(copy, range.getSourceRange());
+		ASTNode node= NodeFinder.perform(copy, range.getSourceRange());
 		if (node != null) {
 			node= ASTNodes.getNormalizedNode(node).getParent();
 			if (node instanceof VariableDeclaration) {
@@ -1225,8 +1224,7 @@
 					for (IJavaProject project : keySet) {
 						if (level == 3 && !JavaModelUtil.is50OrHigher(project))
 							level= 2;
-						Collection<ICompilationUnit> cuCollection= null;
-						cuCollection= secondPass.get(project);
+						Collection<ICompilationUnit> cuCollection= secondPass.get(project);
 						if (cuCollection != null) {
 							parser.setWorkingCopyOwner(fOwner);
 							parser.setResolveBindings(true);
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java
index 59b6b73..51338d1 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InlineConstantWizard.java
@@ -88,7 +88,6 @@
 			setControl(result);
 			GridLayout layout= new GridLayout();
 			result.setLayout(layout);
-			GridData gd= null;
 
 			Label label= new Label(result, SWT.NONE);
 			String constantLabel= JavaElementLabels.getElementLabel(fRefactoring.getField(), JavaElementLabels.ALL_DEFAULT | JavaElementLabels.ALL_FULLY_QUALIFIED);
@@ -111,7 +110,7 @@
 			});
 
 			fRemove= new Button(result, SWT.CHECK);
-			gd= new GridData(GridData.FILL_HORIZONTAL);
+			GridData gd= new GridData(GridData.FILL_HORIZONTAL);
 			gd.horizontalIndent= LayoutUtil.getIndent();
 			fRemove.setLayoutData(gd);
 			fRemove.setText(RefactoringMessages.InlineConstantInputPage_Delete_constant);
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java
index 59dae10..882ba71 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/InlineMethodInputPage.java
@@ -64,7 +64,6 @@
 		setControl(result);
 		GridLayout layout= new GridLayout();
 		result.setLayout(layout);
-		GridData gd= null;
 
 		boolean all= fRefactoring.getInitialMode() == InlineMethodRefactoring.Mode.INLINE_ALL;
 		Label label= new Label(result, SWT.NONE);
@@ -89,7 +88,7 @@
 		});
 
 		fRemove= new Button(result, SWT.CHECK);
-		gd= new GridData(GridData.FILL_HORIZONTAL);
+		GridData gd= new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalIndent= LayoutUtil.getIndent();
 		fRemove.setLayoutData(gd);
 		fRemove.setText(RefactoringMessages.InlineMethodInputPage_delete_declaration);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java
index 2fdfece..926d60b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/GenerateConstructorUsingFieldsSelectionDialog.java
@@ -197,7 +197,7 @@
 
 		Composite composite= new Composite(parent, SWT.NONE);
 		GridLayout layout= new GridLayout();
-		GridData gd= null;
+		GridData gd;
 
 		layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
 		layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java
index 48e08bd..0fbe308 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/IndentAction.java
@@ -1024,9 +1024,8 @@
 	}
 
 	private static String getTabSpaceString(IJavaProject javaProject) {
-		String tabString= ""; //$NON-NLS-1$
 		int tabWidth= CodeFormatterUtil.getTabWidth(javaProject);
-		tabString= EMPTY_STR;
+		String tabString= EMPTY_STR;
 		for (int i= 0; i < tabWidth; i++) {
 			tabString+= SPACE_STR;
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java
index eae1d23..11c9f55 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/PackagesViewHierarchicalContentProvider.java
@@ -112,9 +112,8 @@
 							fMapToPackageFragments.clear();
 							IResource resource= root.getUnderlyingResource();
 							if (root.isArchive() || root.isExternal()) {
-								IPackageFragment[] fragments= new IPackageFragment[0];
 								IJavaElement[] els= root.getChildren();
-								fragments= getTopLevelChildrenByElementName(els);
+								IPackageFragment[] fragments= getTopLevelChildrenByElementName(els);
 								addFragmentsToMap(fragments);
 								return fragments;
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java
index 3cf0c40..e7c9a4c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWriter.java
@@ -64,11 +64,9 @@
 	}
 
 	public Element createXML(JavadocOptionsManager store) throws ParserConfigurationException {
-
-		DocumentBuilder docBuilder= null;
 		DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
 		factory.setValidating(false);
-		docBuilder= factory.newDocumentBuilder();
+		DocumentBuilder docBuilder= factory.newDocumentBuilder();
 		Document document= docBuilder.newDocument();
 
 		// Create the document
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
index 2a1bf1c..c7a27f2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
@@ -185,8 +185,7 @@
 							}
 						} else if (document instanceof IDocumentExtension3) {
 							// Fall back: test using properties file partitioning
-							ITypedRegion partition= null;
-							partition= ((IDocumentExtension3)document).getPartition(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, region.getOffset(), false);
+							ITypedRegion partition= ((IDocumentExtension3)document).getPartition(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, region.getOffset(), false);
 							found= IDocument.DEFAULT_CONTENT_TYPE.equals(partition.getType())
 							&& key.equals(document.get(partition.getOffset(), partition.getLength()).trim());
 						}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java
index d4f6c3d..a15be1c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/UserLibraryPreferencePage.java
@@ -559,10 +559,9 @@
 		protected static void saveLibraries(List<CPUserLibraryElement> libraries, File file, String encoding, IProgressMonitor monitor) throws IOException {
 			OutputStream stream= new FileOutputStream(file);
 			try {
-				DocumentBuilder docBuilder= null;
 				DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
 				factory.setValidating(false);
-				docBuilder= factory.newDocumentBuilder();
+				DocumentBuilder docBuilder= factory.newDocumentBuilder();
 				Document document= docBuilder.newDocument();
 
 				// Create the document
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java
index 2c93a55..25c7407 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java
@@ -262,7 +262,6 @@
 		IDocument document= invocationContext.getDocument();
 		int selectionOffset= invocationContext.getOffset();
 		int selectionLength= invocationContext.getLength();
-		IField field= null;
 
 		IType accessorClass= invocationContext.getAccessorType();
 		if (accessorClass == null || !isEclipseNLSUsed(accessorClass))
@@ -272,7 +271,7 @@
 		if (keys == null || keys.size() != 1)
 			return false;
 
-		field= accessorClass.getField(keys.get(0));
+		IField field= accessorClass.getField(keys.get(0));
 		if (!field.exists())
 			return false;
 		if (resultingCollections == null)
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java
index 74e05a4..212c688 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultClasspathFixProcessor.java
@@ -155,9 +155,8 @@
 							continue;
 						}
 
-						IModuleDescription projectModule= null;
 						String moduleName= null;
-						projectModule= root.getModuleDescription();
+						IModuleDescription projectModule= root.getModuleDescription();
 						if (projectModule != null && projectModule.exists()) {
 							moduleName= projectModule.getElementName();
 						}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ExternalNullAnnotationQuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ExternalNullAnnotationQuickAssistProcessor.java
index c9d9f82..c7727ff 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ExternalNullAnnotationQuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ExternalNullAnnotationQuickAssistProcessor.java
@@ -88,9 +88,8 @@
 			ISourceViewer viewer= quickAssistContext.getSourceViewer();
 			int documentOffset= quickAssistContext.getOffset();
 
-			AssistContext context= null;
 			int length= viewer != null ? viewer.getSelectedRange().y : 0;
-			context= new AssistContext(cu, viewer, part, documentOffset, length);
+			AssistContext context= new AssistContext(cu, viewer, part, documentOffset, length);
 
 			ArrayList<IJavaCompletionProposal> proposals= new ArrayList<>();
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java
index eae8c8c..222d5ca 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java
@@ -149,7 +149,6 @@
 		protected void addEdits(IDocument document, TextEdit rootEdit) throws CoreException {
 			try {
 				Javadoc javadoc= null;
-				int insertPosition= -1;
 				String lineDelimiter= TextUtilities.getDefaultLineDelimiter(document);
 				final IJavaProject project= getCompilationUnit().getJavaProject();
 				CompilationUnit cu= (CompilationUnit)fDecl.getParent();
@@ -165,7 +164,7 @@
 					return;
 				}
 				String comment= ""; //$NON-NLS-1$
-				insertPosition= findInsertPosition(javadoc, fMissingNode, document, lineDelimiter);
+				int insertPosition= findInsertPosition(javadoc, fMissingNode, document, lineDelimiter);
 
 			 	if (fMissingNode instanceof UsesDirective) {
 			 		UsesDirective directive= (UsesDirective)fMissingNode;
@@ -241,7 +240,7 @@
 		protected void addEdits(IDocument document, TextEdit rootEdit) throws CoreException {
 			try {
 				Javadoc javadoc= null;
-				int insertPosition= -1;
+				int insertPosition;
 				String lineDelimiter= TextUtilities.getDefaultLineDelimiter(document);
 				final IJavaProject project= getCompilationUnit().getJavaProject();
 				CompilationUnit cu= (CompilationUnit)fDecl.getParent();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
index 5ca83cf..7f3129e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
@@ -2069,13 +2069,12 @@
 			return;
 		}
 
-		AbstractTypeDeclaration typeDeclaration= null;
 		StructuralPropertyDescriptor locationInParent= selectedNode.getLocationInParent();
 		if (locationInParent != TypeDeclaration.NAME_PROPERTY && locationInParent != EnumDeclaration.NAME_PROPERTY) {
 			return;
 		}
 
-		typeDeclaration= (AbstractTypeDeclaration) selectedNode.getParent();
+		AbstractTypeDeclaration typeDeclaration= (AbstractTypeDeclaration) selectedNode.getParent();
 
 		ITypeBinding binding= typeDeclaration.resolveBinding();
 		if (binding == null || binding.getSuperclass() == null) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java
index 3a451df..ff68f3f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java
@@ -340,8 +340,7 @@
 				break;
 			case IClasspathEntry.CPE_CONTAINER:
 				try {
-					IClasspathContainer container= null;
-					container= JavaCore.getClasspathContainer(entry.getPath(), root.getJavaProject());
+					IClasspathContainer container= JavaCore.getClasspathContainer(entry.getPath(), root.getJavaProject());
 					if (container != null) {
 						String name= container.getDescription();
 						if (name != null && name.length() > 0) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
index be0862c..499a7cb 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
@@ -1789,9 +1789,8 @@
 
 		// add proposal
 		ASTRewriteCorrectionProposal proposal;
-		String label= null;
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-		label= CorrectionMessages.QuickAssistProcessor_remove_lambda_parameter_types;
+		String label= CorrectionMessages.QuickAssistProcessor_remove_lambda_parameter_types;
 		if (removeImports) {
 			ASTRewriteRemoveImportsCorrectionProposal newProposal= new ASTRewriteRemoveImportsCorrectionProposal(label, context.getCompilationUnit(), rewrite,
 					IProposalRelevance.ADD_INFERRED_LAMBDA_PARAMETER_TYPES, image);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java
index 2b45a5f..bfd826b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/FillArgumentNamesCompletionProposalCollector.java
@@ -77,8 +77,7 @@
 		if ((completion.length() == 0) || ((completion.length() == 1) && completion.charAt(0) == ')') || Signature.getParameterCount(methodProposal.getSignature()) == 0 || getContext().isInJavadoc())
 			return super.createJavaCompletionProposal(methodProposal);
 
-		LazyJavaCompletionProposal proposal= null;
-		proposal= ParameterGuessingProposal.createProposal(methodProposal, getInvocationContext(), fIsGuessArguments);
+		LazyJavaCompletionProposal proposal= ParameterGuessingProposal.createProposal(methodProposal, getInvocationContext(), fIsGuessArguments);
 		if (proposal == null) {
 			proposal= new FilledArgumentNamesMethodProposal(methodProposal, getInvocationContext());
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
index 85d087a..2d4fdd9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
@@ -319,10 +319,9 @@
 	 */
 	public void init(IJavaProject jproject, IPath outputLocation, IClasspathEntry[] classpathEntries) {
 		fCurrJProject= jproject;
-		boolean projectExists= false;
 		List<CPListElement> newClassPath= null;
 		IProject project= fCurrJProject.getProject();
-		projectExists= (project.exists() && project.getFile(".classpath").exists()); //$NON-NLS-1$
+		boolean projectExists= (project.exists() && project.getFile(".classpath").exists()); //$NON-NLS-1$
 		IClasspathEntry[] existingEntries= null;
 		if  (projectExists) {
 			if (outputLocation == null) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java
index b024ae8..59cd851 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SortMembersAction.java
@@ -116,8 +116,7 @@
 
 	@Override
 	public void selectionChanged(IStructuredSelection selection) {
-		boolean enabled= false;
-		enabled= getSelectedCompilationUnit(selection) != null;
+		boolean enabled= getSelectedCompilationUnit(selection) != null;
 		setEnabled(enabled);
 	}
 
diff --git a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/participants/FailingParticipantTests.java b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/participants/FailingParticipantTests.java
index d54f35c..5ec03e9 100644
--- a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/participants/FailingParticipantTests.java
+++ b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/participants/FailingParticipantTests.java
@@ -118,9 +118,8 @@
 		fRefactoring.checkFinalConditions(new NullProgressMonitor());
 
 		resetLog();
-		boolean exception= false;
+        boolean exception= false;
 		Change change= fRefactoring.createChange(new NullProgressMonitor());
-		exception= false;
 		try {
 			// blows up because main refactoring fails to execute
 			change.perform(new NullProgressMonitor());
