У меня проблемы с настройкой поставщика предложений для правильной работы. Моя цель - предоставить список всех возможных импортов, которые может создать пользователь. Я могу убедиться, что класс привязан правильно и вызывается по запросу помощника редактора. Я даже вижу, как предложения создаются и передаются получателю, но в редакторе ничего не отображается.
Так что мой вопрос может состоять из двух частей:
- Можете ли вы увидеть, что я могу делать неправильно в следующем коде, чтобы объяснить, что помощь с содержимым не отображается в редакторе
- Можете ли вы объяснить разницу между методами отправки для Назначения, RuleCall и Ключевого слова? Я обнаружил, что все три метода используются для одного и того же запроса на поддержку контента, так что именно я по-разному кодирую и что они делают по-разному?
Также я использую CodeMirror, если это имеет какой-либо эффект.
class mydslContentAssist extends IdeContentProposalProvider{
@Inject extension mydslGrammarAccess stAccess
@Inject mydslGlobalScopeProvider sp
@Inject extension IQualifiedNameProvider
override dispatch createProposals(Assignment assignment, ContentAssistContext context, IIdeContentProposalAcceptor acceptor) {
switch(assignment) {
case stAccess.libraryModelAccess.importsAssignment_0: {
var libs = sp.descriptionData.getExportedObjectsByType(ModelPackage.eINSTANCE.libraryModel)
for (lib : libs.filter[(EObjectOrProxy as LibraryModel).name.startsWith(context.prefix)]) {
var proposal = proposalCreator.createProposal('import ' + (lib.EObjectOrProxy as LibraryModel).name + ".*;", context) [
source = lib
description = "import entire library contents"
]
acceptor.accept(proposal, proposalPriorities.getDefaultPriority(proposal))
}
}
default : {
super._createProposals(assignment, context, acceptor)
}
}
}
override dispatch createProposals(RuleCall rulecall, ContentAssistContext context, IIdeContentProposalAcceptor acceptor) {
switch(rulecall.rule) {
case importRule: {
var libs = sp.descriptionData.getExportedObjectsByType(ModelPackage.eINSTANCE.libraryModel)
for (lib : libs) {
var proposal = proposalCreator.createProposal('import ' + (lib.EObjectOrProxy as LibraryModel).name + ".*;", context) [
source = lib
description = "import entire library contents"
]
acceptor.accept(proposal, proposalPriorities.getDefaultPriority(proposal))
}
}
default : {
super._createProposals(rulecall, context, acceptor)
}
}
}
override dispatch createProposals(Keyword keyword, ContentAssistContext context, IIdeContentProposalAcceptor acceptor) {
switch (keyword) {
case stAccess.importAccess.importKeyword_0: {
var libs = sp.descriptionData.getExportedObjectsByType(ModelPackage.eINSTANCE.libraryModel)
for (lib : libs) {
var proposal = proposalCreator.createProposal('import ' + (lib.EObjectOrProxy as LibraryModel).name + ".*;", context) [
source = lib
description = "import entire library contents"
]
acceptor.accept(proposal, proposalPriorities.getDefaultPriority(proposal))
}
}
default: {
super._createProposals(keyword, context, acceptor)
}
}
}
}
РЕДАКТИРОВАТЬ: мой код срабатывает только при вызове помощника по контенту при вводе ключевого слова import. Но не при наборе строки importNamespace