1 package org.simantics.scl.ui.assist;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
5 import java.util.Map;
\r
7 import org.eclipse.jface.fieldassist.IContentProposal;
\r
8 import org.eclipse.jface.fieldassist.IContentProposalProvider;
\r
9 import org.simantics.scl.compiler.commands.CommandSession;
\r
10 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
\r
11 import org.simantics.scl.compiler.environment.Environments;
\r
12 import org.simantics.scl.compiler.types.Type;
\r
15 public class SCLContentProposalProvider implements IContentProposalProvider {
\r
17 private final CommandSession session;
\r
19 public SCLContentProposalProvider(CommandSession session) {
\r
20 this.session = session;
\r
24 public IContentProposal[] getProposals(String contents, int position) {
\r
25 int startPos = getPrefixStartPos(contents, position);
\r
26 String prefix = contents.substring(startPos, position);
\r
27 int prefixLength = prefix.length();
\r
28 int namespaceLength = prefix.indexOf('.');
\r
29 if(namespaceLength < 0)
\r
30 namespaceLength = 0;
\r
34 List<SCLValue> values = Environments.findValuesForPrefix(
\r
35 session.getRuntimeEnvironment().getEnvironment(),
\r
38 ArrayList<IContentProposal> proposals = new ArrayList<IContentProposal>();
\r
39 for(SCLValue value : values)
\r
40 if(!value.isPrivate() && !(value.getName().name.contains("$") &&
\r
41 Character.isLetter(value.getName().name.charAt(0))))
\r
42 proposals.add(new SCLContentProposal(value));
\r
44 prefix = prefix.toLowerCase();
\r
45 for(Map.Entry<String,Type> entry : session.localNamesForContentProposals().entrySet())
\r
46 if(entry.getKey().toLowerCase().startsWith(prefix))
\r
47 proposals.add(new SCLContentProposal(entry.getKey(), "LocalEnvironment", entry.getValue()));
\r
49 return proposals.toArray(new IContentProposal[proposals.size()]);
\r
52 private static int getPrefixStartPos(String contents, int position) {
\r
55 char c = contents.charAt(pos-1);
\r
56 if(Character.isJavaIdentifierPart(c) || c == '.')
\r