Loading plugins/org.etsi.mts.tdl.tx.ui/src/org/etsi/mts/tdl/ui/contentassist/TDLtxProposalProvider.java +62 −36 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ package org.etsi.mts.tdl.ui.contentassist; import java.lang.reflect.Field; import java.util.Collections; import java.util.List; import org.eclipse.emf.common.util.EList; Loading @@ -23,6 +24,7 @@ import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import org.eclipse.xtext.util.Strings; import org.etsi.mts.tdl.CastDataUse; import org.etsi.mts.tdl.CollectionDataType; import org.etsi.mts.tdl.Connection; import org.etsi.mts.tdl.DataElementUse; import org.etsi.mts.tdl.DataInstance; Loading @@ -48,6 +50,7 @@ import org.etsi.mts.tdl.StructuredDataType; */ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { public static boolean traceCompletions = false; public static boolean traceCompletionsInUI = false; //super patterns //rule: empty Loading Loading @@ -117,6 +120,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { @Override public void createProposals(ContentAssistContext context, ICompletionProposalAcceptor acceptor) { traceCompletions = false; traceCompletionsInUI = false; superRule = true; superReference = true; superContainment = true; Loading @@ -135,7 +139,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { preTrace(ruleCall, contentAssistContext); super.completeRuleCall(ruleCall, contentAssistContext, acceptor); postTrace(acceptor); if (traceCompletions) { if (traceCompletionsInUI) { String name = "--R: "+getName(ruleCall) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); } Loading @@ -147,7 +151,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { preTrace(assignment, contentAssistContext); super.completeAssignment(assignment, contentAssistContext, acceptor); postTrace(acceptor); if (traceCompletions) { if (traceCompletionsInUI) { String name = "--A: "+getName(assignment) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); } Loading Loading @@ -216,6 +220,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { if (model instanceof DataElementUse) { completeMemberReferenceForDataUse(model, context, acceptor, "", " = ?", " : assign to member"); return; } //TODO: what is this? //after comma Loading @@ -230,8 +235,8 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { public void completeParameterBindingFragment_Argument(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { //super: completeRuleCall if (superContainment) super.completeParameterBindingFragment_Argument(model, assignment, context, acceptor); //if (superContainment) //super.completeParameterBindingFragment_Argument(model, assignment, context, acceptor); } @Override Loading @@ -240,6 +245,10 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { //TODO: relevant? if (model instanceof ParameterBinding) { // var pb = ((ParameterBinding) model); // var type = pb.getParameter().getDataType(); // completeAssignment(model, context, acceptor, type); return; } Loading Loading @@ -333,7 +342,13 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { if (ne instanceof DataInstance && ((DataInstance)ne).getDataType().conformsTo(type)) { accept = true; } else if (ne instanceof DataType && ((DataType) ne).conformsTo(type)) { accept = true; //accept = true; String prefix = "new "; String suffix = "()"; if (ne instanceof CollectionDataType) { suffix = "[]"; } acceptor.accept(createCompletionProposal(prefix+ne.getName()+suffix, new StyledString(prefix+ne.getName()+suffix).append(" : new instance of type", StyledString.DECORATIONS_STYLER), getImage(ne), 1000, "", context)); } else if (ne instanceof Function && ((Function) ne).getReturnType().conformsTo(type)) { accept = true; } else if (ne instanceof FormalParameter && EcoreUtil2.isAncestor(EcoreUtil2.getContainerOfType(model, PackageableElement.class), ne)) { Loading Loading @@ -474,6 +489,10 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { //TODO: add suffix? e.g. = NamedElement dataElement = ((DataElementUse) model).getDataElement(); EList<MemberReference> reduction = ((DataElementUse)model).getReduction(); List<Parameter> assigned = ((DataElementUse) model).getArgument().stream() .map(ParameterBinding::getParameter) .toList(); //TODO: a bit of a hack.. this belongs elsewhere -> affects the whole chain, should be applied selectively // System.out.println(model); // System.out.println(context.getPreviousModel()); Loading @@ -482,65 +501,72 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { // dataElement = reduction.get(reduction.size()-2).getMember().getDataType(); // } if (dataElement instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataElement).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 100000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) dataElement); } else if (dataElement instanceof StructuredDataInstance) { for (Member m : ((StructuredDataType) ((StructuredDataInstance)dataElement).getDataType()).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 100000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) ((StructuredDataInstance)dataElement).getDataType()); } else if (dataElement instanceof FormalParameter) { DataType dataType = ((FormalParameter) dataElement).getDataType(); if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) dataType); } } else if (dataElement instanceof Function) { DataType dataType = ((Function) dataElement).getReturnType(); if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) dataType); } } } else if (model instanceof StructuredDataType) { for (Member m : ((StructuredDataType) model).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } //TODO: add already assigned acceptMembers(context, acceptor, prefix, suffix, description, Collections.emptyList(), (StructuredDataType) model); } else if (model instanceof StructuredDataInstance) { StructuredDataInstance instance = (StructuredDataInstance) model; DataType dataType = instance.getDataType(); //get assigned members of instance List<Member> assigned = instance.getMemberAssignment().stream() List<Parameter> assigned = instance.getMemberAssignment().stream() .map(MemberAssignment::getMember) .map(e -> (Parameter) e) .toList(); //TODO: reuse if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { if (!assigned.contains(m)) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } } } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) instance.getDataType()); } else if (model instanceof MemberReference) { DataType dataType = ((MemberReference) model).getMember().getDataType(); //TODO: add already assigned if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, Collections.emptyList(), (StructuredDataType) dataType); } } else if (model instanceof Member) { DataType dataType = ((Member) model).getDataType(); //TODO: add already assigned if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); acceptMembers(context, acceptor, prefix, suffix, description, Collections.emptyList(), (StructuredDataType) dataType); } } } private void acceptMembers(ContentAssistContext context, ICompletionProposalAcceptor acceptor, String prefix, String suffix, String description, List<Parameter> assigned, StructuredDataType type) { for (Member m : type.allMembers()) { if (!assigned.contains(m)) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 100000, "", context)); } } } @Override public void completeCollectionItemFragment_Item(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { if (model instanceof DataElementUse) { NamedElement dataElement = ((DataElementUse) model).getDataElement(); if (dataElement instanceof CollectionDataType) { DataType itemType = ((CollectionDataType) dataElement).getItemType(); completeAssignment(model, context, acceptor, itemType); return; //? } } //super completeRuleCall if (superContainment) super.completeCollectionItemFragment_Item(model, assignment, context, acceptor); } @Override public void complete_FunctionCall(EObject model, RuleCall ruleCall, ContentAssistContext context, Loading Loading
plugins/org.etsi.mts.tdl.tx.ui/src/org/etsi/mts/tdl/ui/contentassist/TDLtxProposalProvider.java +62 −36 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ package org.etsi.mts.tdl.ui.contentassist; import java.lang.reflect.Field; import java.util.Collections; import java.util.List; import org.eclipse.emf.common.util.EList; Loading @@ -23,6 +24,7 @@ import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import org.eclipse.xtext.util.Strings; import org.etsi.mts.tdl.CastDataUse; import org.etsi.mts.tdl.CollectionDataType; import org.etsi.mts.tdl.Connection; import org.etsi.mts.tdl.DataElementUse; import org.etsi.mts.tdl.DataInstance; Loading @@ -48,6 +50,7 @@ import org.etsi.mts.tdl.StructuredDataType; */ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { public static boolean traceCompletions = false; public static boolean traceCompletionsInUI = false; //super patterns //rule: empty Loading Loading @@ -117,6 +120,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { @Override public void createProposals(ContentAssistContext context, ICompletionProposalAcceptor acceptor) { traceCompletions = false; traceCompletionsInUI = false; superRule = true; superReference = true; superContainment = true; Loading @@ -135,7 +139,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { preTrace(ruleCall, contentAssistContext); super.completeRuleCall(ruleCall, contentAssistContext, acceptor); postTrace(acceptor); if (traceCompletions) { if (traceCompletionsInUI) { String name = "--R: "+getName(ruleCall) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); } Loading @@ -147,7 +151,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { preTrace(assignment, contentAssistContext); super.completeAssignment(assignment, contentAssistContext, acceptor); postTrace(acceptor); if (traceCompletions) { if (traceCompletionsInUI) { String name = "--A: "+getName(assignment) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); } Loading Loading @@ -216,6 +220,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { if (model instanceof DataElementUse) { completeMemberReferenceForDataUse(model, context, acceptor, "", " = ?", " : assign to member"); return; } //TODO: what is this? //after comma Loading @@ -230,8 +235,8 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { public void completeParameterBindingFragment_Argument(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { //super: completeRuleCall if (superContainment) super.completeParameterBindingFragment_Argument(model, assignment, context, acceptor); //if (superContainment) //super.completeParameterBindingFragment_Argument(model, assignment, context, acceptor); } @Override Loading @@ -240,6 +245,10 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { //TODO: relevant? if (model instanceof ParameterBinding) { // var pb = ((ParameterBinding) model); // var type = pb.getParameter().getDataType(); // completeAssignment(model, context, acceptor, type); return; } Loading Loading @@ -333,7 +342,13 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { if (ne instanceof DataInstance && ((DataInstance)ne).getDataType().conformsTo(type)) { accept = true; } else if (ne instanceof DataType && ((DataType) ne).conformsTo(type)) { accept = true; //accept = true; String prefix = "new "; String suffix = "()"; if (ne instanceof CollectionDataType) { suffix = "[]"; } acceptor.accept(createCompletionProposal(prefix+ne.getName()+suffix, new StyledString(prefix+ne.getName()+suffix).append(" : new instance of type", StyledString.DECORATIONS_STYLER), getImage(ne), 1000, "", context)); } else if (ne instanceof Function && ((Function) ne).getReturnType().conformsTo(type)) { accept = true; } else if (ne instanceof FormalParameter && EcoreUtil2.isAncestor(EcoreUtil2.getContainerOfType(model, PackageableElement.class), ne)) { Loading Loading @@ -474,6 +489,10 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { //TODO: add suffix? e.g. = NamedElement dataElement = ((DataElementUse) model).getDataElement(); EList<MemberReference> reduction = ((DataElementUse)model).getReduction(); List<Parameter> assigned = ((DataElementUse) model).getArgument().stream() .map(ParameterBinding::getParameter) .toList(); //TODO: a bit of a hack.. this belongs elsewhere -> affects the whole chain, should be applied selectively // System.out.println(model); // System.out.println(context.getPreviousModel()); Loading @@ -482,65 +501,72 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { // dataElement = reduction.get(reduction.size()-2).getMember().getDataType(); // } if (dataElement instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataElement).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 100000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) dataElement); } else if (dataElement instanceof StructuredDataInstance) { for (Member m : ((StructuredDataType) ((StructuredDataInstance)dataElement).getDataType()).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 100000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) ((StructuredDataInstance)dataElement).getDataType()); } else if (dataElement instanceof FormalParameter) { DataType dataType = ((FormalParameter) dataElement).getDataType(); if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) dataType); } } else if (dataElement instanceof Function) { DataType dataType = ((Function) dataElement).getReturnType(); if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) dataType); } } } else if (model instanceof StructuredDataType) { for (Member m : ((StructuredDataType) model).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } //TODO: add already assigned acceptMembers(context, acceptor, prefix, suffix, description, Collections.emptyList(), (StructuredDataType) model); } else if (model instanceof StructuredDataInstance) { StructuredDataInstance instance = (StructuredDataInstance) model; DataType dataType = instance.getDataType(); //get assigned members of instance List<Member> assigned = instance.getMemberAssignment().stream() List<Parameter> assigned = instance.getMemberAssignment().stream() .map(MemberAssignment::getMember) .map(e -> (Parameter) e) .toList(); //TODO: reuse if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { if (!assigned.contains(m)) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } } } acceptMembers(context, acceptor, prefix, suffix, description, assigned, (StructuredDataType) instance.getDataType()); } else if (model instanceof MemberReference) { DataType dataType = ((MemberReference) model).getMember().getDataType(); //TODO: add already assigned if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); } acceptMembers(context, acceptor, prefix, suffix, description, Collections.emptyList(), (StructuredDataType) dataType); } } else if (model instanceof Member) { DataType dataType = ((Member) model).getDataType(); //TODO: add already assigned if (dataType instanceof StructuredDataType) { for (Member m : ((StructuredDataType) dataType).allMembers()) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 1000, "", context)); acceptMembers(context, acceptor, prefix, suffix, description, Collections.emptyList(), (StructuredDataType) dataType); } } } private void acceptMembers(ContentAssistContext context, ICompletionProposalAcceptor acceptor, String prefix, String suffix, String description, List<Parameter> assigned, StructuredDataType type) { for (Member m : type.allMembers()) { if (!assigned.contains(m)) { acceptor.accept(createCompletionProposal(prefix+m.getName()+suffix, new StyledString(prefix+m.getName()+suffix).append(description, StyledString.DECORATIONS_STYLER), getImage(m), 100000, "", context)); } } } @Override public void completeCollectionItemFragment_Item(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) { if (model instanceof DataElementUse) { NamedElement dataElement = ((DataElementUse) model).getDataElement(); if (dataElement instanceof CollectionDataType) { DataType itemType = ((CollectionDataType) dataElement).getItemType(); completeAssignment(model, context, acceptor, itemType); return; //? } } //super completeRuleCall if (superContainment) super.completeCollectionItemFragment_Item(model, assignment, context, acceptor); } @Override public void complete_FunctionCall(EObject model, RuleCall ruleCall, ContentAssistContext context, Loading