/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.ext.java.client.core;
import org.eclipse.che.ide.ext.java.emul.FileSystem;
import org.eclipse.che.ide.ext.java.jdt.codeassistant.CompletionProposalCollector;
import org.eclipse.che.ide.ext.java.jdt.codeassistant.FillArgumentNamesCompletionProposalCollector;
import org.eclipse.che.ide.ext.java.jdt.codeassistant.api.JavaCompletionProposal;
import org.eclipse.che.ide.ext.java.jdt.core.CompletionProposal;
import org.eclipse.che.ide.ext.java.jdt.core.JavaCore;
import org.eclipse.che.ide.ext.java.jdt.core.dom.AST;
import org.eclipse.che.ide.ext.java.jdt.core.dom.ASTNode;
import org.eclipse.che.ide.ext.java.jdt.core.dom.ASTParser;
import org.eclipse.che.ide.ext.java.jdt.core.dom.CompilationUnit;
import org.eclipse.che.ide.ext.java.jdt.internal.codeassist.CompletionEngine;
import org.eclipse.che.ide.ext.java.worker.WorkerDocument;
import org.eclipse.che.ide.ext.java.worker.WorkerMessageHandler;
import org.eclipse.che.ide.ext.java.jdt.text.Document;
import com.googlecode.gwt.test.GwtModule;
import com.googlecode.gwt.test.GwtTestWithMockito;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;
import org.fest.assertions.Assertions;
import org.junit.Before;
import org.junit.Test;
/**
* @author Evgen Vidolob
*/
@GwtModule("org.eclipse.che.ide.ext.java.Java")
public class CodeAssistantTest extends GwtTestWithMockito {
private static FileSystem nameEnvironment =
new FileSystem(new String[]{System.getProperty("java.home") + "/lib/rt.jar"}, null, "UTF-8");
@Before
public void setUp() throws Exception {
new WorkerMessageHandler(null);
GwtReflectionUtils.setPrivateFieldValue(WorkerMessageHandler.get(), "nameEnvironment", nameEnvironment);
}
@Test
public void testName() throws Exception {
StringBuilder builder = new StringBuilder();
builder.append("import org.omg.CORBA.portable.InputStream;\n");
builder.append("\n");
builder.append("public class Test {\n");
builder.append(" public Test(){\n");
builder.append(" InputStream s = new \n");
builder.append(" }\n");
builder.append("}");
JavaCompletionProposal[] completionProposals = computeCompletionProposals(builder.toString(), 105);
Document document = new WorkerDocument(builder.toString());
completionProposals[1].apply(document);
Assertions.assertThat(document.get()).doesNotContain("@Overrid@Overrid@Overrid@Overrid@Overrid@Overrid@Overrid@Overrid@Overrid@Overrid@Overr");
}
public static JavaCompletionProposal[] computeCompletionProposals(String content, int offset) {
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setUnitName("/P/org/test/CreateJavaClassPresenter.java");
parser.setSource(content);
parser.setNameEnvironment(nameEnvironment);
parser.setResolveBindings(true);
ASTNode ast = parser.createAST();
CompilationUnit unit = (CompilationUnit)ast;
Document document = new WorkerDocument(content);
CompletionProposalCollector collector =
new FillArgumentNamesCompletionProposalCollector(unit, document, offset, "projectPath", "docContext", "vfsId");
collector
.setAllowsRequiredProposals(
CompletionProposal.CONSTRUCTOR_INVOCATION,
CompletionProposal.TYPE_REF, true);
collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION,
CompletionProposal.TYPE_REF, true);
collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_DECLARATION,
CompletionProposal.TYPE_REF,
true);
collector.setIgnored(CompletionProposal.ANNOTATION_ATTRIBUTE_REF, false);
collector.setIgnored(CompletionProposal.ANONYMOUS_CLASS_DECLARATION, false);
collector.setIgnored(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, false);
collector.setIgnored(CompletionProposal.FIELD_REF, false);
collector.setIgnored(CompletionProposal.FIELD_REF_WITH_CASTED_RECEIVER, false);
collector.setIgnored(CompletionProposal.KEYWORD, false);
collector.setIgnored(CompletionProposal.LABEL_REF, false);
collector.setIgnored(CompletionProposal.LOCAL_VARIABLE_REF, false);
collector.setIgnored(CompletionProposal.METHOD_DECLARATION, false);
collector.setIgnored(CompletionProposal.METHOD_NAME_REFERENCE, false);
collector.setIgnored(CompletionProposal.METHOD_REF, false);
collector.setIgnored(CompletionProposal.CONSTRUCTOR_INVOCATION, false);
collector.setIgnored(CompletionProposal.METHOD_REF_WITH_CASTED_RECEIVER, false);
collector.setIgnored(CompletionProposal.PACKAGE_REF, false);
collector.setIgnored(CompletionProposal.POTENTIAL_METHOD_DECLARATION, false);
collector.setIgnored(CompletionProposal.VARIABLE_DECLARATION, false);
collector.setIgnored(CompletionProposal.TYPE_REF, false);
CompletionEngine e = new CompletionEngine(nameEnvironment, collector, JavaCore.getOptions());
e.complete(new org.eclipse.che.ide.ext.java.jdt.compiler.batch.CompilationUnit(
content.toCharArray(),
"name", "UTF-8"), offset, 0);
return collector.getJavaCompletionProposals();
}
}