package org.eclipse.uml2.diagram.common.parser.slot; 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.StructuralFeature; public class SlotSemanticParser extends SemanticParserAdapter { private final CompletionProcessor myCompletionProcessor; public SlotSemanticParser(LookupSuite lookupSuite, ILabelProvider labelProvider) { this(lookupSuite, labelProvider, new BasicApplyStrategy(), new SlotToString.VIEW(), new SlotToString.EDIT()); } public SlotSemanticParser(LookupSuite lookupSuite, ILabelProvider labelProvider, ApplyStrategy applier, WithReferences view, ExternalToString edit) { super(new SlotParser(lookupSuite), applier, view, edit); myCompletionProcessor = new CompletionProcessor(lookupSuite.getLookup(StructuralFeature.class), labelProvider); } public SlotSemanticParser(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; } @Override public String getPrintString(IAdaptable element, int flags) { String result = super.getPrintString(element, flags); if ("".equals(result)) { result = "<enter>"; } return result; } public IContentAssistProcessor getCompletionProcessor(IAdaptable element) { myCompletionProcessor.setContext(doAdapt(element)); return myCompletionProcessor; } private static class CompletionProcessor extends LookupCompletionProcessor<StructuralFeature> { public CompletionProcessor(Lookup<StructuralFeature> featureLookup, ILabelProvider labelProvider) { super(featureLookup, labelProvider); } @Override protected String getProposalPrefix(String controlPrefix) { return controlPrefix.contains("=") ? null : trimLeft(controlPrefix); } } }