# HG changeset patch # User Jaroslav Tulach # Date 1351512356 -3600 # Node ID 02618d8bec44f0724de5a051abf825287eaa8289 # Parent 033d51e026b0c7a591ba7ccf29b8cf704825062b Code completion for the ids in the XHTML page diff -r 033d51e026b0 -r 02618d8bec44 htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Tue Oct 23 16:50:27 2012 +0200 +++ b/htmlpage/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Oct 29 13:05:56 2012 +0100 @@ -21,12 +21,18 @@ import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Locale; import java.util.Set; import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Completion; +import javax.annotation.processing.Completions; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; +import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; @@ -167,4 +173,47 @@ } return true; } + + @Override + public Iterable getCompletions( + Element element, AnnotationMirror annotation, + ExecutableElement member, String userText + ) { + if (!userText.startsWith("\"")) { + return Collections.emptyList(); + } + + Element cls = findClass(element); + Page p = cls.getAnnotation(Page.class); + PackageElement pe = (PackageElement) cls.getEnclosingElement(); + String pkg = pe.getQualifiedName().toString(); + ProcessPage pp; + try { + InputStream is = openStream(pkg, p.xhtml()); + pp = ProcessPage.readPage(is); + is.close(); + } catch (IOException iOException) { + return Collections.emptyList(); + } + + List cc = new ArrayList(); + userText = userText.substring(1); + for (String id : pp.ids()) { + if (id.startsWith(userText)) { + cc.add(Completions.of("\"" + id + "\"", id)); + } + } + return cc; + } + + private static Element findClass(Element e) { + if (e == null) { + return null; + } + Page p = e.getAnnotation(Page.class); + if (p != null) { + return e; + } + return e.getEnclosingElement(); + } }