Commit d26b8916 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ improved completions for TO, #122

parent 20c5f97d
Loading
Loading
Loading
Loading
Loading
+127 −0
Original line number Diff line number Diff line
@@ -831,4 +831,131 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider {
			super.completeReceiveMessage_Argument(model, assignment, context, acceptor);
	}
	
	//---------------------------------------------------------------
	//TO-specific completions
	//copied from above -> reuse where no change
	//TODO: refer to base rules if nothing specific
	//---------------------------------------------------------------
	public void complete_TODataElementUse(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
		complete_DataElementUse(model, ruleCall, context, acceptor);
	}
	
	public void completeTODataElementUse_DataElement(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
		completeDataElementUse_DataElement(model, assignment, context, acceptor);
	}

	@Override
	public void complete_TOParameterBinding(EObject model, RuleCall ruleCall, ContentAssistContext context,
			ICompletionProposalAcceptor acceptor) {
		complete_ParameterBinding(model, ruleCall, context, acceptor);
	}
	
	@Override
	public void completeTOParameterBinding_Parameter(EObject model, Assignment assignment, ContentAssistContext context,
			ICompletionProposalAcceptor acceptor) {
		completeParameterBinding_Parameter(model, assignment, context, acceptor);
	}

	@Override
	public void completeTOParameterBindingFragment_Argument(EObject model, Assignment assignment,
			ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
		completeParameterBindingFragment_Argument(model, assignment, context, acceptor);
	}
	
	@Override
	public void completeTOParameterBinding_DataUse(EObject model, Assignment assignment, ContentAssistContext context,
			ICompletionProposalAcceptor acceptor) {

		//TODO: relevant?
		if (model instanceof ParameterBinding) {
			//adapted for TO!
			var pb = ((ParameterBinding) model);
			var type = pb.getParameter().getDataType();
			completeAssignment(model, context, acceptor, type);
			
			return;
		}

		//super: completeRuleCall
		if (superContainment)
			super.completeParameterBinding_DataUse(model, assignment, context, acceptor);
	}
	
	@Override
	public void complete_TOParameterBindingFragment(EObject model, RuleCall ruleCall, ContentAssistContext context,
			ICompletionProposalAcceptor acceptor) {
		
		//TODO: what is this
		//before comma!! context: current element
//		model.eContainer() instanceof 
//		if (model instanceof DataElementUse) {
//			for (Member m : ((StructuredDataType)((DataElementUse) model.eContainer()).resolveDataType()).allMembers()) {
//				acceptor.accept(createCompletionProposal(m.getName(), new StyledString(m.getName()), getImage(m), 1000, "", context));
//			}
//		}
		if (model instanceof ParameterBinding) {
			var pb = ((ParameterBinding) model);
			var type = pb.getParameter().getDataType();
			//TODO: add anything that contains string fields?
			//start with 
			//TODO: handle containing / indicating value / etc.?
			completeAssignment(model, context, acceptor, type);
		}	
		if ((model instanceof DataElementUse)) {
			//NOTE: adapted for TO
			if (!context.getPrefix().equals(".")) {
				completeMemberReferenceForDataUse(model, context, acceptor, " containing { ", " = ? }", " : assign to member");
			} else {
				completeMemberReferenceForDataUse(model, context, acceptor, "", "", " : access member");
			}
		}
		//super: empty
		if (superRule)
			super.complete_ParameterBindingFragment(model, ruleCall, context, acceptor);
	}

	@Override
	public void completeTOCollectionItemFragment_Item(EObject model, Assignment assignment, ContentAssistContext context,
			ICompletionProposalAcceptor acceptor) {
		completeCollectionDataInstance_Item(model, assignment, context, acceptor);
	}

	//TODO: anything specific?
	@Override
	public void complete_TOMemberReference(EObject model, RuleCall ruleCall, ContentAssistContext context,
			ICompletionProposalAcceptor acceptor) {
		complete_MemberReference(model, ruleCall, context, acceptor);
	}

	@Override
	public void completeTOMemberReference_Member(EObject model, Assignment assignment, ContentAssistContext context,
			ICompletionProposalAcceptor acceptor) {
//		System.out.println(context.getCurrentNode().getText());
//		System.out.println(context.getLastCompleteNode().getText());
		if (model instanceof DataElementUse) {
			EList<MemberReference> reduction = ((DataElementUse)model).getReduction();
			if (reduction.isEmpty()) {
				//NOTE: adapted for TO
				if (!context.getPrefix().equals(".")) {
//					completeMemberReferenceForDataUse(model, context, acceptor, " containing { ", " = ? }", " : assign to member");
				}
				completeMemberReferenceForDataUse(model, context, acceptor, "", "", " : access member");
				return;
			} else {
//				((DataElementUse)model).resolveDataType();
				if (reduction.getLast().getMember() == null && reduction.size()>1) {
					DataType dataType = reduction.get(reduction.size()-2).getMember().getDataType();
					completeMemberReferenceForDataUse(dataType, context, acceptor, "", "", " : access member");
				} else {
					completeMemberReferenceForDataUse(model, context, acceptor, "", "", " : access member");
				}
				return;
			}
		}
		//super: lookupCrossReference
		if (superReference)
			super.completeMemberReference_Member(model, assignment, context, acceptor);
	}

	
}
 No newline at end of file