-
- | Name |
- Description |
-
-
- | Fields Per Class (FPC) |
- Extracts how often a class has 0, between 1 and 3, between 4 and 10, or more than 10 fields. |
-
-
- | Methods Per Class (MPC) |
- Extracts how often a class has 0, between 1 and 3, between 4 and 10, or more than 10 methods. |
-
-
- | Classes Per Package (CPP) |
- Extracts how often a package has between 1 and 3, between 4 and 10, or more than 10 classes. |
-
-
- | McCabe |
- Extracts how often a method has a complexity of 1 (linear), between 2 and 3, between 4 and 10, or more than 10.
- Please note that this analysis also takes exceptions into account. |
-
-
- | number of children (NOC) |
- Extracts how often a class has 0, between 1 and 3, between 4 and 10, or more than 10 children.
- This metric is the number of direct descendants (subclasses) for each class. Classes with large number of children are considered to be difficult to modify and usually require more testing because of the effects on changes on all the children. They are also considered more complex and fault-prone because a class with numerous children may have to provide services in a larger number of contexts and therefore must be more flexible [1]. |
-
-
-
-[1] Basili, V. R., Briand, L. C., and Melo, W. L., "A Validation of Object Orient Design Metrics as
-Quality Indicators," IEEE Transactions on Software Engineering, vol. 21, pp. 751-761, 1996.
\ No newline at end of file
diff --git a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/MicroPatterns.md b/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/MicroPatterns.md
deleted file mode 100644
index 251239641e..0000000000
--- a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/MicroPatterns.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# Micro Patterns
-Micro Patterns identify special usages of classes, their fields and methods
-(cf. [Micro Patterns in Java Code](https://pdfs.semanticscholar.org/ddb5/037b14518890040a170a0fa5199e1d360e18.pdf)).
-
-### Designator
-An interface with absolutely no members.
-
-### Taxonomy
-An empty interface extending another interface.
-
-### Joiner
-An empty interface joining two or more superinterfaces.
-
-### Pool
-A class which declares only static final fields, but no methods.
-
-### Function Pointer
-A class with a single public instance method, but with no fields.
-
-### Function Object
-A class with a single public instance method, and at least one instance field.
-
-### Cobol Like
-A class with a single static method, but no instance members.
-
-### Stateless
-A class with no fields, other than static final ones.
-
-### Common State
-A class in which all fields are static.
-
-### Immutable
-A class with several instance fields, which are assigned exactly once, during instance construction.
-
-### Restricted Creation
-A class with no public constructors, and at least one static field of the same type as the class.
-
-### Sampler
-A class with one or more public constructors, and at least one static field of the same type as the class.
-
-### Box
-A class which has exactly one, mutable, instance field.
-
-### Compound Box
-A class with exactly one non primitive instance field.
-
-### Canopy
-A class with exactly one instance field that it assigned exactly once, during instance construction.
-
-### Record
-A class in which all fields are public, no declared methods.
-
-### Data Manager
-A class where all methods are either setters or getters.
-
-### Sink
-A class whose methods do not propagate calls to any other class.
-
-### Outline
-A class where at least two methods invoke an abstract method on `this`.
-
-### Trait
-An abstract class which has no state.
-
-### State Machine
-An interface whose methods accept no parameters.
-
-### Pure Type
-A class with only abstract methods, and no static members, and no fields.
-
-### Augmented Type
-Only abstract methods and three or more static final fields of the same type.
-
-### Pseudo Class
-A class which can be rewritten as an interface: no concrete methods, only static fields.
-
-### Implementor
-A concrete class, where all the methods override inherited abstract methods.
-
-### Overrider
-A class in which all methods override inherited, non-abstract methods.
-
-### Extender
-A class which extends the inherited protocol, without overriding any methods.
diff --git a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/RecursiveDataStructures.markdown b/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/RecursiveDataStructures.markdown
deleted file mode 100644
index fe742965ce..0000000000
--- a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/RecursiveDataStructures.markdown
+++ /dev/null
@@ -1,28 +0,0 @@
-# Recursive Data Structures
-
-Identifies recursive data structures. In general, a data structure is recursive if it may contain values of itself.
-
-One of the simplest examples of a recursive data structure is a linked list. Another one are the nodes of a tree, as, e.g., used by the composite pattern. Next, we see a very simple linked list definition.
-
- case class List[T](value : T, rest: List[T])
-
-Analyzing programs with recursive data-structures is particularly interesting, e.g., when developing field sensitive analyses.
-
-The query finds self and mutually recursive data structures. The query first builds a kind of **data-type dependency graph** and then searches for strongly connected components in that graph. For example, the graph related to the relations for the following code:
-
- class U(v : U, i : Int)
- class X(v : Y, isDone : Boolean) extends Object
- class Y(v1 : Z, v2 : Z) extends U
- class Z(v : X, mutex : Object) extends Object
-
-would be:
-
- Graph (
- Object -> { }
- U -> { U } // ⟲
- X -> { Y }
- Y -> { Z }
- Z -> { X, Object }
- )
-
-I.e., though the `mutex` field of `Z` could also reference a Y or Z value, this would not be considered because it is in general not relevant. Overall, the algorithm would identify U and Y as being self-recursive data-structures.
diff --git a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/ReflectionAPIUsage.markdown b/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/ReflectionAPIUsage.markdown
deleted file mode 100644
index 8a96ea884e..0000000000
--- a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/ReflectionAPIUsage.markdown
+++ /dev/null
@@ -1,26 +0,0 @@
-#Reflection API Usage
-
-This analysis derives which methods/functionality of Java's Reflection API is used how often.
-
-## Core Reflection API
-
-The following features are targeted by the analysis:
-
-- Usage of `Class.forName`
-- (reflective) creation of new Instances
-- (reflective) field write
-- (reflective) field read
-- setting the accessibility of `Field`, `Method`, `Constructor`,
- or other `AccessibleObject` objects in general
-- (reflective) method invocations
-
-## Reflection with MethodHandles
-
-Factory methods provided by `java.lang.invoke.MethodHandles.Lookup Lookup` can be used to convert
-any class member represented by a Core Reflection API object to a behaviorally equivalent
-`MethodHandle`, therefore, `MethodHandle` objects are relevant when assessing reflection usage of
-a project.
-
-- usage of `MethodHandles.Lookup`
-- `MethodHandle` invocations over `MethodHandle.invoke`, `MethodHandle.invokeExact`, and `MethodHandle.invokeWithArguments`
-- creation of `java.lang.reflect.Proxy` to customize the dispatch method invocations
\ No newline at end of file
diff --git a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/SizeOfInheritanceTree.markdown b/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/SizeOfInheritanceTree.markdown
deleted file mode 100644
index 487c242367..0000000000
--- a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/SizeOfInheritanceTree.markdown
+++ /dev/null
@@ -1,5 +0,0 @@
-# Size of Inheritance tree
-
-Computes for each type the size of the inheritance tree and then assigns the type to one of the complexity categories. If the supertype information is not known to be complete then the overall size is rated as unknown. This generally happens when a project type inherits from a library type and the respective library is not part of the analysis.
-
-The size of inheritance tree is equal to the number of unique classes and interfaces a given class inherits from. For example, for `java.lang.Object` the size is `0`. For the marker interface `java.io.Serializable` the size is `1`. (In Java every type (ex-/implicitly) inherits from `java.lang.Object.`)
diff --git a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/SystemAPIUsage.markdown b/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/SystemAPIUsage.markdown
deleted file mode 100644
index a2ac2bbf9d..0000000000
--- a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/SystemAPIUsage.markdown
+++ /dev/null
@@ -1,21 +0,0 @@
-# java.lang.System and java.lang.Runtime API
-
-Represents the usage of core methods of `java.lang.System` or `java.lang.Runtime` that are related to the state of the JVM, Permissions, or to accessing the underlying operating system.
-
-## Command Execution
-Counts method calls that create external processes. In Java that can be either achieved using `Runtime.exec(...)` or using `java.lang.ProcessBuilder`.
-
-## JVM Exit
-Counts calls to JVM methods (`Runtime.halt`/`Runtime.exit`) that stop the JVM.
-
-## Native Libraries
-The *Native Libraries* feature reflects the usage of native libraries loaded using `java.lang.Runtime`. The count shows how many load library calls are found in the project.
-
-## SecurityManager
-Counts usages of the `java.lang.SecurityManager` in a project. This includes getting as well as setting an instance of `java.lang.SecurityManager`.
-
-## Sound
-The Sound group counts how often the sound API to play songs is used. This group only considers the classes in the two packages `javax.sound.sampled` and `javax.scene.media`
-
-## Environment
-Any access or query to the system's environment variables is captured by the `Information` group.
diff --git a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/ThreadAPIUsage.markdown b/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/ThreadAPIUsage.markdown
deleted file mode 100644
index d181d0fad2..0000000000
--- a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/ThreadAPIUsage.markdown
+++ /dev/null
@@ -1,15 +0,0 @@
-# Usage of Thread-related API
-
-Represents the usage API that is related to thread handling.
-
-## java.lang.Object
-
-Usage of notify, notifyAll, wait
-
-## java.lang.Thread
-
-Constructor and control method usage. Also includes deprecated methods.
-
-## java.lang.ThreadGroup
-
-Constructor and control method usage. Also includes deprecated methods.
diff --git a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/TrivialReflectionUsage.markdown b/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/TrivialReflectionUsage.markdown
deleted file mode 100644
index 533ba8b03d..0000000000
--- a/TOOLS/hermes/src/main/resources/org/opalj/hermes/queries/TrivialReflectionUsage.markdown
+++ /dev/null
@@ -1,13 +0,0 @@
-#Trivial Reflection Usage
-
-Counts the number of cases where `Class.forName` calls can be trivially resolved, because the respective String(s) are directly available. E.g.,
-
- String className = "com.here.MyLAF"
- Class.forName(className)
-
-or
-
- String className = "com.here.DefaultLAF"
- if(