blob: 6b0ad564764d53171aaa8343618e49dcb5816f5b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2020 GK Software AG, 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
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Stephan Herrmann <stephan.herrmann@berlin.de> - initial API and implementation - https://bugs.eclipse.org/425183
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.text.tests.contentassist;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.Hashtable;
import org.junit.Rule;
import org.junit.Test;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jdt.testplugin.NullTestUtils;
import org.eclipse.jdt.testplugin.TestOptions;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
import org.eclipse.jdt.internal.core.manipulation.CodeTemplateContextType;
import org.eclipse.jdt.internal.core.manipulation.StubUtility;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.PreferenceConstants;
import org.eclipse.jdt.ui.tests.core.rules.Java1d8ProjectTestSetup;
import org.eclipse.jdt.ui.text.java.CompletionProposalCollector;
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
/**
* Those tests are made to run on Java Spider 1.8 .
*/
public class CodeCompletionTest1d8 extends AbstractCompletionTest {
@Rule
public Java1d8ProjectTestSetup j18s= new Java1d8ProjectTestSetup();
private IJavaProject fJProject1;
@Override
public void setUp() throws Exception {
fJProject1= j18s.getProject();
Hashtable<String, String> options= TestOptions.getDefaultOptions();
options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, "1");
options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);
options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_SIZE, "4");
options.put(JavaCore.CODEASSIST_FIELD_PREFIXES, "f");
JavaCore.setOptions(options);
IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, true);
store.setValue(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS, false);
store.setValue(PreferenceConstants.CODEASSIST_SHOW_VISIBLE_PROPOSALS, false);
StubUtility.setCodeTemplate(CodeTemplateContextType.OVERRIDECOMMENT_ID, "/* (non-Javadoc)\n * ${see_to_overridden}\n */", null);
StubUtility.setCodeTemplate(CodeTemplateContextType.DELEGATECOMMENT_ID, "/* (non-Javadoc)\n * ${see_to_target}\n */", null);
StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "//TODO\n${body_statement}", null);
StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORCOMMENT_ID, "/**\n * Constructor.\n */", null);
StubUtility.setCodeTemplate(CodeTemplateContextType.METHODCOMMENT_ID, "/**\n * Method.\n */", null);
StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "//TODO\n${body_statement}", null);
StubUtility.setCodeTemplate(CodeTemplateContextType.GETTERCOMMENT_ID, "/**\n * @return the ${bare_field_name}\n */", fJProject1);
StubUtility.setCodeTemplate(CodeTemplateContextType.SETTERCOMMENT_ID, "/**\n * @param ${param} the ${bare_field_name} to set\n */", fJProject1);
}
@Override
public void tearDown() throws Exception {
IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
store.setToDefault(PreferenceConstants.CODEGEN_ADD_COMMENTS);
store.setToDefault(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS);
store.setToDefault(PreferenceConstants.CODEASSIST_SHOW_VISIBLE_PROPOSALS);
closeAllEditors();
JavaProjectHelper.clear(fJProject1, j18s.getDefaultClasspath());
}
public static void closeEditor(IEditorPart editor) {
IWorkbenchPartSite site;
IWorkbenchPage page;
if (editor != null && (site= editor.getSite()) != null && (page= site.getPage()) != null)
page.closeEditor(editor, false);
}
public static void closeAllEditors() {
for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
for (IWorkbenchPage page : window.getPages()) {
for (IEditorReference editorReference : page.getEditorReferences()) {
closeEditor(editorReference.getEditor(false));
}
}
}
}
private CompletionProposalCollector createCollector(ICompilationUnit cu, int offset) throws PartInitException, JavaModelException {
CompletionProposalCollector collector= new CompletionProposalCollector(cu);
collector.setInvocationContext(createContext(offset, cu));
return collector;
}
private JavaContentAssistInvocationContext createContext(int offset, ICompilationUnit cu) throws PartInitException, JavaModelException {
JavaEditor editor= (JavaEditor) JavaUI.openInEditor(cu);
ISourceViewer viewer= editor.getViewer();
return new JavaContentAssistInvocationContext(viewer, offset, editor);
}
private void codeComplete(ICompilationUnit cu, int offset, CompletionProposalCollector collector) throws JavaModelException {
cu.codeComplete(offset, collector, new NullProgressMonitor());
}
@Test
public void testBug425183_comment8() throws CoreException {
IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
String contents=
"package test1\n" +
"public class X {\n" +
" void foo() {\n" +
" java.util.Comparator.reverseOrder(). // content assist after '.' => NPE\n" +
" }\n" +
"}\n";
ICompilationUnit cu= pack1.createCompilationUnit("X.java", contents, false, null);
String str= "java.util.Comparator.reverseOrder().";
int offset= contents.indexOf(str) + str.length();
CompletionProposalCollector collector= createCollector(cu, offset);
collector.setReplacementLength(0);
codeComplete(cu, offset, collector);
ICompletionProposal proposal= null;
for (IJavaCompletionProposal curr : collector.getJavaCompletionProposals()) {
if (curr.getDisplayString().startsWith("thenComparingLong")) {
assertNull("more than one proposal for thenComparingLong()", proposal);
proposal= curr;
}
}
assertNotNull("no proposal for thenComparingLong()", proposal);
IEditorPart part= JavaUI.openInEditor(cu);
IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput());
proposal.apply(doc);
String expectedContents=
"package test1\n" +
"public class X {\n" +
" void foo() {\n" +
" java.util.Comparator.reverseOrder().thenComparingLong() // content assist after '.' => NPE\n" +
" }\n" +
"}\n";
assertEquals(expectedContents, doc.get());
}
@Test
public void testOverride1() 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("public class Main {\n");
buf.append(" private static class Cls implements Interface {\n");
buf.append(" hello\n");
buf.append(" }\n");
buf.append(" private static interface Interface {\n");
buf.append(" default void hello() {\n");
buf.append(" System.out.println(\"Hello\");\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append("}\n");
ICompilationUnit cu= pack1.createCompilationUnit("Main.java", buf.toString(), false, null);
String str= "hello";
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("public class Main {\n");
buf.append(" private static class Cls implements Interface {\n");
buf.append(" /* (non-Javadoc)\n");
buf.append(" * @see test1.Main.Interface#hello()\n");
buf.append(" */\n");
buf.append(" @Override\n");
buf.append(" public void hello() {\n");
buf.append(" //TODO\n");
buf.append(" Interface.super.hello();\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append(" private static interface Interface {\n");
buf.append(" default void hello() {\n");
buf.append(" System.out.println(\"Hello\");\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
public void testOverride2() 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("public class Main {\n");
buf.append(" private static interface Bar extends Foo {\n");
buf.append(" hello\n");
buf.append(" }\n");
buf.append(" private static interface Foo {\n");
buf.append(" default void hello() {\n");
buf.append(" System.out.println(\"Hello\");\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append("}\n");
ICompilationUnit cu= pack1.createCompilationUnit("Main.java", buf.toString(), false, null);
String str= "hello";
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("public class Main {\n");
buf.append(" private static interface Bar extends Foo {\n");
buf.append(" /* (non-Javadoc)\n");
buf.append(" * @see test1.Main.Foo#hello()\n");
buf.append(" */\n");
buf.append(" @Override\n");
buf.append(" default void hello() {\n");
buf.append(" //TODO\n");
buf.append(" Foo.super.hello();\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append(" private static interface Foo {\n");
buf.append(" default void hello() {\n");
buf.append(" System.out.println(\"Hello\");\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
public void testOverride3() 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("public interface I {\n");
buf.append(" default int getSize(String name) {\n");
buf.append(" return name.length();\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("interface I2 extends I {\n");
buf.append(" getSize\n");
buf.append("}\n");
ICompilationUnit cu= pack1.createCompilationUnit("I.java", buf.toString(), false, null);
String str= "getSize";
int offset= buf.toString().lastIndexOf(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("public interface I {\n");
buf.append(" default int getSize(String name) {\n");
buf.append(" return name.length();\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("interface I2 extends I {\n");
buf.append(" /* (non-Javadoc)\n");
buf.append(" * @see test1.I#getSize(java.lang.String)\n");
buf.append(" */\n");
buf.append(" @Override\n");
buf.append(" default int getSize(String name) {\n");
buf.append(" //TODO\n");
buf.append(" return I.super.getSize(name);\n");
buf.append(" }\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
public void testOverride4() 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("import java.util.Collection;\n");
buf.append("abstract class X implements Collection<Integer> {\n");
buf.append(" parallelS\n");
buf.append("}\n");
ICompilationUnit cu= pack1.createCompilationUnit("X.java", buf.toString(), false, null);
String str= "parallelS";
int offset= buf.toString().lastIndexOf(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("import java.util.Collection;\n");
buf.append("import java.util.stream.Stream;\n");
buf.append("abstract class X implements Collection<Integer> {\n");
buf.append(" /* (non-Javadoc)\n");
buf.append(" * @see java.util.Collection#parallelStream()\n");
buf.append(" */\n");
buf.append(" @Override\n");
buf.append(" public Stream<Integer> parallelStream() {\n");
buf.append(" //TODO\n");
buf.append(" return Collection.super.parallelStream();\n");
buf.append(" }\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
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(" boolean equals(Object arg0);\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
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(" int hashCode();\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
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(" String toString();\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
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(" Object clone() throws CloneNotSupportedException;\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
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(" void finalize() throws Throwable;\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
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(" 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());
}
@Test
public void testOverride11() throws CoreException {
IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
IPackageFragment pack1= sourceFolder.createPackageFragment("pp", false, null);
StringBuffer buf= new StringBuffer();
buf.append("package pp;\n");
buf.append("\n");
buf.append("public class CC implements I2 {\n");
buf.append(" dispose\n");
buf.append("}\n");
buf.append("interface I2 {\n");
buf.append(" default void dispose2() {\n");
buf.append(" }\n");
buf.append("}\n");
ICompilationUnit cu= pack1.createCompilationUnit("CC.java", buf.toString(), false, null);
String str= "dispose";
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 pp;\n");
buf.append("\n");
buf.append("public class CC implements I2 {\n");
buf.append(" /* (non-Javadoc)\n");
buf.append(" * @see pp.I2#dispose2()\n");
buf.append(" */\n");
buf.append(" @Override\n");
buf.append(" public void dispose2() {\n");
buf.append(" //TODO\n");
buf.append(" I2.super.dispose2();\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("interface I2 {\n");
buf.append(" default void dispose2() {\n");
buf.append(" }\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
public void testOverride12() throws CoreException {
IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
IPackageFragment pack1= sourceFolder.createPackageFragment("pp", false, null);
StringBuffer buf= new StringBuffer();
buf.append("package pp;\n");
buf.append("\n");
buf.append("public class CC extends S1 {\n");
buf.append(" dispose\n");
buf.append("}\n");
buf.append("class S1 {\n");
buf.append(" void dispose1() {\n");
buf.append(" }\n");
buf.append("}\n");
ICompilationUnit cu= pack1.createCompilationUnit("CC.java", buf.toString(), false, null);
String str= "dispose";
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 pp;\n");
buf.append("\n");
buf.append("public class CC extends S1 {\n");
buf.append(" /* (non-Javadoc)\n");
buf.append(" * @see pp.S1#dispose1()\n");
buf.append(" */\n");
buf.append(" @Override\n");
buf.append(" void dispose1() {\n");
buf.append(" //TODO\n");
buf.append(" super.dispose1();\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("class S1 {\n");
buf.append(" void dispose1() {\n");
buf.append(" }\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
@Test
public void testOverride13() throws CoreException {
IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
IPackageFragment pack1= sourceFolder.createPackageFragment("pp", false, null);
StringBuffer buf= new StringBuffer();
buf.append("package pp;\n");
buf.append("\n");
buf.append("public class CC extends S1 {\n");
buf.append(" dispose\n");
buf.append("}\n");
buf.append("class S1 implements I1 {\n");
buf.append(" void dispose1() {\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("interface I1 {\n");
buf.append(" default void dispose() {\n");
buf.append(" }\n");
buf.append("}\n");
ICompilationUnit cu= pack1.createCompilationUnit("CC.java", buf.toString(), false, null);
String str= "dispose";
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 pp;\n");
buf.append("\n");
buf.append("public class CC extends S1 {\n");
buf.append(" /* (non-Javadoc)\n");
buf.append(" * @see pp.I1#dispose()\n");
buf.append(" */\n");
buf.append(" @Override\n");
buf.append(" public void dispose() {\n");
buf.append(" //TODO\n");
buf.append(" super.dispose();\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("class S1 implements I1 {\n");
buf.append(" void dispose1() {\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("interface I1 {\n");
buf.append(" default void dispose() {\n");
buf.append(" }\n");
buf.append("}\n");
assertEquals(buf.toString(), doc.get());
}
private static void assertNumberOf(String name, int is, int expected) {
assertEquals("Wrong number of " + name + ", is: " + is + ", expected: " + expected, expected, is);
}
@Test
public void testBug528871() throws Exception {
IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
NullTestUtils.prepareNullTypeAnnotations(sourceFolder);
try {
IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
StringBuffer buf= new StringBuffer();
buf.append("package test1;\n");
buf.append("\n");
buf.append("import annots.NonNull;\n");
buf.append("import annots.NonNullByDefault;\n");
buf.append("\n");
buf.append("interface A {\n");
buf.append(" @NonNull String m();\n");
buf.append("}\n");
buf.append("\n");
buf.append("@NonNullByDefault\n");
buf.append("public class Test {\n");
buf.append(" void f() {\n");
buf.append(" new A()\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("");
String contents= buf.toString();
ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null);
String str= "new A(";
int offset= contents.indexOf(str) + str.length();
CompletionProposalCollector collector= createCollector(cu, offset);
collector.setReplacementLength(0);
codeComplete(cu, offset, collector);
IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
assertNumberOf("proposals", proposals.length, 1);
IDocument doc= new Document(contents);
proposals[0].apply(doc);
buf= new StringBuffer();
buf.append("package test1;\n");
buf.append("\n");
buf.append("import annots.NonNull;\n");
buf.append("import annots.NonNullByDefault;\n");
buf.append("\n");
buf.append("interface A {\n");
buf.append(" @NonNull String m();\n");
buf.append("}\n");
buf.append("\n");
buf.append("@NonNullByDefault\n");
buf.append("public class Test {\n");
buf.append(" void f() {\n");
buf.append(" new A() {\n");
buf.append(" \n");
buf.append(" @Override\n");
buf.append(" public String m() {\n");
buf.append(" //TODO\n");
buf.append(" return null;\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append(" }\n");
buf.append("}\n");
buf.append("");
assertEquals(buf.toString(), doc.get());
} finally {
NullTestUtils.disableAnnotationBasedNullAnalysis(sourceFolder);
}
}
}