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