package org.eclipse.uml2.diagram.common.parser.instance; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.uml2.diagram.parser.ApplyStrategy; import org.eclipse.uml2.diagram.parser.BasicApplyStrategy; import org.eclipse.uml2.diagram.parser.ExternalToString; import org.eclipse.uml2.diagram.parser.SemanticParserAdapter; import org.eclipse.uml2.diagram.parser.ExternalToString.WithReferences; import org.eclipse.uml2.diagram.parser.assist.LookupCompletionProcessor; import org.eclipse.uml2.diagram.parser.lookup.Lookup; import org.eclipse.uml2.diagram.parser.lookup.LookupSuite; import org.eclipse.uml2.uml.Type; public class InstanceSpecificationSemanticParser extends SemanticParserAdapter { private final CompletionProcessor myCompletionProcessor; public InstanceSpecificationSemanticParser(LookupSuite lookupSuite, ILabelProvider labelProvider) { this(lookupSuite, labelProvider, new BasicApplyStrategy(), new InstanceSpecificationToString.VIEW(), new InstanceSpecificationToString.EDIT()); } public InstanceSpecificationSemanticParser(LookupSuite lookupSuite, ILabelProvider labelProvider, ApplyStrategy applier, WithReferences view, ExternalToString edit) { super(new InstanceSpecificationParser(lookupSuite), applier, view, edit); myCompletionProcessor = new CompletionProcessor(lookupSuite.getLookup(Type.class), labelProvider); } public InstanceSpecificationSemanticParser(LookupSuite lookupSuite, ILabelProvider labelProvider, ApplyStrategy applier, WithReferences viewAndEdit) { this(lookupSuite, labelProvider, applier, viewAndEdit, viewAndEdit); } protected final EObject doAdapt(IAdaptable adaptable) { EObject element = (EObject) adaptable.getAdapter(EObject.class); return element; } public IContentAssistProcessor getCompletionProcessor(IAdaptable element) { myCompletionProcessor.setContext(doAdapt(element)); return myCompletionProcessor; } private static class CompletionProcessor extends LookupCompletionProcessor<Type> { public CompletionProcessor(Lookup<Type> lookup, ILabelProvider labelProvider) { super(lookup, labelProvider); } @Override protected String getProposalPrefix(String controlPrefix) { int colonIndex = controlPrefix.lastIndexOf(':'); int commaIndex = controlPrefix.lastIndexOf(','); int startIndex = Math.max(colonIndex, commaIndex); if (startIndex == -1) { return null; } String proposalPrefix = controlPrefix.substring(startIndex + 1); return trimLeft(proposalPrefix); } } }