Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 251064 Details for
Bug 460521
[1.8][override method] Override / Implement methods should offer to generate default methods
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch
eclipse.jdt.ui.patch (text/plain), 16.37 KB, created by
Noopur Gupta
on 2015-02-24 09:13:43 EST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Noopur Gupta
Created:
2015-02-24 09:13:43 EST
Size:
16.37 KB
patch
obsolete
>diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java >index b4d7db2..8be42ef 100644 >--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java >+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2014 GK Software AG, IBM Corporation and others. >+ * Copyright (c) 2014, 2015 GK Software AG, 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 >@@ -382,4 +382,235 @@ > buf.append("}\n"); > assertEquals(buf.toString(), doc.get()); > } >+ >+ public void testOverride5() throws CoreException { >+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); >+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); >+ StringBuffer buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I1 {\n"); >+ buf.append(" equals\n"); >+ buf.append("}\n"); >+ ICompilationUnit cu= pack1.createCompilationUnit("I1.java", buf.toString(), false, null); >+ >+ String str= "equals"; >+ int offset= buf.toString().indexOf(str) + str.length(); >+ >+ CompletionProposalCollector collector= createCollector(cu, offset); >+ collector.setReplacementLength(0); >+ codeComplete(cu, offset, collector); >+ >+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); >+ assertEquals(1, proposals.length); >+ IEditorPart part= JavaUI.openInEditor(cu); >+ IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); >+ proposals[0].apply(doc); >+ >+ buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I1 {\n"); >+ buf.append(" /* (non-Javadoc)\n"); >+ buf.append(" * @see java.lang.Object#equals(java.lang.Object)\n"); >+ buf.append(" */\n"); >+ buf.append(" @Override\n"); >+ buf.append(" public boolean equals(Object arg0);\n"); >+ buf.append("}\n"); >+ assertEquals(buf.toString(), doc.get()); >+ } >+ >+ public void testOverride6() throws CoreException { >+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); >+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); >+ StringBuffer buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I2 {\n"); >+ buf.append(" hashCode\n"); >+ buf.append("}\n"); >+ ICompilationUnit cu= pack1.createCompilationUnit("I2.java", buf.toString(), false, null); >+ >+ String str= "hashCode"; >+ int offset= buf.toString().indexOf(str) + str.length(); >+ >+ CompletionProposalCollector collector= createCollector(cu, offset); >+ collector.setReplacementLength(0); >+ codeComplete(cu, offset, collector); >+ >+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); >+ assertEquals(1, proposals.length); >+ IEditorPart part= JavaUI.openInEditor(cu); >+ IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); >+ proposals[0].apply(doc); >+ >+ buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I2 {\n"); >+ buf.append(" /* (non-Javadoc)\n"); >+ buf.append(" * @see java.lang.Object#hashCode()\n"); >+ buf.append(" */\n"); >+ buf.append(" @Override\n"); >+ buf.append(" public int hashCode();\n"); >+ buf.append("}\n"); >+ assertEquals(buf.toString(), doc.get()); >+ } >+ >+ public void testOverride7() throws CoreException { >+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); >+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); >+ StringBuffer buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I3 {\n"); >+ buf.append(" toString\n"); >+ buf.append("}\n"); >+ ICompilationUnit cu= pack1.createCompilationUnit("I3.java", buf.toString(), false, null); >+ >+ String str= "toString"; >+ int offset= buf.toString().indexOf(str) + str.length(); >+ >+ CompletionProposalCollector collector= createCollector(cu, offset); >+ collector.setReplacementLength(0); >+ codeComplete(cu, offset, collector); >+ >+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); >+ assertEquals(1, proposals.length); >+ IEditorPart part= JavaUI.openInEditor(cu); >+ IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); >+ proposals[0].apply(doc); >+ >+ buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I3 {\n"); >+ buf.append(" /* (non-Javadoc)\n"); >+ buf.append(" * @see java.lang.Object#toString()\n"); >+ buf.append(" */\n"); >+ buf.append(" @Override\n"); >+ buf.append(" public String toString();\n"); >+ buf.append("}\n"); >+ assertEquals(buf.toString(), doc.get()); >+ } >+ >+ public void testOverride8() throws CoreException { >+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); >+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); >+ StringBuffer buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I4 {\n"); >+ buf.append(" clone\n"); >+ buf.append("}\n"); >+ ICompilationUnit cu= pack1.createCompilationUnit("I4.java", buf.toString(), false, null); >+ >+ String str= "clone"; >+ int offset= buf.toString().indexOf(str) + str.length(); >+ >+ CompletionProposalCollector collector= createCollector(cu, offset); >+ collector.setReplacementLength(0); >+ codeComplete(cu, offset, collector); >+ >+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); >+ assertEquals(3, proposals.length); >+ IEditorPart part= JavaUI.openInEditor(cu); >+ IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); >+ proposals[2].apply(doc); >+ >+ buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I4 {\n"); >+ buf.append(" /* (non-Javadoc)\n"); >+ buf.append(" * @see java.lang.Object#clone()\n"); >+ buf.append(" */\n"); >+ buf.append(" public Object clone() throws CloneNotSupportedException;\n"); >+ buf.append("}\n"); >+ assertEquals(buf.toString(), doc.get()); >+ } >+ >+ public void testOverride9() throws CoreException { >+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); >+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); >+ StringBuffer buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I5 {\n"); >+ buf.append(" finalize\n"); >+ buf.append("}\n"); >+ ICompilationUnit cu= pack1.createCompilationUnit("I5.java", buf.toString(), false, null); >+ >+ String str= "finalize"; >+ int offset= buf.toString().indexOf(str) + str.length(); >+ >+ CompletionProposalCollector collector= createCollector(cu, offset); >+ collector.setReplacementLength(0); >+ codeComplete(cu, offset, collector); >+ >+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); >+ assertEquals(2, proposals.length); >+ IEditorPart part= JavaUI.openInEditor(cu); >+ IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); >+ proposals[1].apply(doc); >+ >+ buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I5 {\n"); >+ buf.append(" /* (non-Javadoc)\n"); >+ buf.append(" * @see java.lang.Object#finalize()\n"); >+ buf.append(" */\n"); >+ buf.append(" public void finalize() throws Throwable;\n"); >+ buf.append("}\n"); >+ assertEquals(buf.toString(), doc.get()); >+ } >+ >+ public void testOverride10() throws CoreException { >+ IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); >+ IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); >+ StringBuffer buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I6 extends A {\n"); >+ buf.append(" myAbs\n"); >+ buf.append("}\n"); >+ buf.append("\n"); >+ buf.append("interface A {\n"); >+ buf.append(" void myAbstractM();\n"); >+ buf.append("}\n"); >+ ICompilationUnit cu= pack1.createCompilationUnit("I6.java", buf.toString(), false, null); >+ >+ String str= "myAbs"; >+ int offset= buf.toString().indexOf(str) + str.length(); >+ >+ CompletionProposalCollector collector= createCollector(cu, offset); >+ collector.setReplacementLength(0); >+ codeComplete(cu, offset, collector); >+ >+ IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); >+ assertEquals(2, proposals.length); >+ IEditorPart part= JavaUI.openInEditor(cu); >+ IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); >+ proposals[0].apply(doc); >+ >+ buf= new StringBuffer(); >+ buf.append("package test1;\n"); >+ buf.append("\n"); >+ buf.append("public interface I6 extends A {\n"); >+ buf.append(" /* (non-Javadoc)\n"); >+ buf.append(" * @see test1.A#myAbstractM()\n"); >+ buf.append(" */\n"); >+ buf.append(" @Override\n"); >+ buf.append(" public default void myAbstractM() {\n"); >+ buf.append(" //TODO\n"); >+ buf.append(" \n"); >+ buf.append(" }\n"); >+ buf.append("}\n"); >+ buf.append("\n"); >+ buf.append("interface A {\n"); >+ buf.append(" void myAbstractM();\n"); >+ buf.append("}\n"); >+ assertEquals(buf.toString(), doc.get()); >+ } > } >diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java >index 66c3f19..c6f2fd5 100644 >--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java >+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2014 IBM Corporation and others. >+ * Copyright (c) 2000, 2015 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 >@@ -350,7 +350,9 @@ > > String delimiter= unit.findRecommendedLineSeparator(); > int modifiers= binding.getModifiers(); >- if (!(inInterface && Modifier.isAbstract(modifiers))) { >+ ITypeBinding declaringType= binding.getDeclaringClass(); >+ ITypeBinding typeObject= ast.resolveWellKnownType("java.lang.Object"); //$NON-NLS-1$ >+ if (!(inInterface && declaringType == typeObject)) { > // generate a method body > > Map<String, String> options= javaProject.getOptions(true); >@@ -368,7 +370,6 @@ > } > } else { > SuperMethodInvocation invocation= ast.newSuperMethodInvocation(); >- ITypeBinding declaringType= binding.getDeclaringClass(); > if (declaringType.isInterface()) { > String qualifier= imports.addImport(declaringType.getErasure(), context); > Name name= ASTNodeFactory.newName(ast, qualifier); >@@ -405,7 +406,11 @@ > decl.setJavadoc(javadoc); > } > } >- if (settings != null && settings.overrideAnnotation && JavaModelUtil.is50OrHigher(javaProject)) { >+ boolean overrideAnnotationRequired= settings != null && settings.overrideAnnotation && JavaModelUtil.is50OrHigher(javaProject); >+ if (inInterface && declaringType == typeObject && !Modifier.isPublic(modifiers)) { >+ overrideAnnotationRequired= false; >+ } >+ if (overrideAnnotationRequired) { > addOverrideAnnotation(javaProject, rewrite, decl, binding); > } > >@@ -661,15 +666,19 @@ > > private static List<IExtendedModifier> getImplementationModifiers(AST ast, IMethodBinding method, boolean inInterface, ImportRewrite importRewrite, ImportRewriteContext context) throws JavaModelException { > IJavaProject javaProject= importRewrite.getCompilationUnit().getJavaProject(); >- int modifiers= method.getModifiers() & ~Modifier.ABSTRACT & ~Modifier.NATIVE & ~Modifier.PRIVATE; >+ int modifiers= method.getModifiers(); > if (inInterface) { > modifiers= modifiers & ~Modifier.PROTECTED; > if (!method.getDeclaringClass().isInterface() ) { > modifiers= modifiers | Modifier.PUBLIC; > } >+ if (Modifier.isAbstract(modifiers)) { >+ modifiers= modifiers | Modifier.DEFAULT; >+ } > } else { > modifiers= modifiers & ~Modifier.DEFAULT; > } >+ modifiers= modifiers & ~Modifier.ABSTRACT & ~Modifier.NATIVE & ~Modifier.PRIVATE; > IAnnotationBinding[] annotations= method.getAnnotations(); > > if (modifiers != Modifier.NONE && annotations.length > 0) { >@@ -729,7 +738,7 @@ > IMethodBinding[] typeMethods= typeBinding.getDeclaredMethods(); > for (int index= 0; index < typeMethods.length; index++) { > final int modifiers= typeMethods[index].getModifiers(); >- if (!typeMethods[index].isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers)) >+ if (!typeMethods[index].isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers) && !Modifier.isFinal(modifiers)) > allMethods.add(typeMethods[index]); > } > ITypeBinding clazz= typeBinding.getSuperclass(); >@@ -737,7 +746,7 @@ > IMethodBinding[] methods= clazz.getDeclaredMethods(); > for (int offset= 0; offset < methods.length; offset++) { > final int modifiers= methods[offset].getModifiers(); >- if (!methods[offset].isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers)) { >+ if (!methods[offset].isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers) && !Modifier.isFinal(modifiers)) { > if (findOverridingMethod(methods[offset], allMethods) == null) > allMethods.add(methods[offset]); > } >@@ -756,15 +765,6 @@ > getOverridableMethods(ast, ast.resolveWellKnownType("java.lang.Object"), allMethods); //$NON-NLS-1$ > if (!isSubType) > allMethods.removeAll(Arrays.asList(typeMethods)); >- int modifiers= 0; >- if (!typeBinding.isInterface()) { >- for (int index= allMethods.size() - 1; index >= 0; index--) { >- IMethodBinding method= allMethods.get(index); >- modifiers= method.getModifiers(); >- if (Modifier.isFinal(modifiers)) >- allMethods.remove(index); >- } >- } > return allMethods.toArray(new IMethodBinding[allMethods.size()]); > } > >@@ -772,8 +772,8 @@ > IMethodBinding[] methods= superBinding.getDeclaredMethods(); > for (int offset= 0; offset < methods.length; offset++) { > final int modifiers= methods[offset].getModifiers(); >- if (!methods[offset].isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers)) { >- if (findOverridingMethod(methods[offset], allMethods) == null && !Modifier.isStatic(modifiers)) >+ if (!methods[offset].isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers) && !Modifier.isFinal(modifiers)) { >+ if (findOverridingMethod(methods[offset], allMethods) == null) > allMethods.add(methods[offset]); > } > } >diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java >index 9cce445..b1a5fa2 100644 >--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java >+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OverrideMethodsAction.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2011 IBM Corporation and others. >+ * Copyright (c) 2000, 2015 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 >@@ -184,7 +184,7 @@ > notifyResult(false); > return; > } >- if (type.isInterface()) { >+ if (type.isInterface() && !JavaModelUtil.is18OrHigher(type.getJavaProject())) { > MessageDialog.openInformation(getShell(), getDialogTitle(), ActionMessages.OverrideMethodsAction_interface_not_applicable); > notifyResult(false); > return;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 460521
: 251064