nesccodecompletionprocessor.java
来自「plugin for eclipse」· Java 代码 · 共 193 行
JAVA
193 行
package isis.tinydt.editors.nesceditor;
import isis.anp.common.ParserMessage;
import isis.anp.nesc.common.NesCObjectTreeBuilderContext;
import isis.anp.nesc.ot.FunctionDeclaration;
import isis.anp.nesc.ot.Interface;
import isis.anp.nesc.ot.InterfacePort;
import isis.anp.nesc.ot.NesCFile;
import isis.anp.nesc.ot.NesCModuleFile;
import isis.anp.nesc.ot.Port;
import isis.anp.nesc.ot.scope.Scope;
import isis.anp.nesc.ot.scope.Symbol;
import isis.commons.fs.CanonicalPath;
import isis.tinydt.TinydtProject;
import isis.tinydt.Utils;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.CompletionProposal;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.texteditor.ITextEditor;
public class NesCCodeCompletionProcessor implements IContentAssistProcessor
{
private ITextEditor editor;
public NesCCodeCompletionProcessor( ITextEditor editor )
{
this.editor = editor;
}
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset)
{
//IRegion r = viewer.getDocument().getLineInformationOfOffset(3);
//IFileEditorInput input = (IFileEditorInput)editor.getEditorInput();
//IFile f = input.getFile();
//System.out.println( f.getFullPath() );
return test3(viewer,offset);
//return null;
}
private TinydtProject getProject()
{
IFileEditorInput input = (IFileEditorInput)editor.getEditorInput();
IFile f = input.getFile();
return TinydtProject.getTinydtProject(f.getProject());
}
private static String getLastToken( ITextViewer viewer )
{
String text = viewer.getDocument().get();
int pos = viewer.getSelectedRange().x-2;
int len = 0;
char c = text.charAt(pos);
while( pos>=0 && c!=' ' && c!='\t' )
{
pos--;
len++;
c = text.charAt(pos);
}
String token = text.substring(pos+1,pos+len+1);
System.out.println("last_token="+token);
return token;
}
private ICompletionProposal[] test3(ITextViewer viewer, int offset)
{
System.out.println("NesCCodeCompletionProcessor.test3");
// get file
IFile file = ((IFileEditorInput)editor.getEditorInput()).getFile();
TinydtProject proj = getProject();
NesCObjectTreeBuilderContext ctx = proj.getObjectTreeCtx();
NesCFile f = null;
try {
f = ctx.getProcessedObjectTree(file.getLocation().lastSegment().toString());
} catch (ParserMessage e) {
// we assume it has already been parsed, and the errors are shown
}
if( f==null )
return null;
List props = new ArrayList();
String lastToken = getLastToken(viewer);
if( f instanceof NesCModuleFile )
{
Port p = ((NesCModuleFile)f).getModule().getPortByName(lastToken);
if( p!=null )
{
if( p instanceof InterfacePort )
{
Interface i = ((InterfacePort)p).getInterface();
Iterator it = i.getFunctionDeclarations().iterator();
while( it.hasNext() )
{
FunctionDeclaration decl = (FunctionDeclaration)it.next();
String repl = decl.getName()+"()";
props.add(new CompletionProposal(repl,viewer.getSelectedRange().x,0,repl.length()-1,null,Utils.getFuncDeclString(decl),null,null) );
}
}
}
}
ICompletionProposal propsArray[] = new ICompletionProposal[props.size()];
for( int i=0; i<props.size(); ++i )
propsArray[i] = (ICompletionProposal)props.get(i);
return propsArray;
}
private ICompletionProposal[] test2()
{
int i;
List props = new ArrayList();
//props.add( new CompletionProposal("alma1",0,5,0) );
//props.add( new CompletionProposal("alma2",0,5,0) );
TinydtProject proj = getProject();
NesCObjectTreeBuilderContext ctx = proj.getObjectTreeCtx();
Iterator it = ctx.getObjectTrees().iterator();
while (it.hasNext())
{
NesCFile ncf = (NesCFile) it.next();
if( ncf instanceof NesCModuleFile )
{
Scope scope = ((NesCModuleFile)ncf).getModule().getImplementation().getScope();
//System.out.println(scope);
List symbols = scope.getSymbolList();
//System.out.println(symbols);
Iterator it2 = symbols.iterator();
while( it2.hasNext() )
{
Symbol symbol = (Symbol)it2.next();
props.add( new CompletionProposal( symbol.getName(),0,5,0) );
}
}
}
ICompletionProposal propsArray[] = new ICompletionProposal[props.size()];
for( i=0; i<props.size(); ++i )
propsArray[i] = (ICompletionProposal)props.get(i);
return propsArray;
}
public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset)
{
return null;
}
public char[] getCompletionProposalAutoActivationCharacters()
{
return new char[]{'.'};
}
public char[] getContextInformationAutoActivationCharacters()
{
//char a[] = {'.'};
return null;
}
public IContextInformationValidator getContextInformationValidator()
{
return null;
}
public String getErrorMessage()
{
return null;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?