/** * Generates a new instance of an anonymous inner class that implements the PageNode interface. * * @param pageClass The class providing the widget content for the page. * @param pageName The name of the page (to be used in the URL history fragment). */ private ObjectBuilder generateNewInstanceOfPageImpl(MetaClass pageClass, String pageName) { AnonymousClassStructureBuilder pageImplBuilder = ObjectBuilder.newInstanceOf( MetaClassFactory.parameterizedAs( PageNode.class, MetaClassFactory.typeParametersOf(pageClass))) .extend(); pageImplBuilder .publicMethod(String.class, "name") .append(Stmt.loadLiteral(pageName).returnValue()) .finish() .publicMethod(Class.class, "contentType") .append(Stmt.loadLiteral(pageClass).returnValue()) .finish() .publicMethod( void.class, "produceContent", Parameter.of(CreationalCallback.class, "callback")) .append( Stmt.nestedCall(Refs.get("bm")) .invoke("lookupBean", Stmt.loadLiteral(pageClass)) .invoke("getInstance", Stmt.loadVariable("callback"))) .finish(); appendPageHidingMethod(pageImplBuilder, pageClass); appendPageHiddenMethod(pageImplBuilder, pageClass); appendPageShowingMethod(pageImplBuilder, pageClass); appendPageShownMethod(pageImplBuilder, pageClass); return pageImplBuilder.finish(); }