Peter,
Я отвечаю вам в новом посте, так как мне не хватает места в комментарии.
Если вы хотите расширить Rinzo в соответствии с вашим примером, я думаю, вам нужно будет создать плагин, вносящий точки расширения, указанные в документации на сайт.
Для реализации помощника содержание Я думаю приблизительную реализацию на основе ваших примеров можно было бы следующим образом:
public class CustomSourceAssistProcessor implements IXMLContentAssistProcessor {
@Override
public void addAttributeValuesProposals(XMLNode currentNode, String attributeName, String prefix,
ITextViewer viewer, int offset, Collection<ICompletionProposal> results) {
if("x".equals(currentNode.getTagName()) && "type".equals(attributeName)) {
for (String possibleValue : this.getPossibleValuesFromXML()) {
results.add(new CompletionProposal(possibleValue, offset, prefix.length(), 0, null, "Proposal Description...", null, null));
}
}
if("x".equals(currentNode.getTagName()) && "value".equals(attributeName)) {
for (String possibleValue : this.getPossibleValuesFromJavaClass()) {
results.add(new CompletionProposal(possibleValue, offset, prefix.length(), 0, null, "Proposal Description...", null, null));
}
}
}
}
Это, насколько взаимодействия с API Rinzo, и ваша конкретная логика сбора значения либо из внешнего файла XML или Java-класса должны быть реализованы в методах getPossibleValuesFromXML() и getPossibleValuesFromJavaClass()
С другой стороны, для того, чтобы добавить свой собственный валидатор я думаю грубую реализацию вашей точки расширения, также основанный на вашем примере, должен быть похож на этот один:
public class CustomSourceXMLValidator implements XmlValidator {
@Override
public void validate(RinzoXMLEditor editor) {
editor.getModel().getTree().accept(new HierarchicalVisitor() {
@Override
public boolean visitStart(XMLNode node) {
if(node.isTag() && "x".equals(node.getTagName())) {
for (Entry<String, XMLAttribute> entry : node.getAttributes().entrySet()) {
if("type".equals(entry.getKey())) {
this.validateValueFromXML(entry.getValue().getValue());
}
if("value".equals(entry.getKey())) {
this.valdateValueFromJavaClass(entry.getValue().getValue());
}
}
}
return true;
}
private void valdateValueFromJavaClass(XMLAttribute xmlAttribute) {
if(!this.getPossibleValuesFromXML().contains(xmlAttribute.getValue())) {
this.createMarker(editor, xmlAttribute);
}
}
private void validateValueFromXML(XMLAttribute xmlAttribute) {
if(!this.getPossibleValuesFromJavaClass().contains(xmlAttribute.getValue())) {
this.createMarker(editor, xmlAttribute);
}
}
});
}
}
И однажды опять же вам решать внедрение методов getPossibleValuesFromXML() и getPossibleValuesFromJavaClass(). Вы также можете увидеть исходный код ClassNamesValidatorVisitor в качестве примера.
Продолжайте кататься в свободном мире! :)
Спасибо, но я не говорю о проверке правильных и хорошо сформированных XML-файлов, но о дополнительных проверках, которые Eclipse не может знать. –