Package com.twosigma.beaker.autocomplete.java

Source Code of com.twosigma.beaker.autocomplete.java.JavaAutocomplete

package com.twosigma.beaker.autocomplete.java;

import java.util.ArrayList;
import java.util.List;

import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTreeWalker;

import com.twosigma.beaker.autocomplete.AutocompleteCandidate;
import com.twosigma.beaker.autocomplete.AutocompleteRegistry;
import com.twosigma.beaker.autocomplete.ClassUtils;
import com.twosigma.beaker.autocomplete.ClasspathScanner;

public class JavaAutocomplete {
  AutocompleteRegistry registry;
  private ClasspathScanner cps;
 
  public JavaAutocomplete(ClasspathScanner _cps) {
    registry = new AutocompleteRegistry(JavaCompletionTypes.NUM_TYPES)
    setup(registry);
    cps = _cps;
   
    for ( String pkg : cps.getPackages()) {
      String[] pkgv = pkg.split("\\.");
      AutocompleteCandidate c = new AutocompleteCandidate(JavaCompletionTypes.PACKAGE_NAME, pkgv);
      registry.addCandidate(c);
      List<String> cls = cps.getClasses(pkg);
      if(cls!=null && !cls.isEmpty()) {
        c = new AutocompleteCandidate(JavaCompletionTypes.FQ_TYPE, pkgv);
        AutocompleteCandidate l = c;
        while(l.hasChildren()) { l = l.getChildrens().get(0); }
        for ( String cl : cls) {
          l.addChildren(new AutocompleteCandidate(JavaCompletionTypes.FQ_TYPE, cl));
        }
        registry.addCandidate(c);
      }
    }

  }
 
  private void setup(AutocompleteRegistry r) {
    AutocompleteCandidate c;
   
    c = new AutocompleteCandidate(JavaCompletionTypes.INITIAL, "package");
    r.addCandidate(c);
   
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "import");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "public");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "class");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "abstract");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "enum");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "final");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "interface");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "private");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "protected");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TOPLEVEL, "static");
    r.addCandidate(c);

    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "if");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "for");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "while");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "do");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "else");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "try");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "catch");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "switch");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "return");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "throw");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "break");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "continue");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "synchronized");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "finally");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.BLOCKLEVEL, "default");
    r.addCandidate(c);

    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "int");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "float");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "char");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "byte");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "void");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "boolean");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "short");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "long");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.TYPE, "double");
    r.addCandidate(c);
   
    c = new AutocompleteCandidate(JavaCompletionTypes.MEMBERDELC, "public");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.MEMBERDELC, "abstract");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.MEMBERDELC, "final");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.MEMBERDELC, "private");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.MEMBERDELC, "protected");
    r.addCandidate(c);
    c = new AutocompleteCandidate(JavaCompletionTypes.MEMBERDELC, "static");
    r.addCandidate(c);
  }
   
  private void setup(ClassUtils cu) { 
    cu.defineClassShortName("Boolean", "java.lang.Boolean");
    cu.defineClassShortName("Byte  ", "java.lang.Byte");
    cu.defineClassShortName("Character", "java.lang.Character");
    cu.defineClassShortName("Double", "java.lang.Double");
    cu.defineClassShortName("Float", "java.lang.Float");
    cu.defineClassShortName("Integer", "java.lang.Integer");
    cu.defineClassShortName("Long", "java.lang.Long");
    cu.defineClassShortName("Math", "java.lang.Math");
    cu.defineClassShortName("Number", "java.lang.Number");
    cu.defineClassShortName("Object", "java.lang.Object");
    cu.defineClassShortName("Package", "java.lang.Package");
    cu.defineClassShortName("Process", "java.lang.Process");
    cu.defineClassShortName("ProcessBuilder", "java.lang.ProcessBuilder");
    cu.defineClassShortName("Runtime", "java.lang.Runtime");
    cu.defineClassShortName("RuntimePermission", "java.lang.RuntimePermission");
    cu.defineClassShortName("SecurityManager", "java.lang.SecurityManager");
    cu.defineClassShortName("Short", "java.lang.Short");
    cu.defineClassShortName("StackTraceElement", "java.lang.StackTraceElement");
    cu.defineClassShortName("StrictMath", "java.lang.StrictMath");
    cu.defineClassShortName("String", "java.lang.String");
    cu.defineClassShortName("StringBuffer", "java.lang.StringBuffer");
    cu.defineClassShortName("StringBuilder", "java.lang.StringBuilder");
    cu.defineClassShortName("System", "java.lang.System");
    cu.defineClassShortName("Thread","java.lang.Thread");
    cu.defineClassShortName("ThreadGroup", "java.lang.ThreadGroup");
    cu.defineClassShortName("Throwable", "java.lang.Throwable");
    cu.defineClassShortName("Void", "java.lang.Void");
  }
 
  public List<String> doAutocomplete(String txt, int cur) {
    ClassUtils cu = new ClassUtils();
    setup(cu);
    registry.clearForType(JavaCompletionTypes.CUSTOM_TYPE);
    registry.clearForType(JavaCompletionTypes.FIELD);
    registry.clearForType(JavaCompletionTypes.NAME);
    Lexer lexer = new JavaLexer(new ANTLRInputStream(txt));
    CommonTokenStream tokens = new CommonTokenStream(lexer);

    // Create a parser that reads from the scanner
    JavaParser parser = new JavaParser(tokens);
    parser.removeErrorListeners();
   
    // start parsing at the compilationUnit rule
    ParserRuleContext t = parser.compilationUnit();
    ParseTreeWalker walker = new ParseTreeWalker();
    List<AutocompleteCandidate> q = new ArrayList<AutocompleteCandidate>();
         
    ImportDeclarationCompletion extractor = new ImportDeclarationCompletion(txt,cur,registry,cps,cu);
    NameBuilder extractor2 = new NameBuilder(registry,cu );
    NodeCompletion extractor3 = new NodeCompletion(txt,cur, registry, cu);
    walker.walk(extractor, t);
    if(extractor.getQuery()!=null)
      q.addAll(extractor.getQuery());
    walker.walk(extractor2, t);
    walker.walk(extractor3, t);
    if(extractor3.getQuery()!=null)
      q.addAll(extractor3.getQuery());
    List<String> ret = registry.searchCandidates(q);

    // this shows the GUI
    //t.inspect(parser);
    return ret;
  }
 
}
TOP

Related Classes of com.twosigma.beaker.autocomplete.java.JavaAutocomplete

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.