Loading plugins/org.etsi.mts.tdl.tx.ui/src/org/etsi/mts/tdl/ui/contentassist/TDLtxProposalProvider.java +50 −9 Original line number Diff line number Diff line Loading @@ -4,11 +4,13 @@ package org.etsi.mts.tdl.ui.contentassist; import java.lang.reflect.Field; import java.util.Collection; import java.util.Collections; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.viewers.StyledString; import org.eclipse.xtext.AbstractElement; import org.eclipse.xtext.AbstractRule; Loading @@ -20,6 +22,7 @@ import org.eclipse.xtext.ParserRule; import org.eclipse.xtext.RuleCall; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import org.eclipse.xtext.ui.editor.contentassist.CompletionProposalComputer; import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import org.eclipse.xtext.util.Strings; Loading Loading @@ -59,12 +62,16 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { public static boolean superRule = false; public static boolean superReference = false; public static boolean superContainment = false; private static String trace = ""; private void trace(ContentAssistContext contentAssistContext, String methodName) { System.out.println(methodName); System.out.println(" context: "+NodeModelUtils.findActualNodeFor(contentAssistContext.getCurrentModel()).getText().trim()+" : "+contentAssistContext.getCurrentModel().eClass().getName()); System.out.println(" replace: "+contentAssistContext.getReplaceRegion()); trace += "\n"+methodName; trace += "\n"+" context: "+NodeModelUtils.findActualNodeFor(contentAssistContext.getCurrentModel()).getText().trim()+" : "+contentAssistContext.getCurrentModel().eClass().getName(); trace += "\n"+" replace: "+contentAssistContext.getReplaceRegion(); } private void preTrace(Assignment assignment, ContentAssistContext contentAssistContext) { Loading Loading @@ -98,12 +105,25 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { if (traceCompletions) { Object proposals = getProposals(acceptor); System.out.println(" proposals: "+proposals); List<String> proposalDescriptions = ((Collection<ICompletionProposal>)proposals).stream() .map(e->(ConfigurableCompletionProposal) e) .sorted(ConfigurableCompletionProposal::compareTo) .map(ICompletionProposal::getDisplayString) .filter(e -> !e.startsWith("--")).toList(); trace += "\n proposals: "+proposals; trace += "\n "+String.join("\n ", proposalDescriptions); } } private Object getProposals(ICompletionProposalAcceptor acceptor) { try { CompletionProposalComputer completionProposalComputer = (CompletionProposalComputer)((NullSafeCompletionProposalAcceptor) acceptor).getDelegate(); CompletionProposalComputer completionProposalComputer; if (acceptor instanceof NullSafeCompletionProposalAcceptor) { completionProposalComputer = (CompletionProposalComputer)((NullSafeCompletionProposalAcceptor) acceptor).getDelegate(); } else { completionProposalComputer = (CompletionProposalComputer) acceptor; } Field proposalsField = completionProposalComputer.getClass().getDeclaredField("proposals"); proposalsField.setAccessible(true); Object proposals = proposalsField.get(completionProposalComputer); Loading @@ -124,13 +144,18 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { superRule = true; superReference = true; superContainment = true; super.createProposals(context, acceptor); if (traceCompletions) { Collection<ICompletionProposal> proposals = (Collection<ICompletionProposal>) getProposals(acceptor); if (!proposals.stream().anyMatch(e -> e.getDisplayString().startsWith("---"))) { trace = ""; } // System.out.println("Complete: -----------------------------------------------------"); // for (AbstractElement element : context.getFirstSetGrammarElements()) { // System.out.println("--P: "+element); // } } super.createProposals(context, acceptor); } @Override Loading @@ -141,10 +166,22 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { postTrace(acceptor); if (traceCompletionsInUI) { String name = "--R: "+getName(ruleCall) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); traceUI(contentAssistContext, acceptor, name); } } private void traceUI(ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor, String name) { ICompletionProposal proposal = createCompletionProposal("--TRACE", new StyledString("---TRACE"), null, 1000000001, "", contentAssistContext); ((ConfigurableCompletionProposal)proposal).setAdditionalProposalInfo(trace); Collection<ICompletionProposal> proposals = (Collection<ICompletionProposal>) getProposals(acceptor); List<String> proposalDescriptions = proposals.stream().map(ICompletionProposal::getDisplayString).filter(e -> !e.startsWith("--")).toList(); // ICompletionProposal proposal = createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext); // ((ConfigurableCompletionProposal)proposal).setAdditionalProposalInfo(String.join("\n", proposalDescriptions)); acceptor.accept(proposal); } @Override public void completeAssignment(Assignment assignment, ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor) { Loading @@ -153,7 +190,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { postTrace(acceptor); if (traceCompletionsInUI) { String name = "--A: "+getName(assignment) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); traceUI(contentAssistContext, acceptor, name); } } Loading Loading @@ -343,12 +380,16 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { accept = true; } else if (ne instanceof DataType && ((DataType) ne).conformsTo(type)) { //accept = true; if (ne instanceof SimpleDataType) { } else { 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
plugins/org.etsi.mts.tdl.tx.ui/src/org/etsi/mts/tdl/ui/contentassist/TDLtxProposalProvider.java +50 −9 Original line number Diff line number Diff line Loading @@ -4,11 +4,13 @@ package org.etsi.mts.tdl.ui.contentassist; import java.lang.reflect.Field; import java.util.Collection; import java.util.Collections; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.viewers.StyledString; import org.eclipse.xtext.AbstractElement; import org.eclipse.xtext.AbstractRule; Loading @@ -20,6 +22,7 @@ import org.eclipse.xtext.ParserRule; import org.eclipse.xtext.RuleCall; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; import org.eclipse.xtext.ui.editor.contentassist.CompletionProposalComputer; import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor; import org.eclipse.xtext.util.Strings; Loading Loading @@ -59,12 +62,16 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { public static boolean superRule = false; public static boolean superReference = false; public static boolean superContainment = false; private static String trace = ""; private void trace(ContentAssistContext contentAssistContext, String methodName) { System.out.println(methodName); System.out.println(" context: "+NodeModelUtils.findActualNodeFor(contentAssistContext.getCurrentModel()).getText().trim()+" : "+contentAssistContext.getCurrentModel().eClass().getName()); System.out.println(" replace: "+contentAssistContext.getReplaceRegion()); trace += "\n"+methodName; trace += "\n"+" context: "+NodeModelUtils.findActualNodeFor(contentAssistContext.getCurrentModel()).getText().trim()+" : "+contentAssistContext.getCurrentModel().eClass().getName(); trace += "\n"+" replace: "+contentAssistContext.getReplaceRegion(); } private void preTrace(Assignment assignment, ContentAssistContext contentAssistContext) { Loading Loading @@ -98,12 +105,25 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { if (traceCompletions) { Object proposals = getProposals(acceptor); System.out.println(" proposals: "+proposals); List<String> proposalDescriptions = ((Collection<ICompletionProposal>)proposals).stream() .map(e->(ConfigurableCompletionProposal) e) .sorted(ConfigurableCompletionProposal::compareTo) .map(ICompletionProposal::getDisplayString) .filter(e -> !e.startsWith("--")).toList(); trace += "\n proposals: "+proposals; trace += "\n "+String.join("\n ", proposalDescriptions); } } private Object getProposals(ICompletionProposalAcceptor acceptor) { try { CompletionProposalComputer completionProposalComputer = (CompletionProposalComputer)((NullSafeCompletionProposalAcceptor) acceptor).getDelegate(); CompletionProposalComputer completionProposalComputer; if (acceptor instanceof NullSafeCompletionProposalAcceptor) { completionProposalComputer = (CompletionProposalComputer)((NullSafeCompletionProposalAcceptor) acceptor).getDelegate(); } else { completionProposalComputer = (CompletionProposalComputer) acceptor; } Field proposalsField = completionProposalComputer.getClass().getDeclaredField("proposals"); proposalsField.setAccessible(true); Object proposals = proposalsField.get(completionProposalComputer); Loading @@ -124,13 +144,18 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { superRule = true; superReference = true; superContainment = true; super.createProposals(context, acceptor); if (traceCompletions) { Collection<ICompletionProposal> proposals = (Collection<ICompletionProposal>) getProposals(acceptor); if (!proposals.stream().anyMatch(e -> e.getDisplayString().startsWith("---"))) { trace = ""; } // System.out.println("Complete: -----------------------------------------------------"); // for (AbstractElement element : context.getFirstSetGrammarElements()) { // System.out.println("--P: "+element); // } } super.createProposals(context, acceptor); } @Override Loading @@ -141,10 +166,22 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { postTrace(acceptor); if (traceCompletionsInUI) { String name = "--R: "+getName(ruleCall) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); traceUI(contentAssistContext, acceptor, name); } } private void traceUI(ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor, String name) { ICompletionProposal proposal = createCompletionProposal("--TRACE", new StyledString("---TRACE"), null, 1000000001, "", contentAssistContext); ((ConfigurableCompletionProposal)proposal).setAdditionalProposalInfo(trace); Collection<ICompletionProposal> proposals = (Collection<ICompletionProposal>) getProposals(acceptor); List<String> proposalDescriptions = proposals.stream().map(ICompletionProposal::getDisplayString).filter(e -> !e.startsWith("--")).toList(); // ICompletionProposal proposal = createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext); // ((ConfigurableCompletionProposal)proposal).setAdditionalProposalInfo(String.join("\n", proposalDescriptions)); acceptor.accept(proposal); } @Override public void completeAssignment(Assignment assignment, ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor) { Loading @@ -153,7 +190,7 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { postTrace(acceptor); if (traceCompletionsInUI) { String name = "--A: "+getName(assignment) + " : "+contentAssistContext.getCurrentModel().eClass().getName(); acceptor.accept(createCompletionProposal(name, new StyledString(name), null, 1000000001, "", contentAssistContext)); traceUI(contentAssistContext, acceptor, name); } } Loading Loading @@ -343,12 +380,16 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider { accept = true; } else if (ne instanceof DataType && ((DataType) ne).conformsTo(type)) { //accept = true; if (ne instanceof SimpleDataType) { } else { 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