| /******************************************************************************* |
| * 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 |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Stephan Herrmann - Contribution for Bug 463360 - [override method][null] generating method override should not create redundant null annotations |
| *******************************************************************************/ |
| package org.eclipse.jdt.text.tests.contentassist; |
| |
| import java.io.BufferedReader; |
| import java.io.File; |
| import java.io.FileNotFoundException; |
| import java.io.FileReader; |
| import java.io.IOException; |
| import java.util.Arrays; |
| import java.util.Hashtable; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.jdt.testplugin.JavaProjectHelper; |
| import org.eclipse.jdt.testplugin.TestOptions; |
| import org.eclipse.test.OrderedTestSuite; |
| |
| 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.jface.text.templates.Template; |
| import org.eclipse.jface.text.templates.persistence.TemplateStore; |
| |
| 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.CompletionContext; |
| import org.eclipse.jdt.core.CompletionProposal; |
| import org.eclipse.jdt.core.IBuffer; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IJavaElement; |
| 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.corext.codemanipulation.StubUtility; |
| import org.eclipse.jdt.internal.corext.template.java.CodeTemplateContextType; |
| import org.eclipse.jdt.internal.corext.template.java.JavaContextType; |
| import org.eclipse.jdt.internal.corext.util.JavaModelUtil; |
| |
| import org.eclipse.jdt.ui.JavaUI; |
| import org.eclipse.jdt.ui.PreferenceConstants; |
| import org.eclipse.jdt.ui.SharedASTProvider; |
| import org.eclipse.jdt.ui.tests.core.ProjectTestSetup; |
| import org.eclipse.jdt.ui.text.java.CompletionProposalCollector; |
| import org.eclipse.jdt.ui.text.java.CompletionProposalComparator; |
| 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; |
| import org.eclipse.jdt.internal.ui.text.java.AbstractJavaCompletionProposal; |
| import org.eclipse.jdt.internal.ui.text.java.FillArgumentNamesCompletionProposalCollector; |
| import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer; |
| import org.eclipse.jdt.internal.ui.text.java.JavaNoTypeCompletionProposalComputer; |
| |
| import junit.extensions.TestSetup; |
| import junit.framework.Test; |
| |
| |
| public class CodeCompletionTest extends AbstractCompletionTest { |
| |
| private final static boolean BUG_80782= true; |
| |
| private static final Class<CodeCompletionTest> THIS= CodeCompletionTest.class; |
| |
| public static Test suite() { |
| OrderedTestSuite suite= new OrderedTestSuite(THIS); //predictable order for https://bugs.eclipse.org/bugs/show_bug.cgi?id=423416 |
| return new TestSetup(suite) { |
| @Override |
| protected void setUp() throws Exception { |
| JavaProjectHelper.PERFORM_DUMMY_SEARCH++; |
| super.setUp(); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| JavaProjectHelper.PERFORM_DUMMY_SEARCH--; |
| } |
| }; |
| } |
| |
| private IJavaProject fJProject1; |
| |
| |
| private void assertAppliedProposal(String contents, IJavaCompletionProposal proposal, String completion) { |
| IDocument doc= new Document(contents); |
| proposal.apply(doc); |
| int offset2= contents.indexOf("//here"); |
| String result= contents.substring(0, offset2) + completion + contents.substring(offset2); |
| assertEquals(doc.get(), result); |
| } |
| |
| private void codeComplete(ICompilationUnit cu, int offset, CompletionProposalCollector collector) throws JavaModelException { |
| // logging for https://bugs.eclipse.org/bugs/show_bug.cgi?id=423416 |
| System.out.println(); |
| System.out.println("---- " + getClass().getName() + "#" + getName() + " ----"); |
| System.out.println("offset: " + offset); |
| System.out.println("cu: " + cu); |
| IBuffer buffer= cu.getBuffer(); |
| System.out.println("buffer: " + buffer); |
| System.out.println("source: |" + buffer.getContents() + "|"); |
| |
| System.out.print("file contents: |"); |
| File file= cu.getResource().getLocation().toFile(); |
| try { |
| BufferedReader reader= new BufferedReader(new FileReader(file)); |
| String line; |
| while ((line= reader.readLine()) != null) { |
| System.out.println(line); |
| } |
| System.out.println("|"); |
| reader.close(); |
| } catch (FileNotFoundException e1) { |
| e1.printStackTrace(); |
| } catch (IOException e1) { |
| e1.printStackTrace(); |
| } |
| System.out.println(); |
| |
| IJavaProject project= cu.getJavaProject(); |
| System.out.println(project); |
| for (IPackageFragmentRoot root : project.getAllPackageFragmentRoots()) { |
| if (root.getKind() == IPackageFragmentRoot.K_SOURCE) { |
| for (IJavaElement pack : root.getChildren()) { |
| ((IPackageFragment) pack).getChildren(); // side-effect: opens the package |
| System.out.println(pack); |
| } |
| } |
| } |
| System.out.println(); |
| |
| cu.codeComplete(offset, collector, new NullProgressMonitor()); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin"); |
| JavaProjectHelper.addRTJar(fJProject1); |
| JavaProjectHelper.addRequiredProject(fJProject1, ProjectTestSetup.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 |
| protected 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.delete(fJProject1); |
| } |
| |
| 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() { |
| IWorkbenchWindow[] windows= PlatformUI.getWorkbench().getWorkbenchWindows(); |
| for (int i= 0; i < windows.length; i++) { |
| IWorkbenchPage[] pages= windows[i].getPages(); |
| for (int j= 0; j < pages.length; j++) { |
| IEditorReference[] editorReferences= pages[j].getEditorReferences(); |
| for (int k= 0; k < editorReferences.length; k++) |
| closeEditor(editorReferences[k].getEditor(false)); |
| } |
| } |
| } |
| |
| public void testAnonymousTypeCompletion1() throws Exception { |
| 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 A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" Runnable run= new Runnable(\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "Runnable run= new Runnable("; |
| |
| 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" + |
| "public class A {\n" + |
| " public void foo() {\n" + |
| " Runnable run= new Runnable() {\n" + |
| " \n" + |
| " public void run() {\n" + |
| " //TODO\n" + |
| " \n" + |
| " }\n" + |
| " };\n" + |
| " }\n" + |
| "}\n" + |
| ""); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletion2() throws Exception { |
| 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 A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" Runnable run= new Runnable();\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "Runnable run= new Runnable("; |
| |
| 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" + |
| "public class A {\n" + |
| " public void foo() {\n" + |
| " Runnable run= new Runnable() {\n" + |
| " \n" + |
| " public void run() {\n" + |
| " //TODO\n" + |
| " \n" + |
| " }\n" + |
| " };\n" + |
| " }\n" + |
| "}\n" + |
| ""); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletion3() throws Exception { |
| 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 A {\n"); |
| buf.append(" interface Inner {\n"); |
| buf.append(" void doIt();\n"); |
| buf.append(" }\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" Inner inner= new Inner();\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "Inner inner= new Inner("; |
| |
| 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("public class A {\n"); |
| buf.append(" interface Inner {\n"); |
| buf.append(" void doIt();\n"); |
| buf.append(" }\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" Inner inner= new Inner() {\n"); |
| buf.append(" \n"); |
| buf.append(" public void doIt() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" \n"); |
| buf.append(" }\n"); |
| buf.append(" };\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletion4() throws Exception { |
| 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 A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" abstract class Local {\n"); |
| buf.append(" abstract void doIt();\n"); |
| buf.append(" }\n"); |
| buf.append(" Local loc= new Local();\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "Local loc= new Local("; |
| |
| 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("public class A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" abstract class Local {\n"); |
| buf.append(" abstract void doIt();\n"); |
| buf.append(" }\n"); |
| buf.append(" Local loc= new Local() {\n"); |
| buf.append(" \n"); |
| buf.append(" @Override\n"); |
| buf.append(" void doIt() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" \n"); |
| buf.append(" }\n"); |
| buf.append(" };\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletion5() throws Exception { |
| 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 A {\n"); |
| buf.append(" abstract class Local<E> {\n"); |
| buf.append(" abstract E doIt();\n"); |
| buf.append(" }\n"); |
| buf.append(" public void foo() {\n"); |
| |
| buf.append(" new Local<String>(\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "new Local<String>("; |
| |
| 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("public class A {\n"); |
| buf.append(" abstract class Local<E> {\n"); |
| buf.append(" abstract E doIt();\n"); |
| buf.append(" }\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" new Local<String>() {\n"); |
| buf.append(" \n"); |
| buf.append(" @Override\n"); |
| buf.append(" String doIt() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" return null;\n"); |
| buf.append(" }\n"); |
| buf.append(" };\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletion6() throws Exception { |
| 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.io.Serializable;\n"); |
| buf.append("//BUG\n"); |
| buf.append("public class A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" Serializable run= new Serializable(\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "Serializable run= new Serializable("; |
| |
| 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" + |
| "import java.io.Serializable;\n"+ |
| "//BUG\n"+ |
| "public class A {\n" + |
| " public void foo() {\n" + |
| " Serializable run= new Serializable() {\n" + |
| " };\n" + |
| " }\n" + |
| "}\n" + |
| ""); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| private void prepareNullAnnotations(IPackageFragmentRoot sourceFolder) throws JavaModelException { |
| Map<String, String> options= fJProject1.getOptions(true); |
| options.put(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED); |
| options.put(JavaCore.COMPILER_NONNULL_ANNOTATION_NAME, "annots.NonNull"); |
| options.put(JavaCore.COMPILER_NULLABLE_ANNOTATION_NAME, "annots.Nullable"); |
| options.put(JavaCore.COMPILER_NONNULL_BY_DEFAULT_ANNOTATION_NAME, "annots.NonNullByDefault"); |
| fJProject1.setOptions(options); |
| |
| IPackageFragment pack0= sourceFolder.createPackageFragment("annots", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package annots;\n"); |
| buf.append("\n"); |
| buf.append("@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS)\n"); |
| buf.append("public @interface NonNull {}\n"); |
| pack0.createCompilationUnit("NonNull.java", buf.toString(), false, null); |
| |
| buf= new StringBuffer(); |
| buf.append("package annots;\n"); |
| buf.append("\n"); |
| buf.append("@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS)\n"); |
| buf.append("public @interface Nullable {}\n"); |
| pack0.createCompilationUnit("Nullable.java", buf.toString(), false, null); |
| |
| buf= new StringBuffer(); |
| buf.append("package annots;\n"); |
| buf.append("\n"); |
| buf.append("@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS)\n"); |
| buf.append("public enum DefaultLocation { PARAMETER, RETURN_TYPE, FIELD, TYPE_BOUND, TYPE_ARGUMENT, ARRAY_CONTENTS, TYPE_PARAMETER }\n"); |
| pack0.createCompilationUnit("DefaultLocation.java", buf.toString(), false, null); |
| |
| buf= new StringBuffer(); |
| buf.append("package annots;\n"); |
| buf.append("\n"); |
| buf.append("import java.lang.annotation.ElementType\n"); |
| buf.append("@Target({ ElementType.PACKAGE, ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE })\n"); |
| buf.append("@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS)\n"); |
| buf.append("public @interface NonNullByDefault { DefaultLocation[] value() default {PARAMETER, RETURN_TYPE, FIELD, TYPE_BOUND, TYPE_ARGUMENT} }\n"); |
| pack0.createCompilationUnit("NonNullByDefault.java", buf.toString(), false, null); |
| } |
| |
| // same CU |
| // @NonNullByDefault on class |
| // -> don't insert redundant @NonNull |
| public void testAnonymousTypeCompletion7() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| prepareNullAnnotations(sourceFolder); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| String before= "package test1;\n" + |
| "import annots.*;\n" + |
| "interface Ifc {\n" + |
| " @NonNull Object test(@Nullable Object i1, @NonNull Object i2);\n" + |
| "}\n" + |
| "@NonNullByDefault\n" + |
| "public class A {\n" + |
| " public void foo() {\n" + |
| " Ifc ifc= new Ifc("; |
| String after= " }\n" + |
| "}\n"; |
| String contents= before + '\n' + after; |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| int offset= before.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); |
| |
| String expected= before |
| + |
| ") {\n" + |
| " \n" + |
| " public Object test(@Nullable Object i1, Object i2) {\n" + |
| " //TODO\n" + |
| " return null;\n" + |
| " }\n" + |
| " };\n" |
| + after; |
| assertEquals(expected, doc.get()); |
| } |
| |
| // not same CU |
| // @NonNullByDefault on method |
| // anonymous class is argument in a method invocation. |
| // -> don't insert redundant @NonNull |
| public void testAnonymousTypeCompletion8() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| prepareNullAnnotations(sourceFolder); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| |
| String ifcContents= |
| "package test1;\n" + |
| "import annots.*;\n" + |
| "public interface Ifc {\n" + |
| " @NonNull Object test(@Nullable Object i1, @NonNull Object i2);\n" + |
| "}\n"; |
| pack1.createCompilationUnit("Ifc.java", ifcContents, false, null); |
| |
| String before= |
| "package test1;\n" + |
| "import annots.*;\n" + |
| "public class A {\n" + |
| " void bar(Ifc i) {}\n" + |
| " @NonNullByDefault\n" + |
| " public void foo() {\n" + |
| " bar(new Ifc("; |
| String after= |
| ");\n" + |
| " }\n" + |
| "}\n"; |
| String contents= before + '\n' + after; |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| int offset= before.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); |
| |
| String expected= before |
| + |
| ") {\n" + |
| " \n" + |
| " public Object test(@Nullable Object i1, Object i2) {\n" + |
| " //TODO\n" + |
| " return null;\n" + |
| " }\n" + |
| " };\n" |
| + after; |
| assertEquals(expected, doc.get()); |
| } |
| |
| // not same CU |
| // @NonNullByDefault on field |
| // -> don't insert redundant @NonNull |
| public void testAnonymousTypeCompletion9() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| prepareNullAnnotations(sourceFolder); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| |
| String ifcContents= |
| "package test1;\n" + |
| "import annots.*;\n" + |
| "public interface Ifc {\n" + |
| " @NonNull Object test(@Nullable Object i1, @NonNull Object i2);\n" + |
| "}\n"; |
| pack1.createCompilationUnit("Ifc.java", ifcContents, false, null); |
| |
| String before= |
| "package test1;\n" + |
| "import annots.*;\n" + |
| "public class A {\n" + |
| " @NonNullByDefault\n" + |
| " Ifc ifc= new Ifc("; |
| String after= |
| "}\n"; |
| String contents= before + '\n' + after; |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| int offset= before.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); |
| |
| String expected= before |
| + |
| ") {\n" + |
| " \n" + |
| " public Object test(@Nullable Object i1, Object i2) {\n" + |
| " //TODO\n" + |
| " return null;\n" + |
| " }\n" + |
| " };\n" |
| + after; |
| assertEquals(expected, doc.get()); |
| } |
| |
| // not same CU |
| // @NonNullByDefault on class, completion in instance initializer |
| // -> don't insert redundant @NonNull |
| public void testAnonymousTypeCompletion10() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| prepareNullAnnotations(sourceFolder); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| |
| String ifcContents= |
| "package test1;\n" + |
| "import annots.*;\n" + |
| "public interface Ifc {\n" + |
| " @NonNull Object test(@Nullable Object i1, @NonNull Object i2);\n" + |
| "}\n"; |
| pack1.createCompilationUnit("Ifc.java", ifcContents, false, null); |
| |
| String before= |
| "package test1;\n" + |
| "import annots.*;\n" + |
| "@NonNullByDefault\n" + |
| "public class A {\n" + |
| " {\n" + |
| " Ifc ifc= new Ifc("; |
| String after= |
| " }\n" + |
| "}\n"; |
| String contents= before + '\n' + after; |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| int offset= before.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); |
| |
| String expected= before |
| + |
| ") {\n" + |
| " \n" + |
| " public Object test(@Nullable Object i1, Object i2) {\n" + |
| " //TODO\n" + |
| " return null;\n" + |
| " }\n" + |
| " };\n" |
| + after; |
| assertEquals(expected, doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletionBug280801() throws Exception { |
| 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 Try {\n"); |
| buf.append(" Object m() {\n"); |
| buf.append(" return new Run;\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("Try.java", contents, false, null); |
| |
| String str= "new Run"; |
| int offset= contents.indexOf(str) + str.length(); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true); |
| |
| cu.codeComplete(offset, collector, new NullProgressMonitor()); |
| |
| 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("public class Try {\n"); |
| buf.append(" Object m() {\n"); |
| buf.append(" return new Runnable() {\n"); |
| buf.append(" \n"); |
| buf.append(" public void run() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" \n"); |
| buf.append(" }\n"); |
| buf.append(" };\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals("", buf.toString(), doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletionBug324391() throws Exception { |
| 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 Try {\n"); |
| buf.append(" Object m() {\n"); |
| buf.append(" take(new Run, (String) o);\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("Try.java", contents, false, null); |
| |
| String str= "new Run"; |
| int offset= contents.indexOf(str) + str.length(); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true); |
| |
| cu.codeComplete(offset, collector, new NullProgressMonitor()); |
| |
| 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("public class Try {\n"); |
| buf.append(" Object m() {\n"); |
| buf.append(" take(new Runnable() {\n"); |
| buf.append(" \n"); |
| buf.append(" public void run() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" \n"); |
| buf.append(" }\n"); |
| buf.append(" }, (String) o);\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals("", buf.toString(), doc.get()); |
| } |
| |
| public void testAnonymousTypeCompletionBug326377() throws Exception { |
| 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 Try {\n"); |
| buf.append(" Object m() {\n"); |
| buf.append(" take(new Run)\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("Try.java", contents, false, null); |
| |
| String str= "new Run"; |
| int offset= contents.indexOf(str) + str.length(); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true); |
| |
| cu.codeComplete(offset, collector, new NullProgressMonitor()); |
| |
| 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("public class Try {\n"); |
| buf.append(" Object m() {\n"); |
| buf.append(" take(new Runnable() {\n"); |
| buf.append(" \n"); |
| buf.append(" public void run() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" \n"); |
| buf.append(" }\n"); |
| buf.append(" })\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals("", buf.toString(), doc.get()); |
| } |
| |
| public void testConstructorCompletion() throws Exception { |
| 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("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class MyClass {\n"); |
| buf.append(" private BufferedWriter writer;\n"); |
| buf.append(" //here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("MyClass.java", contents, false, null); |
| |
| IEditorPart part= JavaUI.openInEditor(cu); |
| try { |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("MyClass")) { |
| proposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for MyClass()", proposal); |
| |
| IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); |
| proposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class MyClass {\n"); |
| buf.append(" private BufferedWriter writer;\n"); |
| buf.append(" /**\n"); |
| buf.append(" * Constructor.\n"); |
| buf.append(" */\n"); |
| buf.append(" public MyClass() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append("\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } finally { |
| part.getSite().getPage().closeAllEditors(false); |
| } |
| } |
| |
| public void testEnumCompletions() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| String contents= "package test1;\n" + |
| "\n" + |
| "enum Natural {\n" + |
| " ONE,\n" + |
| " TWO,\n" + |
| " THREE\n" + |
| "}\n" + |
| "\n" + |
| "public class Completion {\n" + |
| " \n" + |
| " void foomethod() {\n" + |
| " Natu//here\n" + |
| " }\n" + |
| "}\n"; |
| ICompilationUnit cu= pack1.createCompilationUnit("Completion.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= new FillArgumentNamesCompletionProposalCollector(createContext(offset, cu)); |
| collector.setIgnored(CompletionProposal.TYPE_REF, false); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal proposal= null; |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("Natural")) { |
| proposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for enum Natural()", proposal); |
| |
| IDocument doc= new Document(contents); |
| proposal.apply(doc); |
| |
| String result= "package test1;\n" + |
| "\n" + |
| "enum Natural {\n" + |
| " ONE,\n" + |
| " TWO,\n" + |
| " THREE\n" + |
| "}\n" + |
| "\n" + |
| "public class Completion {\n" + |
| " \n" + |
| " void foomethod() {\n" + |
| " Natural//here\n" + |
| " }\n" + |
| "}\n"; |
| |
| assertEquals(result, doc.get()); |
| } |
| |
| 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); |
| } |
| |
| public void testGetterCompletion1() throws Exception { |
| 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("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class A {\n"); |
| buf.append(" private BufferedWriter fWriter;\n"); |
| buf.append(" get//here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| IEditorPart part= JavaUI.openInEditor(cu); |
| try { |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("getWriter")) { |
| proposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for getWriter()", proposal); |
| |
| IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); |
| proposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class A {\n"); |
| buf.append(" private BufferedWriter fWriter;\n"); |
| buf.append(" /**\n"); |
| buf.append(" * @return the writer\n"); |
| buf.append(" */\n"); |
| buf.append(" public BufferedWriter getWriter() {\n"); |
| buf.append(" return fWriter;\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } finally { |
| part.getSite().getPage().closeAllEditors(false); |
| } |
| } |
| |
| public void testMethodCompletion() throws Exception { |
| 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("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class A {\n"); |
| buf.append(" private BufferedWriter writer;\n"); |
| buf.append(" foo//here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| IEditorPart part= JavaUI.openInEditor(cu); |
| try { |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| IJavaCompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo")) { |
| proposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo()", proposal); |
| |
| IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); |
| proposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class A {\n"); |
| buf.append(" private BufferedWriter writer;\n"); |
| buf.append(" /**\n"); |
| buf.append(" * Method.\n"); |
| buf.append(" */\n"); |
| buf.append(" private void foo() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append("\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } finally { |
| part.getSite().getPage().closeAllEditors(false); |
| } |
| } |
| |
| public void testNormalAllMethodCompletion() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| String contents= "package test1;\n" + |
| "\n" + |
| "public class Completion {\n" + |
| " \n" + |
| " void foomethod() {\n" + |
| " Runnable run;\n" + |
| " run.//here\n" + |
| " }\n" + |
| "}\n"; |
| ICompilationUnit cu= pack1.createCompilationUnit("Completion.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| assertEquals(12, proposals.length); |
| CompletionProposalComparator comparator= new CompletionProposalComparator(); |
| comparator.setOrderAlphabetically(true); |
| Arrays.sort(proposals, comparator); |
| |
| int i= 0; |
| assertAppliedProposal(contents, proposals[i++], "clone()"); |
| assertAppliedProposal(contents, proposals[i++], "equals()"); |
| assertAppliedProposal(contents, proposals[i++], "finalize();"); |
| assertAppliedProposal(contents, proposals[i++], "getClass()"); |
| assertAppliedProposal(contents, proposals[i++], "hashCode()"); |
| assertAppliedProposal(contents, proposals[i++], "notify();"); |
| assertAppliedProposal(contents, proposals[i++], "notifyAll();"); |
| assertAppliedProposal(contents, proposals[i++], "run();"); |
| assertAppliedProposal(contents, proposals[i++], "toString()"); |
| assertAppliedProposal(contents, proposals[i++], "wait();"); |
| assertAppliedProposal(contents, proposals[i++], "wait();"); |
| assertAppliedProposal(contents, proposals[i++], "wait();"); |
| } |
| |
| public void testNormalAllMethodCompletionWithParametersGuessed() throws Exception { |
| IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore(); |
| store.setValue(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS, true); |
| |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| String contents= "package test1;\n" + |
| "\n" + |
| "public class Completion {\n" + |
| " \n" + |
| " void foomethod() {\n" + |
| " int intVal=5;\n" + |
| " long longVal=3;\n" + |
| " Runnable run;\n" + |
| " run.//here\n" + |
| " }\n" + |
| "}\n"; |
| ICompilationUnit cu= pack1.createCompilationUnit("Completion.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= new FillArgumentNamesCompletionProposalCollector(createContext(offset, cu)); |
| collector.setIgnored(CompletionProposal.METHOD_REF, false); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| CompletionProposalComparator comparator= new CompletionProposalComparator(); |
| comparator.setOrderAlphabetically(true); |
| Arrays.sort(proposals, comparator); |
| |
| int i= 0; |
| assertAppliedProposal(contents, proposals[i++], "clone()"); |
| assertAppliedProposal(contents, proposals[i++], "equals(run)"); |
| assertAppliedProposal(contents, proposals[i++], "finalize();"); |
| assertAppliedProposal(contents, proposals[i++], "getClass()"); |
| assertAppliedProposal(contents, proposals[i++], "hashCode()"); |
| assertAppliedProposal(contents, proposals[i++], "notify();"); |
| assertAppliedProposal(contents, proposals[i++], "notifyAll();"); |
| assertAppliedProposal(contents, proposals[i++], "run();"); |
| assertAppliedProposal(contents, proposals[i++], "toString()"); |
| assertAppliedProposal(contents, proposals[i++], "wait();"); |
| assertAppliedProposal(contents, proposals[i++], "wait(longVal);"); |
| assertAppliedProposal(contents, proposals[i++], "wait(longVal, intVal);"); |
| |
| assertEquals(i, proposals.length); |
| } |
| |
| public void testNormalAllMethodCompletionWithParametersNames() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| String contents= "package test1;\n" + |
| "\n" + |
| "public class Completion {\n" + |
| " \n" + |
| " void foomethod() {\n" + |
| " int i=5;\n" + |
| " long l=3;\n" + |
| " Runnable run;\n" + |
| " run.//here\n" + |
| " }\n" + |
| "}\n"; |
| ICompilationUnit cu= pack1.createCompilationUnit("Completion.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= new FillArgumentNamesCompletionProposalCollector(createContext(offset, cu)); |
| collector.setIgnored(CompletionProposal.METHOD_REF, false); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| CompletionProposalComparator comparator= new CompletionProposalComparator(); |
| comparator.setOrderAlphabetically(true); |
| Arrays.sort(proposals, comparator); |
| |
| int i= 0; |
| assertAppliedProposal(contents, proposals[i++], "clone()"); |
| assertAppliedProposal(contents, proposals[i++], "equals(arg0)"); |
| assertAppliedProposal(contents, proposals[i++], "finalize();"); |
| assertAppliedProposal(contents, proposals[i++], "getClass()"); |
| assertAppliedProposal(contents, proposals[i++], "hashCode()"); |
| assertAppliedProposal(contents, proposals[i++], "notify();"); |
| assertAppliedProposal(contents, proposals[i++], "notifyAll();"); |
| assertAppliedProposal(contents, proposals[i++], "run();"); |
| assertAppliedProposal(contents, proposals[i++], "toString()"); |
| assertAppliedProposal(contents, proposals[i++], "wait();"); |
| assertAppliedProposal(contents, proposals[i++], "wait(arg0);"); |
| assertAppliedProposal(contents, proposals[i++], "wait(arg0, arg1);"); |
| |
| assertEquals(i, proposals.length); |
| } |
| |
| public void testNormalMethodCompletion() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| String contents= "package test1;\n" + |
| "\n" + |
| "public class Completion {\n" + |
| " \n" + |
| " void foomethod() {\n" + |
| " this.foo//here\n" + |
| " }\n" + |
| "}\n"; |
| ICompilationUnit cu= pack1.createCompilationUnit("Completion.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| IJavaCompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo")) { |
| proposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foomethod()", proposal); |
| |
| IDocument doc= new Document(contents); |
| proposal.apply(doc); |
| |
| String result= "package test1;\n" + |
| "\n" + |
| "public class Completion {\n" + |
| " \n" + |
| " void foomethod() {\n" + |
| " this.foomethod();//here\n" + |
| " }\n" + |
| "}\n"; |
| |
| assertEquals(result, doc.get()); |
| } |
| |
| public void testOverrideCompletion1() throws Exception { |
| 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("import java.io.Writer;\n"); |
| buf.append("\n"); |
| buf.append("public class A extends Writer {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append(" //here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal toStringProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("toString()")) { |
| toStringProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for toString()", toStringProposal); |
| |
| IDocument doc= new Document(contents); |
| toStringProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.io.Writer;\n"); |
| buf.append("\n"); |
| buf.append("public class A extends Writer {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\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(" //TODO\n"); |
| buf.append(" return super.toString();\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion2() throws Exception { |
| 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("import java.io.Writer;\n"); |
| buf.append("\n"); |
| buf.append("public class A extends Writer {\n" + |
| " public void foo() {\n" + |
| " }\n" + |
| " //here\n" + |
| "}"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal closeProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("close()")) { |
| closeProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for close()", closeProposal); |
| |
| IDocument doc= new Document(contents); |
| closeProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.io.IOException;\n"); |
| buf.append("import java.io.Writer;\n"); |
| buf.append("\n"); |
| buf.append("public class A extends Writer {\n" + |
| " public void foo() {\n" + |
| " }\n" + |
| " /* (non-Javadoc)\n" + |
| " * @see java.io.Writer#close()\n" + |
| " */\n" + |
| " @Override\n" + |
| " public void close() throws IOException {\n" + |
| " //TODO\n" + |
| " \n" + |
| " }//here\n" + |
| "}"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion3() throws Exception { |
| 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("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class A extends BufferedWriter {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append(" //here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal closeProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("close()")) { |
| closeProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for close()", closeProposal); |
| |
| IDocument doc= new Document(contents); |
| closeProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.io.BufferedWriter;\n"); |
| buf.append("import java.io.IOException;\n"); |
| buf.append("\n"); |
| buf.append("public class A extends BufferedWriter {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see java.io.BufferedWriter#close()\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" public void close() throws IOException {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.close();\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion4() throws Exception { |
| 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 class A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| pack1.createCompilationUnit("A.java", buf.toString(), false, null); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("public interface Inter {\n"); |
| buf.append(" public void foo();\n"); |
| buf.append("}\n"); |
| pack1.createCompilationUnit("Inter.java", buf.toString(), false, null); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("public class B extends A implements Inter {\n"); |
| buf.append(" foo//here\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("B.java", buf.toString(), false, null); |
| |
| String contents= buf.toString(); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| JavaModelUtil.reconcile(cu); |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal closeProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo()")) { |
| closeProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo()", closeProposal); |
| |
| IDocument doc= new Document(contents); |
| closeProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("public class B extends A implements Inter {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see test1.A#foo()\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.foo();\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion5() throws Exception { |
| if (BUG_80782) { |
| return; |
| } |
| |
| 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 class A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" new Runnable() {\n"); |
| buf.append(" ru//here\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal toStringProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("run()")) { |
| toStringProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for toString()", toStringProposal); |
| |
| IDocument doc= new Document(contents); |
| toStringProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("public class A {\n"); |
| buf.append(" public void foo() {\n"); |
| buf.append(" new Runnable() {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see java.lang.Runnable#run()\n"); |
| buf.append(" */\n"); |
| buf.append(" public void run() {\n"); |
| buf.append(" //TODO\n"); |
| buf.append("\n"); |
| buf.append(" }//here\n"); |
| buf.append(" }\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion6_bug157069() throws Exception { |
| 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 class A {\n"); |
| buf.append(" public class Sub { }\n"); |
| buf.append(" public void foo(Sub sub) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| pack1.createCompilationUnit("A.java", buf.toString(), false, null); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("public class B extends A {\n"); |
| buf.append(" foo//here\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("B.java", buf.toString(), false, null); |
| |
| String contents= buf.toString(); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| JavaModelUtil.reconcile(cu); |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal closeProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo(")) { |
| closeProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo(Sub)", closeProposal); |
| |
| IDocument doc= new Document(contents); |
| closeProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("public class B extends A {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see test1.A#foo(test1.A.Sub)\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" public void foo(Sub sub) {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.foo(sub);\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion7_bug355926() throws Exception { |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=355926 |
| 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("interface Z<T> {}\n"); |
| buf.append("\n"); |
| buf.append("class A {\n"); |
| buf.append(" void foo(Z<?>... zs) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("class B extends A {\n"); |
| buf.append(" //here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal toStringProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo")) { |
| toStringProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo(...)", toStringProposal); |
| |
| IDocument doc= new Document(contents); |
| toStringProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("interface Z<T> {}\n"); |
| buf.append("\n"); |
| buf.append("class A {\n"); |
| buf.append(" void foo(Z<?>... zs) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("class B extends A {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see test1.A#foo(test1.Z[])\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" void foo(Z<?>... zs) {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.foo(zs);\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion8_bug355926() throws Exception { |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=355926 |
| 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("interface Z<T> {}\n"); |
| buf.append("\n"); |
| buf.append("class A {\n"); |
| buf.append(" void foo(Z<?>[] zs) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("class B extends A {\n"); |
| buf.append(" //here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal toStringProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo")) { |
| toStringProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo(...)", toStringProposal); |
| |
| IDocument doc= new Document(contents); |
| toStringProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("interface Z<T> {}\n"); |
| buf.append("\n"); |
| buf.append("class A {\n"); |
| buf.append(" void foo(Z<?>[] zs) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("class B extends A {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see test1.A#foo(test1.Z[])\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" void foo(Z<?>[] zs) {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.foo(zs);\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion9_bug355926() throws Exception { |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=355926 |
| 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("import java.util.List;\n"); |
| buf.append("\n"); |
| buf.append("interface Z<T, U> {}\n"); |
| buf.append("\n"); |
| buf.append("class A {\n"); |
| buf.append(" void foo(Z<String, List<String>> zs) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("class B extends A {\n"); |
| buf.append(" //here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal toStringProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo")) { |
| toStringProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo(...)", toStringProposal); |
| |
| IDocument doc= new Document(contents); |
| toStringProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.util.List;\n"); |
| buf.append("\n"); |
| buf.append("interface Z<T, U> {}\n"); |
| buf.append("\n"); |
| buf.append("class A {\n"); |
| buf.append(" void foo(Z<String, List<String>> zs) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("class B extends A {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see test1.A#foo(test1.Z)\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" void foo(Z<String, List<String>> zs) {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.foo(zs);\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletion10_bug377184() throws Exception { |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=377184 |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("class Super<T> {\n"); |
| buf.append(" void foo(T t) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("public class Impl<T2 extends Number> extends Super<T2> {\n"); |
| buf.append(" foo//here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("Impl.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal toStringProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo")) { |
| toStringProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo(...)", toStringProposal); |
| |
| IDocument doc= new Document(contents); |
| toStringProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("class Super<T> {\n"); |
| buf.append(" void foo(T t) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("public class Impl<T2 extends Number> extends Super<T2> {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see test1.Super#foo(java.lang.Object)\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" void foo(T2 t) {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.foo(t);\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testOverrideCompletionArrayOfTypeVariable() throws Exception { |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=391265 |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("class Super {\n"); |
| buf.append(" public <T extends Number> void foo(T[] t) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("public class Impl extends Super {\n"); |
| buf.append(" foo//here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("Impl.java", contents, false, null); |
| |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal toStringProposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("foo")) { |
| toStringProposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for foo(...)", toStringProposal); |
| |
| IDocument doc= new Document(contents); |
| toStringProposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("class Super {\n"); |
| buf.append(" public <T extends Number> void foo(T[] t) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| buf.append("public class Impl extends Super {\n"); |
| buf.append(" /* (non-Javadoc)\n"); |
| buf.append(" * @see test1.Super#foo(java.lang.Number[])\n"); |
| buf.append(" */\n"); |
| buf.append(" @Override\n"); |
| buf.append(" public <T extends Number> void foo(T[] t) {\n"); |
| buf.append(" //TODO\n"); |
| buf.append(" super.foo(t);\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testSetterCompletion1() throws Exception { |
| 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("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class A {\n"); |
| buf.append(" private BufferedWriter writer;\n"); |
| buf.append(" se//here\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("A.java", contents, false, null); |
| |
| IEditorPart part= JavaUI.openInEditor(cu); |
| try { |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setReplacementLength(0); |
| |
| codeComplete(cu, offset, collector); |
| |
| IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals(); |
| |
| IJavaCompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.length; i++) { |
| if (proposals[i].getDisplayString().startsWith("setWriter")) { |
| proposal= proposals[i]; |
| } |
| } |
| assertNotNull("no proposal for setWriter()", proposal); |
| |
| IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); |
| proposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import java.io.BufferedWriter;\n"); |
| buf.append("\n"); |
| buf.append("public class A {\n"); |
| buf.append(" private BufferedWriter writer;\n"); |
| buf.append(" /**\n"); |
| buf.append(" * @param writer the writer to set\n"); |
| buf.append(" */\n"); |
| buf.append(" public void setWriter(BufferedWriter writer) {\n"); |
| buf.append(" this.writer = writer;\n"); |
| buf.append(" }//here\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } finally { |
| part.getSite().getPage().closeAllEditors(false); |
| } |
| } |
| |
| public void testStaticImports1() throws Exception { |
| IPreferenceStore store= PreferenceConstants.getPreferenceStore(); |
| store.setValue(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS, "test1.A.foo"); |
| |
| 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 class A {\n"); |
| buf.append(" public static void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| pack1.createCompilationUnit("A.java", buf.toString(), false, null); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("public class B {\n"); |
| buf.append(" public void bar() {\n"); |
| buf.append(" f//here\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("B.java", contents, false, null); |
| |
| IEditorPart part= JavaUI.openInEditor(cu); |
| try { |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| ISourceViewer viewer= ((JavaEditor) part).getViewer(); |
| |
| JavaContentAssistInvocationContext context= new JavaContentAssistInvocationContext(viewer, offset, part); |
| JavaCompletionProposalComputer computer= new JavaNoTypeCompletionProposalComputer(); |
| |
| // make sure we get an import rewrite context |
| SharedASTProvider.getAST(cu, SharedASTProvider.WAIT_YES, null); |
| |
| List<ICompletionProposal> proposals= computer.computeCompletionProposals(context, null); |
| |
| ICompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.size(); i++) { |
| ICompletionProposal curr= proposals.get(i); |
| if (curr.getDisplayString().startsWith("foo")) { |
| proposal= curr; |
| } |
| } |
| assertNotNull("no proposal for foo()", proposal); |
| |
| IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); |
| proposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import static test1.A.foo;\n"); |
| buf.append("\n"); |
| buf.append("public class B {\n"); |
| buf.append(" public void bar() {\n"); |
| buf.append(" foo();//here\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } finally { |
| store.setToDefault(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS); |
| part.getSite().getPage().closeAllEditors(false); |
| |
| } |
| } |
| |
| public void testStaticImports2() throws Exception { |
| IPreferenceStore store= PreferenceConstants.getPreferenceStore(); |
| store.setValue(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS, "test1.A.foo"); |
| |
| 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 class A {\n"); |
| buf.append(" public static void foo() {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| pack1.createCompilationUnit("A.java", buf.toString(), false, null); |
| |
| IPackageFragment pack2= sourceFolder.createPackageFragment("test2", false, null); |
| buf= new StringBuffer(); |
| buf.append("package test2;\n"); |
| buf.append("\n"); |
| buf.append("public class B {\n"); |
| buf.append(" public void bar() {\n"); |
| buf.append(" f//here\n"); |
| buf.append(" }\n"); |
| buf.append(" public void foo(int x) {\n"); // conflicting method, no static import possible |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack2.createCompilationUnit("B.java", contents, false, null); |
| |
| IEditorPart part= JavaUI.openInEditor(cu); |
| try { |
| String str= "//here"; |
| |
| int offset= contents.indexOf(str); |
| |
| ISourceViewer viewer= ((JavaEditor) part).getViewer(); |
| |
| JavaContentAssistInvocationContext context= new JavaContentAssistInvocationContext(viewer, offset, part); |
| JavaCompletionProposalComputer computer= new JavaNoTypeCompletionProposalComputer(); |
| |
| // make sure we get an import rewrite context |
| SharedASTProvider.getAST(cu, SharedASTProvider.WAIT_YES, null); |
| |
| List<ICompletionProposal> proposals= computer.computeCompletionProposals(context, null); |
| |
| ICompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.size(); i++) { |
| ICompletionProposal curr= proposals.get(i); |
| if (curr.getDisplayString().startsWith("foo()")) { |
| proposal= curr; |
| } |
| } |
| assertNotNull("no proposal for foo()", proposal); |
| |
| IDocument doc= JavaUI.getDocumentProvider().getDocument(part.getEditorInput()); |
| proposal.apply(doc); |
| |
| buf= new StringBuffer(); |
| buf.append("package test2;\n"); |
| buf.append("\n"); |
| buf.append("import test1.A;\n"); |
| buf.append("\n"); |
| buf.append("public class B {\n"); |
| buf.append(" public void bar() {\n"); |
| buf.append(" A.foo();//here\n"); |
| buf.append(" }\n"); |
| buf.append(" public void foo(int x) {\n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| assertEquals(buf.toString(), doc.get()); |
| } finally { |
| store.setToDefault(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS); |
| part.getSite().getPage().closeAllEditors(false); |
| |
| } |
| } |
| |
| public void testConstructorCompletion_Bug336451() throws Exception { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("public class EclipseTest {\n"); |
| buf.append(" private static interface InvokerIF{\n"); |
| buf.append(" public <T extends ArgIF, Y> T invoke(T arg) throws RuntimeException, IndexOutOfBoundsException;\n"); |
| buf.append(" }\n"); |
| buf.append(" private static class Invoker implements InvokerIF{ \n"); |
| buf.append(" public <T extends ArgIF, Y> T invoke(T arg){ \n"); |
| buf.append(" return arg; \n"); |
| buf.append(" } \n"); |
| buf.append(" } \n"); |
| buf.append(" \n"); |
| buf.append(" private static interface ArgIF{ \n"); |
| buf.append(" } \n"); |
| buf.append(" \n"); |
| buf.append(" private static interface ArgIF2<C> extends ArgIF{ \n"); |
| buf.append(" \n"); |
| buf.append(" } \n"); |
| buf.append(" private static class ArgImpl<C> implements ArgIF2<C>{ \n"); |
| buf.append(" public ArgImpl() { \n"); |
| buf.append(" super(); \n"); |
| buf.append(" } \n"); |
| buf.append(" } \n"); |
| buf.append(" public static void main(String[] args) throws Exception { \n"); |
| buf.append(" InvokerIF test = new Invoker(); \n"); |
| buf.append(" test.invoke(new ArgImpl) \n"); |
| buf.append(" } \n"); |
| buf.append("} \n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("EclipseTest.java", contents, false, null); |
| |
| String str= "test.invoke(new ArgImpl)"; |
| |
| int offset= contents.indexOf(str) + str.length() - 1; |
| |
| CompletionProposalCollector collector= createCollector(cu, offset); |
| collector.setAllowsRequiredProposals(CompletionProposal.CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true); |
| |
| 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("public class EclipseTest {\n"); |
| buf.append(" private static interface InvokerIF{\n"); |
| buf.append(" public <T extends ArgIF, Y> T invoke(T arg) throws RuntimeException, IndexOutOfBoundsException;\n"); |
| buf.append(" }\n"); |
| buf.append(" private static class Invoker implements InvokerIF{ \n"); |
| buf.append(" public <T extends ArgIF, Y> T invoke(T arg){ \n"); |
| buf.append(" return arg; \n"); |
| buf.append(" } \n"); |
| buf.append(" } \n"); |
| buf.append(" \n"); |
| buf.append(" private static interface ArgIF{ \n"); |
| buf.append(" } \n"); |
| buf.append(" \n"); |
| buf.append(" private static interface ArgIF2<C> extends ArgIF{ \n"); |
| buf.append(" \n"); |
| buf.append(" } \n"); |
| buf.append(" private static class ArgImpl<C> implements ArgIF2<C>{ \n"); |
| buf.append(" public ArgImpl() { \n"); |
| buf.append(" super(); \n"); |
| buf.append(" } \n"); |
| buf.append(" } \n"); |
| buf.append(" public static void main(String[] args) throws Exception { \n"); |
| buf.append(" InvokerIF test = new Invoker(); \n"); |
| buf.append(" test.invoke(new ArgImpl<C>()) \n"); |
| buf.append(" } \n"); |
| buf.append("} \n"); |
| assertEquals(buf.toString(), doc.get()); |
| } |
| |
| public void testBug466252() throws CoreException { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| IPackageFragment pack1= sourceFolder.createPackageFragment("p", false, null); |
| StringBuffer buf= new StringBuffer(); |
| buf.append("package p;\n"); |
| buf.append("\n"); |
| buf.append("public class C {\n"); |
| buf.append(" void foo() {\n"); |
| buf.append(" try {\n"); |
| buf.append(" } \n"); |
| buf.append(" }\n"); |
| buf.append("}\n"); |
| ICompilationUnit cu= pack1.createCompilationUnit("CC.java", buf.toString(), false, null); |
| |
| |
| String str= "}"; |
| int offset= buf.toString().indexOf(str) + str.length(); |
| |
| TemplateStore templateStore= JavaPlugin.getDefault().getTemplateStore(); |
| int tokenLocation= createContext(offset, cu).getCoreContext().getTokenLocation(); |
| assertTrue((tokenLocation & CompletionContext.TL_STATEMENT_START) != 0); |
| |
| Template[] templates= templateStore.getTemplates(JavaContextType.ID_STATEMENTS); |
| |
| boolean finallyTemplateFound= false; |
| for (Template template : templates) { |
| if (template.getName().equals("finally")) { |
| finallyTemplateFound= true; |
| break; |
| } |
| } |
| assertTrue(finallyTemplateFound); |
| } |
| |
| public void testCompletionInPackageInfo() throws Exception { |
| IPreferenceStore store= PreferenceConstants.getPreferenceStore(); |
| store.setValue(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS, "annots.DefaultLocation.*"); |
| try { |
| IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src"); |
| prepareNullAnnotations(sourceFolder); |
| |
| IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null); |
| StringBuilder buf= new StringBuilder(); |
| buf.append("@annots.NonNullByDefault({ARRAY})\n"); |
| buf.append("package test1;\n"); |
| String contents= buf.toString(); |
| |
| ICompilationUnit cu= pack1.createCompilationUnit("package-info.java", contents, false, null); |
| |
| int offset= contents.indexOf("{ARRAY}") + 6; |
| |
| JavaCompletionProposalComputer computer= new JavaNoTypeCompletionProposalComputer(); |
| |
| // make sure we get an import rewrite context |
| SharedASTProvider.getAST(cu, SharedASTProvider.WAIT_YES, null); |
| |
| List<ICompletionProposal> proposals= computer.computeCompletionProposals(createContext(offset, cu), null); |
| |
| |
| ICompletionProposal proposal= null; |
| |
| for (int i= 0; i < proposals.size(); i++) { |
| ICompletionProposal curr= proposals.get(i); |
| if (curr instanceof AbstractJavaCompletionProposal) { |
| AbstractJavaCompletionProposal javaProposal= (AbstractJavaCompletionProposal) curr; |
| if (javaProposal.getReplacementString().equals("ARRAY_CONTENTS")) { |
| proposal= curr; |
| break; |
| } |
| } |
| } |
| assertNotNull("proposal not found", proposal); |
| |
| IDocument doc= new Document(contents); |
| proposal.apply(doc); |
| |
| buf= new StringBuilder(); |
| buf.append("@annots.NonNullByDefault({ARRAY_CONTENTS})\n"); |
| buf.append("package test1;\n"); |
| buf.append("\n"); |
| buf.append("import static annots.DefaultLocation.ARRAY_CONTENTS;\n"); |
| String expected= buf.toString(); |
| assertEquals(expected, doc.get()); |
| } finally { |
| store.setToDefault(PreferenceConstants.CODEASSIST_FAVORITE_STATIC_MEMBERS); |
| } |
| } |
| |
| private static void assertNumberOf(String name, int is, int expected) { |
| assertTrue("Wrong number of " + name + ", is: " + is + ", expected: " + expected, is == expected); |
| } |
| |
| } |