Gets proposal for a position [message #1741025] |
Mon, 22 August 2016 08:12  |
Eclipse User |
|
|
|
Hello community,
i created the example xtext project (greetings).
Now iam looking for the function, which returns all proposal for a position.
Someting like that: Then i will get a proposal "Hello" etc.
parser.getProposals("He", 2);
Can anybody give me a hint, how to use the parser?
Thanks Michael
|
|
|
|
|
|
Re: Gets proposal for a position [message #1741093 is a reply to message #1741086] |
Tue, 23 August 2016 00:31   |
Eclipse User |
|
|
|
i did just some playaround: btw. why do you want to do this?
@RunWith(XtextRunner)
@InjectWith(MyDslIdeInjectorProvider)
class MyDslParsingTest{
static class MyDslIdeInjectorProvider extends MyDslInjectorProvider {
override protected internalCreateInjector() {
return new MyDslStandaloneSetup() {
@Override
override Injector createInjector() {
return Guice.createInjector(createRuntimeModule(), new MyDslIdeModule);
}
}.createInjectorAndDoEMFRegistration();
}
}
val List<ExecutorService> executorServices = newArrayList
@Inject
ParseHelper<Model> parseHelper
@Inject Provider<ContentAssistContextFactory> contextFactoryProvider
@Inject IdeContentProposalProvider proposalProvider
ExecutorService executorService
new() {
executorService = Executors.newCachedThreadPool => [executorServices += it]
}
@Test
def void loadModel() {
val model = '''
Hello Xtext!
'''
val result = parseHelper.parse(model)
Assert.assertNotNull(result)
val contexts = (result.eResource as XtextResource).getContexts(new TextRegion(6,0), 6)
val a = new IIdeContentProposalAcceptor {
override accept(ContentAssistEntry e, int prio) {
println(e.toString)
}
override canAcceptMoreProposals() {
true
}
}
proposalProvider.createProposals(contexts, a)
}
def ContentAssistContext[] getContexts(XtextResource resource, ITextRegion selection, int caretOffset) {
val text = resource.parseResult.rootNode.text
if (caretOffset > text.length)
return #[]
val contextFactory = contextFactoryProvider.get() => [it.pool = executorService]
contextFactory.create(text, selection, caretOffset, resource)
}
@After
def void tearDown() {
executorServices.forEach[shutdown()]
executorServices.clear()
}
}
|
|
|
|
|
|
|
|
|
|
Re: Gets proposal for a position [message #1741149 is a reply to message #1741146] |
Tue, 23 August 2016 07:03   |
Eclipse User |
|
|
|
well that was you abusing parsehelper 
/*
* generated by Xtext 2.10.0
*/
package org.xtext.example.mydsl5.tests
import com.google.inject.Guice
import com.google.inject.Inject
import com.google.inject.Injector
import com.google.inject.Provider
import java.util.List
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import org.eclipse.emf.common.util.URI
import org.eclipse.xtext.ide.editor.contentassist.ContentAssistContext
import org.eclipse.xtext.ide.editor.contentassist.ContentAssistEntry
import org.eclipse.xtext.ide.editor.contentassist.IIdeContentProposalAcceptor
import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalProvider
import org.eclipse.xtext.ide.editor.contentassist.antlr.ContentAssistContextFactory
import org.eclipse.xtext.junit4.InjectWith
import org.eclipse.xtext.junit4.XtextRunner
import org.eclipse.xtext.junit4.util.ParseHelper
import org.eclipse.xtext.resource.FileExtensionProvider
import org.eclipse.xtext.resource.XtextResource
import org.eclipse.xtext.resource.XtextResourceSet
import org.eclipse.xtext.util.ITextRegion
import org.eclipse.xtext.util.StringInputStream
import org.eclipse.xtext.util.TextRegion
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith
import org.xtext.example.mydsl5.MyDslStandaloneSetup
import org.xtext.example.mydsl5.ide.MyDslIdeModule
import org.xtext.example.mydsl5.myDsl.Model
@RunWith(XtextRunner)
@InjectWith(MyDslIdeInjectorProvider)
class MyDslParsingTest{
static class MyDslIdeInjectorProvider extends MyDslInjectorProvider {
override protected internalCreateInjector() {
return new MyDslStandaloneSetup() {
@Override
override Injector createInjector() {
return Guice.createInjector(createRuntimeModule(), new MyDslIdeModule);
}
}.createInjectorAndDoEMFRegistration();
}
}
val List<ExecutorService> executorServices = newArrayList
@Inject Provider<ContentAssistContextFactory> contextFactoryProvider
@Inject IdeContentProposalProvider proposalProvider
ExecutorService executorService
@Inject
Provider<XtextResourceSet> rsp
@Inject
extension FileExtensionProvider
new() {
executorService = Executors.newCachedThreadPool => [executorServices += it]
}
@Test
def void loadModel() {
val model = '''
Hel
'''
val rs = rsp.get
val resource = rs.createResource(URI.createURI("demo." + primaryFileExtension)) as XtextResource
resource.load(new StringInputStream(model), null)
val contexts = resource.getContexts(new TextRegion(3,0), 3)
val a = new IIdeContentProposalAcceptor {
override accept(ContentAssistEntry e, int prio) {
println(e.toString)
}
override canAcceptMoreProposals() {
true
}
}
proposalProvider.createProposals(contexts, a)
}
def ContentAssistContext[] getContexts(XtextResource resource, ITextRegion selection, int caretOffset) {
val text = resource.parseResult.rootNode.text
if (caretOffset > text.length)
return #[]
val contextFactory = contextFactoryProvider.get() => [it.pool = executorService]
contextFactory.create(text, selection, caretOffset, resource)
}
@After
def void tearDown() {
executorServices.forEach[shutdown()]
executorServices.clear()
}
}
|
|
|
|
Powered by
FUDForum. Page generated in 0.04809 seconds