-package org.simantics.scl.ui.assist;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.eclipse.jface.fieldassist.IContentProposal;\r
-import org.eclipse.jface.fieldassist.IContentProposalProvider;\r
-import org.simantics.scl.compiler.commands.CommandSession;\r
-import org.simantics.scl.compiler.elaboration.modules.SCLValue;\r
-import org.simantics.scl.compiler.environment.Environments;\r
-import org.simantics.scl.compiler.types.Type;\r
-\r
-\r
-public class SCLContentProposalProvider implements IContentProposalProvider {\r
-\r
- private final CommandSession session;\r
-\r
- public SCLContentProposalProvider(CommandSession session) {\r
- this.session = session;\r
- }\r
-\r
- @Override\r
- public IContentProposal[] getProposals(String contents, int position) {\r
- int startPos = getPrefixStartPos(contents, position);\r
- String prefix = contents.substring(startPos, position);\r
- int prefixLength = prefix.length();\r
- int namespaceLength = prefix.indexOf('.');\r
- if(namespaceLength < 0)\r
- namespaceLength = 0;\r
- else\r
- ++namespaceLength;\r
- \r
- List<SCLValue> values = Environments.findValuesForPrefix(\r
- session.getRuntimeEnvironment().getEnvironment(),\r
- prefix);\r
- \r
- ArrayList<IContentProposal> proposals = new ArrayList<IContentProposal>();\r
- for(SCLValue value : values)\r
- if(!value.isPrivate() && !(value.getName().name.contains("$") &&\r
- Character.isLetter(value.getName().name.charAt(0))))\r
- proposals.add(new SCLContentProposal(value));\r
- \r
- prefix = prefix.toLowerCase();\r
- for(Map.Entry<String,Type> entry : session.localNamesForContentProposals().entrySet())\r
- if(entry.getKey().toLowerCase().startsWith(prefix))\r
- proposals.add(new SCLContentProposal(entry.getKey(), "LocalEnvironment", entry.getValue()));\r
- \r
- return proposals.toArray(new IContentProposal[proposals.size()]);\r
- }\r
- \r
- private static int getPrefixStartPos(String contents, int position) {\r
- int pos = position;\r
- while(pos > 0) {\r
- char c = contents.charAt(pos-1);\r
- if(Character.isJavaIdentifierPart(c) || c == '.')\r
- --pos;\r
- else\r
- break;\r
- }\r
- return pos;\r
- }\r
+package org.simantics.scl.ui.assist;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.jface.fieldassist.IContentProposalProvider;
+import org.simantics.scl.compiler.commands.CommandSession;
+import org.simantics.scl.compiler.elaboration.modules.SCLValue;
+import org.simantics.scl.compiler.environment.Environments;
+import org.simantics.scl.compiler.types.Type;
+
+
+public class SCLContentProposalProvider implements IContentProposalProvider {
+
+ private final CommandSession session;
+
+ public SCLContentProposalProvider(CommandSession session) {
+ this.session = session;
+ }
+
+ @Override
+ public IContentProposal[] getProposals(String contents, int position) {
+ int startPos = getPrefixStartPos(contents, position);
+ String prefix = contents.substring(startPos, position);
+ int prefixLength = prefix.length();
+ int namespaceLength = prefix.indexOf('.');
+ if(namespaceLength < 0)
+ namespaceLength = 0;
+ else
+ ++namespaceLength;
+
+ List<SCLValue> values = Environments.findValuesForPrefix(
+ session.getRuntimeEnvironment().getEnvironment(),
+ prefix);
+
+ ArrayList<IContentProposal> proposals = new ArrayList<IContentProposal>();
+ for(SCLValue value : values)
+ if(!value.isPrivate() && !(value.getName().name.contains("$") && //$NON-NLS-1$
+ Character.isLetter(value.getName().name.charAt(0))))
+ proposals.add(new SCLContentProposal(value));
+
+ prefix = prefix.toLowerCase();
+ for(Map.Entry<String,Type> entry : session.localNamesForContentProposals().entrySet())
+ if(entry.getKey().toLowerCase().startsWith(prefix))
+ proposals.add(new SCLContentProposal(entry.getKey(), "LocalEnvironment", entry.getValue())); //$NON-NLS-1$
+
+ return proposals.toArray(new IContentProposal[proposals.size()]);
+ }
+
+ private static int getPrefixStartPos(String contents, int position) {
+ int pos = position;
+ while(pos > 0) {
+ char c = contents.charAt(pos-1);
+ if(Character.isJavaIdentifierPart(c) || c == '.')
+ --pos;
+ else
+ break;
+ }
+ return pos;
+ }
}
\ No newline at end of file