diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
index a70bdde..a0dd3b8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
@@ -66,6 +66,8 @@
 import org.eclipse.jface.text.TabsToSpacesConverter;
 import org.eclipse.jface.text.TextUtilities;
 import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.text.contentassist.IContentAssistant;
 import org.eclipse.jface.text.formatter.FormattingContextProperties;
 import org.eclipse.jface.text.formatter.IFormattingContext;
@@ -137,8 +139,10 @@
 import org.eclipse.jdt.internal.ui.text.SmartBackspaceManager;
 import org.eclipse.jdt.internal.ui.text.Symbols;
 import org.eclipse.jdt.internal.ui.text.correction.CorrectionCommandInstaller;
+import org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor;
 import org.eclipse.jdt.internal.ui.text.java.IJavaReconcilingListener;
 import org.eclipse.jdt.internal.ui.text.java.JavaFormattingContext;
+import org.eclipse.jdt.internal.ui.text.java.OverrideCompletionProposal;
 
 
 /**
@@ -273,10 +277,24 @@
 				// when entering an anonymous class between the parenthesis', we don't want
 				// to jump after the closing parenthesis when return is pressed
 				if (event.character == SWT.CR && offset > 0) {
-					IDocument document= getSourceViewer().getDocument();
+					ISourceViewer sourceViewer= getSourceViewer();
+					IDocument document= sourceViewer.getDocument();
 					try {
 						if (document.getChar(offset - 1) == '{')
 							return new ExitFlags(ILinkedModeListener.EXIT_ALL, true);
+
+						// see bug 308217: while overriding a method and using '(' followed by parameter type to filter the content assist proposals, if ')' is added 
+						// automatically on typing '(', pressing return key should not result in jumping after ')' instead of applying the selected proposal.
+						if (document.getChar(offset) == ')' && sourceViewer instanceof AdaptedSourceViewer && ((AdaptedSourceViewer) sourceViewer).getContentAssistant() instanceof ContentAssistant) {
+							ContentAssistant contentAssistant= (ContentAssistant) ((AdaptedSourceViewer) sourceViewer).getContentAssistant();
+							IContentAssistProcessor processor= contentAssistant.getContentAssistProcessor(IDocument.DEFAULT_CONTENT_TYPE);
+							if (processor instanceof ContentAssistProcessor) {
+								ICompletionProposal proposal= ((ContentAssistProcessor) processor).getSelectedProposal();
+								if (proposal instanceof OverrideCompletionProposal) {
+									return new ExitFlags(ILinkedModeListener.EXIT_ALL, true);
+								}
+							}
+						}
 					} catch (BadLocationException e) {
 					}
 				}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
index ed326c8..fe65607 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2014 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -177,6 +177,7 @@
 				cat.sessionEnded();
 			}
 
+			fSelectedProposal= null;
 			fCategoryIteration= null;
 			fRepetition= -1;
 			fIterationGesture= null;
@@ -197,6 +198,7 @@
 		 */
 		@Override
 		public void selectionChanged(ICompletionProposal proposal, boolean smartToggle) {
+			fSelectedProposal= proposal;
 		}
 
 		/*
@@ -229,6 +231,7 @@
 	private final List<CompletionProposalCategory> fCategories;
 	private final String fPartition;
 	private final ContentAssistant fAssistant;
+	private ICompletionProposal fSelectedProposal;
 
 	private char[] fCompletionAutoActivationCharacters;
 
@@ -698,4 +701,14 @@
 		}
 	}
 
+	/**
+	 * Returns the proposal selected in the proposal selector.
+	 *
+	 * @return the selected proposal or <code>null</code> if none
+	 * @since 3.12
+	 */
+	public ICompletionProposal getSelectedProposal() {
+		return fSelectedProposal;
+	}
+
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
index f9e7a2c..b57849d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -56,6 +56,7 @@
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
+import org.eclipse.jdt.internal.ui.text.correction.ASTResolving;
 
 public class OverrideCompletionProposal extends JavaTypeCompletionProposal implements ICompletionProposalExtension4 {
 
@@ -140,6 +141,7 @@
 		ITypeBinding declaringType= null;
 		ChildListPropertyDescriptor descriptor= null;
 		ASTNode node= NodeFinder.perform(unit, offset, 1);
+		node= ASTResolving.findParentType(node);
 		if (node instanceof AnonymousClassDeclaration) {
 			declaringType= ((AnonymousClassDeclaration) node).resolveBinding();
 			descriptor= AnonymousClassDeclaration.BODY_DECLARATIONS_PROPERTY;
@@ -170,6 +172,11 @@
 					String indent= getIndentAt(document, getReplacementOffset(), settings);
 					setReplacementString(IndentManipulation.changeIndent(generatedCode, generatedIndent, settings.tabWidth, settings.indentWidth, indent, TextUtilities.getDefaultLineDelimiter(document)));
 
+					int replacementLength= getReplacementLength();
+					if (document.get(getReplacementOffset() + replacementLength, 1).equals(")")) { //$NON-NLS-1$
+						setReplacementLength(replacementLength + 1);
+					}
+
 				} catch (MalformedTreeException exception) {
 					JavaPlugin.log(exception);
 				} catch (BadLocationException exception) {
