-
Notifications
You must be signed in to change notification settings - Fork 14
/
TODO.txt
128 lines (113 loc) · 8.49 KB
/
TODO.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
- annotation processor based generator
- evaluate triggering the code generator using JSR 269 (might be hard to generate code for 3rd party classes such as Runnable?)
! http://deors.wordpress.com/2011/10/08/annotation-processors/
! http://deors.wordpress.com/2011/10/31/annotation-generators/
http://weblogs.java.net/blog/tball/archive/2006/09/hacking_javac.html
http://code.google.com/p/genftw/
http://code.google.com/p/objectify-gwtkey/
- 3rd party classes: package-local interface with @GenerateEventizers(useParent = true)
- will need to figure out how to read the parameter names, maybe use overloaded methods if available
- DummyListenerToEvent: rename sender to target
- EventToDummyListener: rename listener to target
- @Generated annotation, example: @Generated(value = "fi.jumi.actors.maven.EventStubGenerator", comments = "Generated based on fi.jumi.actors.maven.DummyListener", date = "2000-01-01")
- @Override annotation to all methods
- remove Maven plugin, cleanup this TODO list, push up issues that can now be solved more easily
- easier access to an ActorRef to the current actor, e.g. Actors.selfRef() using a thread-local, or perhaps Actors.currentThread()?
https://groups.google.com/d/topic/jumi-test-runner/xQYPeqB00UQ/discussion
- find all use cases in Jumi, see how they would benefit from this change, design the API appropriately
- support for non-void actor methods which return a Future
- don't use Java 7
- the compiles-using-project-language-level test uses Java 7; figure out a way to unit test it without JDK 7
-> maybe we could parameterize maven-invoker-plugin to use a different JDK for just that test?
- update end-to-end tests to not use Java 7 features
-> extract the common class parsing/iterating functionality into an external library?
- configure maven-failsafe-plugin to use Java 6
- build with JDK 6 on CI
- update building.txt
- refactor EventSpy: always call await() from assertContains() to avoid duplication?
http://lets-code.orfjackal.net/2013/04/lets-code-jumi-231-monitoredexecutor.html
- find all usages and see if await be done everywhere
- do the change
- set timeout through constructor? or use test timeouts and throw InterruptedException?
- remove duplicated calls to await()
- thread-safety-checker: when an inner class is missing the annotation, use the annotation of the enclosing class or default to @NotThreadSafe when the enclosing class has any concurrency annotation
- generating event stubs when method argument types take type parameters (now causes JavaType to throw IllegalArgumentException: unsupported type)
https://github.com/orfjackal/jumi-actors/issues/1
- extract AbstractMessageLogger from PrintStreamMessageLogger, to support multiple logging frameworks
- make it possible to give names to actor threads
https://groups.google.com/forum/#!topic/jumi-test-runner/BYyEfzLnX4A
- at least make it possible to use a fixed name
- should there be a convenience factory method for generating unique names? e.g. "jumi-actors-1-thread-1" format.
- should we still use an Executor? is it anyways needed for testing purposes? create NamedThreadExecutor interface and adapter for Executor?
- find all usages of MultiThreadedActors and analyze how it is used (especially in tests); do we interrupt the threads with shutdownNow()?
- make it possible to plug in your own MessageQueue implementation when creating a particular actor thread
interface MessageQueue<T> {
MessageSender<T> getMessageSender();
MessageReceiver<T> getMessageReceiver();
}
- rename current impl to UnboundedManyToManyMessageQueue
- create BoundedBatchingManyToOneMessageQueue
- reader consumes its own queue first, then all the others in fair round robin fashion with batch reads
- create a mechanism to avoid the actor thread sending itself so many messages that it deadlocks (reader's queue 2x larger? expand automatically?)
- benchmarks for all the queue types
- actors examples & benchmarks:
- create jumi-actors-examples, put there the examples and benchmarks
- create a benchmark to compare against Akka Actors
- ring round trip
- warm startup
- cold startup (can't use Caliper, need a main method in a fresh JVM, or could it be done with custom class loaders?)
- create a benchmark to compare reflection vs code generation based eventizers
- also use it as an example of using the code generator plugin
- add the benchmark results to the web site
- refactor jumi-actors-maven-plugin
- plugin pom: instead of using testResource, use add-test-source with http://mojo.codehaus.org/build-helper-maven-plugin/ and keep the reference files in the normal resource directory
- DummyListenerToEvent: rename sender to target
- EventToDummyListener: rename listener to target
- @Generated annotation, example: @Generated(value = "fi.jumi.actors.maven.EventStubGenerator", comments = "Generated based on fi.jumi.actors.maven.DummyListener", date = "2000-01-01")
- @Override annotation to all methods
- find a way to read the compiler language level from maven-compiler-plugin, instead of configuring it separately for this plugin
http://maven.apache.org/ref/3.0.4/maven-core/apidocs/org/apache/maven/project/MavenProject.html
getPlugin
http://maven.apache.org/ref/3.0.4/maven-core/apidocs/org/apache/maven/plugin/BuildPluginManager.html
http://maven.apache.org/ref/3.0.4/maven-core/apidocs/org/apache/maven/plugin/MavenPluginManager.html
getConfiguredMojo
http://maven.apache.org/ref/2.2.1/maven-core/apidocs/org/apache/maven/plugin/PluginManager.html (deprecated)
getPluginDefinitionForPrefix
getPluginComponent
http://stackoverflow.com/questions/526733/maven-plugin-executing-another-plugin
http://timmoore.github.com/mojo-executor/
http://stackoverflow.com/questions/4243686/how-to-programatically-invoke-a-maven-dependency-plugin/5761554#5761554
- hand-written serialization using bare DataOutput/DataInput? should give overall best performance without additional dependencies: https://github.com/eishay/jvm-serializers/wiki/
- evaluate using Eclipse JDT DOM for code generation, create an internal DSL as necessary (factory methods to avoid setter hell)
http://blog.cedarsoft.com/2010/08/code-generation-done-right/
http://www.eclipse.org/jdt/core/index.php
http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/package-summary.html
- walking skeleton
1. take the old generator's output
2. parse it to AST
example: http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/AST.html
http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/ASTParser.html
3. convert AST to string
example: http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/AST.html
http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/Document.html
http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/text/IDocument.html#get()
4. format using Eclipse Formatter
http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/ToolFactory.html#createCodeFormatter
http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/formatter/package-summary.html
http://www.eclipse.org/jdt/core/codecoverage/B01/org.eclipse.jdt.core/org.eclipse.jdt.core.formatter/CodeFormatterApplication.java.html#L204
5. use the Organize Imports operation, unless formatter already adds imports
? http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/ui/actions/OrganizeImportsAction.html
? http://plugins.intellij.net/plugin/?idea&id=6546
http://stackoverflow.com/questions/2644440/simplifying-fully-qualified-names-in-eclipse
- might need to transform the AST ourselves?
- migrate to generating code with JDT AST
- generate code with fully qualified names, rely on the formatter for imports
- migrate to AST one method at a time, if possible
- try using AST.newMethodDeclaration or AST.newBlock instead of AST.newCompilationUnit
- delete the old code generator
- a trace of intermediate actors: logging actor messages could benefit from seeing that from which actor(s) a message originated
- web site improvements
- site for jumi-actors-maven-plugin
http://www.vineetmanohar.com/2009/04/how-to-auto-generate-maven-plugin-documentation/
http://stackoverflow.com/questions/2912665/maven-plugin-site
http://maven.apache.org/guides/mini/guide-site.html