diff --git a/report.pdf b/report.pdf index 291e7d1..328528e 100644 Binary files a/report.pdf and b/report.pdf differ diff --git a/report.tex b/report.tex index e4f5972..5252269 100644 --- a/report.tex +++ b/report.tex @@ -206,8 +206,6 @@ None found \subsection{Observer Pattern} None found -\subsection{Strategy Pattern} -None found \subsection{State Pattern} Among the design patterns \textit{Pattern4J} detects, the state pattern is @@ -217,22 +215,39 @@ state of a finite state machine the context class implements. In other words, the state pattern chooses the concrete strategy to use through the state of the context. +By analyzing the \textit{Pattern4J} results and the code, we can say that all +the instances of the state pattern the tool finds are false positives. Namely: + \begin{description} - \item[util.DefaultPrettyPrinter] false positive, strategy pattern; - \item[JsonFactory] false positive, \textit{InputDecorator \_inputDecorator}, -\textit{OutputDecorator \_outputDecorator}, \textit{SerializedString -\_rootValueSeparator} are strategy instances (more -specifically a way to pre-process input before Jackson parses it, labeled as -``decorator'' by Jackson developers but not really a decorator pattern -application since InputDecorator is not a subclass of any component to -decorate); - \item[json.WriterBasedJsonGenerator] false positive, - \textit{SerializableString \_currentEscape} is a simple \textit{String}-like - object that gets updated based on the parsing state. - \item[util.DefaultPrettyPrinter] ??? WIP + \item[util.DefaultPrettyPrinter \textit{\_inputDecorator} and + \textit{\_outputDecorator}] are fields flagged as states, thus flagging the + class as a state pattern instance. However, no ``state'' akin to a + finite-state machine is maintained by the class to determine which + implementation of these fields to invoke. What is detected are more likely + lightweight implementations of the strategy pattern, since these fields can + be mutated through matching getters and setters. Additionally, the + documentation of each of the matching \textit{...Decorator} field types + (namely interfaces) states that implementors are meant to be algorithms to + pre-process input before the formatting process (a feature labeled as + ``decorator'' w.r.t.\ the library, not to be confused with the decorator +pattern); + \item[util.DefaultPrettyPrinter \_objectIndenter and \_arrayIndenter] are + false positives too, and are likely strategy patterns too for the reasons + described above. + \item[util.DefaultPrettyPrinter \_rootValueSeparator] is flagged as a state + field too, however the field is simply a boxed \textit{String-like} + immutable data structure (i.e.\ \textit{SerializableString}) that is + swapped during the pretty-printer parsing logic; + \item[json.WriterBasedJsonGenerator \_currentEscape] is a false positive for + the same reasons described above. \end{description} -WIP instances and examples +\subsection{Strategy Pattern} +\textit{Pattern4j} detects no instance of the strategy pattern in Jackson, +however the previous section regarding the state pattern referenced some false +positives that were indeed applications of this pattern. Due to the flexibility +of Jackson, there are many more instances of the strategy pattern to configure +and customize the serialization and deserialization pipeline in several stages. \subsection{Template Method Pattern} Due to the extendibility of Jackson, it is of no surprise that the template