Program Analysis Result


Program Introspector (com.github.franciscoortin.introspector)
Owner Computational Reflection (garciarmiguel@uniovi.es)
Analysis Date 04-06-2026 08:10
Analysis Elapsed Time 00:00:49.058
Number of Analyses 30
Number of Projects 1
Number of Files 90
Lines of Code 7,642
Non Empty Lines of Code 6,567
Number of Nodes 17,100
Number of Relationships 50,396
94.73%
Overall Score
36,605 checks executed
417 warnings found
Analysis Category Syntactic Construct Score
Avoid Ambiguous or Confusing Uses of Overloading
es.uniovi.reflection.analyses.cmu.met50
Program Understandability Method Declaration 4/4,288 (99.91%)

This rule detects classes with overloaded methods with a) the same parameter types in a different order; or b) four or more parameters sharing the same types in different implementations. We consider boxed primitive types equivalent to their primitive counterpart for this rule.

You must avoid confusing overloadings like introspector.model.ArrayNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> in line 72 (very similar to declaration in line 93) in /src/main/java/introspector/model/ArrayNode.java.

You must avoid confusing overloadings like introspector.model.CollectionNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> in line 72 (very similar to declaration in line 93) in /src/main/java/introspector/model/CollectionNode.java.

You must avoid confusing overloadings like introspector.model.ObjectNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> in line 138 (very similar to declaration in line 93) in /src/main/java/introspector/model/ObjectNode.java.

You must avoid confusing overloadings like introspector.model.MapNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> in line 91 (very similar to declaration in line 93) in /src/main/java/introspector/model/MapNode.java.
For parameter types, favor interfaces over classes
es.uniovi.reflection.analyses.bloch.7.40.2
Bad Practice Parameter Declaration 4/417 (99.04%)

This rule detects public method or constructor definitions in which the type of one of its parameters implements a interface that can be interchanged for the type. This interface should define all the methods and fields used in the body of the method. The change should not affect the rest of the implementation (those regarding lvalue types in assignments and method invocations where the parameter is passed as argument), but may generate small errors that could be solved with easy fixes.

Parameter treeFirstMoment at line 147 in callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is declared as type introspector.model.IntrospectorModel. However, it should be declared as type(s) javax.swing.tree.TreeModel to favor the use of interfaces in public methods.

Parameter treeFirstMoment at line 160 in callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is declared as type introspector.model.IntrospectorModel. However, it should be declared as type(s) javax.swing.tree.TreeModel to favor the use of interfaces in public methods.

Parameter treeFirstMoment at line 210 in callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is declared as type introspector.model.IntrospectorModel. However, it should be declared as type(s) javax.swing.tree.TreeModel to favor the use of interfaces in public methods.

Parameter treeFirstMoment at line 223 in callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is declared as type introspector.model.IntrospectorModel. However, it should be declared as type(s) javax.swing.tree.TreeModel to favor the use of interfaces in public methods.
Use a Try-With-Resources Statement to Safely Handle Closeable Resources
es.uniovi.reflection.analyses.cmu.err54
Reliability Method Invocation 0/902 (100.00%)

We detect when local variables that implements java.lang.AutoCloseable are not initialized in a try-with-resources statement, and the code may throw an exception before calling the close method, causing the abrupt termination of the method or reaching a catch or finally clause where the variable is not closed. In that case, a try-with-resources statement is advised to the programmer.

Never Confuse the Inmutability of a Reference with that of the Referenced Object
es.uniovi.reflection.analyses.cmu.obj50
Programmer Misconceptions Variable Declaration 0/796 (100.00%)

It is checked that the state of objects pointed by final references is not mutated. We exclude assignments to fields inside constructors (or methods only called by constructors) since we understood them as initialization, not mutations.

Ensure that the clone() Method Calls super.clone()
es.uniovi.reflection.analyses.cmu.met53
Program Understandability Method Declaration 0/4,288 (100.00%)

This rule detects implementations of the clone method that do not call (directly or indirectly) super.clone() and encourages the programmer to include such call.

Do Not Attempt to Help the Garbage Collector by Setting Local Reference Variables to Null
es.uniovi.reflection.analyses.cmu.obj54
Programmer Misconceptions Assignment 0/115 (100.00%)

This rule detects the assignment of null to local variables or parameters when they are no longer used.

Minimize the Scope of the Variables - II(Fields)
es.uniovi.reflection.analyses.cmu.dcl53
Bad Practice Field Declaration 3/134 (97.76%)

We search for fields that are unconditionally assigned before their usage, for all the methods. The rule encourages the programmer to use local variables instead.

You must minimize the scope of the variables. You can minimize the scope of attribute a(declared in line 60) in class examples.CycleExample.Root by transforming it into a local variable (as every time its value is used in a method, there is a previous unconditional assignment).

You must minimize the scope of the variables. You can minimize the scope of attribute a(declared in line 58) in class examples.AliasExample.Root by transforming it into a local variable (as every time its value is used in a method, there is a previous unconditional assignment).

You must minimize the scope of the variables. You can minimize the scope of attribute popupMenu(declared in line 34) in class introspector.view.IntrospectorView by transforming it into a local variable (as every time its value is used in a method, there is a previous unconditional assignment).
Do Not Attach Significance to the Ordinal Associated with an Enum
es.uniovi.reflection.analyses.cmu.dcl56
Bad Practice Method Invocation 0/902 (100.00%)

If the ordinal method of some java.lang.Enum is invoked, this rule encourages the programmer to add a new integer field and access it instead.

Provide Sensitive Mutable Classes with Unmodifiable Wrappers
es.uniovi.reflection.analyses.cmu.obj56
Security Field Declaration 0/134 (100.00%)

We detect non-public fields that are returned by a public method, and their state may be mutated by an external client. We consider that a field will be mutable by an external client if its type has a public method that may modify its state (mutators), has a mutable field which is public or returned by a public method, or has any public non-final field. Additionally, it is checked whether there exists a subclass of the field type providing an immutable wrapper to recommend using it or implementing one. In such a wrapper, the mutator methods or the ones exposing the mutable fields must be overridden with implementations where the state of the object is not mutated or exposed.

Do Not Serialize Direct Handles to System Resources
es.uniovi.reflection.analyses.cmu.sec56
Reliability Field Declaration 0/134 (100.00%)

We detect types implementing java.io.Serializable and defining any non-transient field derived from system resources such as java.io.File, org.omg.CosNaming.NamingContext, org.om.CORBA.DomainManager or org.omg.PortableInterceptor.ObjectReferenceFactory. This rule encourages programmers to make the detected fields transient.

Provide public access for every field used in the toString method
es.uniovi.reflection.analyses.bloch.3.10s
Bad Practice Type Declaration 7/315 (97.78%)

This rule detects classes that do not provide public getters to access fields which are used in expressions returned by the toString method.

You should provide a public getter to access the following fields [statements] in class examples.ast.Program in /src/main/java/examples/ast/Program.java, since they are used in the expression returned by the toString method (line 27)

You should provide a public getter to access the following fields [operator,operand1,operand2] in class examples.ast.BinaryExpression in /src/main/java/examples/ast/BinaryExpression.java, since they are used in the expression returned by the toString method (line 49)

You should provide a public getter to access the following fields [operand,operator] in class examples.ast.UnaryExpression in /src/main/java/examples/ast/UnaryExpression.java, since they are used in the expression returned by the toString method (line 29)

You should provide a public getter to access the following fields [expression] in class examples.ast.Write in /src/main/java/examples/ast/Write.java, since they are used in the expression returned by the toString method (line 28)

You should provide a public getter to access the following fields [expression] in class examples.ast.Read in /src/main/java/examples/ast/Read.java, since they are used in the expression returned by the toString method (line 27)

You should provide a public getter to access the following fields [lhs,rhs] in class examples.ast.Assignment in /src/main/java/examples/ast/Assignment.java, since they are used in the expression returned by the toString method (line 37)

You should provide a public getter to access the following fields [value] in class examples.ast.IntLiteral in /src/main/java/examples/ast/IntLiteral.java, since they are used in the expression returned by the toString method (line 33)
Minimize the accessibility of fields
es.uniovi.reflection.analyses.bloch.4.13.2
Bad Practice Field Declaration 32/134 (76.12%)

This rule detects non-private fields that should be private. The only exceptions allowed are constants (static final fields) and package-private fields used in a different compilation unit.

Attribute integerChild in class RootClass has package visibility and should be private.

Attribute a in class NodeC has public visibility and should be private.

Attribute b in class NodeA has public visibility and should be private.

Attribute c in class NodeB has public visibility and should be private.

Attribute b1 in class NodeA has public visibility and should be private.

Attribute b2 in class NodeA has public visibility and should be private.

Attribute c in class NodeB has public visibility and should be private.

Attribute value in class NodeC has public visibility and should be private.

Attribute field1 in class A has package visibility and should be private.

Attribute type in class A has package visibility and should be private.

Attribute field2 in class B has package visibility and should be private.

Attribute type in class B has package visibility and should be private.

Attribute integerChild in class RootClass has package visibility and should be private.

Attribute integerChild in class RootClass has package visibility and should be private.

Attribute anything in class RootClass has package visibility and should be private.

Attribute line in class ASTNode has package visibility and should be private.

Attribute column in class ASTNode has package visibility and should be private.

Attribute statements in class Program has public visibility and should be private.

Attribute operator in class BinaryExpression has public visibility and should be private.

Attribute operand1 in class BinaryExpression has public visibility and should be private.

Attribute operand2 in class BinaryExpression has public visibility and should be private.

Attribute type in class Expression has public visibility and should be private.

Attribute lvalue in class Expression has public visibility and should be private.

Attribute operand in class UnaryExpression has public visibility and should be private.

Attribute expression in class Write has public visibility and should be private.

Attribute expression in class Read has public visibility and should be private.

Attribute lhs in class Assignment has package visibility and should be private.

Attribute rhs in class Assignment has package visibility and should be private.

Attribute operator in class UnaryExpression has public visibility and should be private.

Attribute value in class IntLiteral has public visibility and should be private.

Attribute popupMenu in class IntrospectorView has package visibility and should be private.

Attribute labelStatus in class IntrospectorView has package visibility and should be private.
Minimize the accessibility of classes
es.uniovi.reflection.analyses.bloch.4.13.1
Bad Practice Class Declaration 55/225 (75.56%)

This rule detects public classes that are only used inside its own package in order to change its visibility to "package-protected" so it cannot be visible for the client (**Scenario 1**). Moreover, this rule also detects public and package-protected classes that are only used inside one class in order to tranform the first class into a inner one inside the class where it is being used, changing its visibility to private (**Scenario 2**).

ClassType [examples.TwoTreesComparisonAPIExample.RootClass] is being used only in the class [examples.TwoTreesComparisonAPIExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.TwoTreesComparisonAPIExample.Node] is being used only in the class [examples.TwoTreesComparisonAPIExample.RootClass], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ASTExample] is being used only in the class [examples.ShowDifferentTreesExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.EnumExample.RootNode] is being used only in the class [examples.EnumExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.EnumExample.Node] is being used only in the class [examples.EnumExample.RootNode], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.CycleExample.Root] is being used only in the class [examples.CycleExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.SingletonExample.Singleton] is being used only in the class [examples.SingletonExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.AliasExample.NodeA] is being used only in the class [examples.AliasExample.Root], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.AliasExample.Root] is being used only in the class [examples.AliasExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.InheritedAttributesExample.A] is being used only in the class [examples.InheritedAttributesExample.B], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.InheritedAttributesExample.B] is being used only in the class [examples.InheritedAttributesExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.MapComparisonAPIExample.RootClass] is being used only in the class [examples.MapComparisonAPIExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.MapComparisonAPIExample.Node] is being used only in the class [examples.MapComparisonAPIExample.RootClass], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.RootClass] is being used only in the class [examples.IntrospectorDemo], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.Node] is being used only in the class [examples.RootClass], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.TwoTreesComparisonVisualExample.RootClass] is being used only in the class [examples.TwoTreesComparisonVisualExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.TwoTreesComparisonVisualExample.Node] is being used only in the class [examples.TwoTreesComparisonVisualExample.RootClass], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.DeepCloneTreeComparisonExample.RootClass] is being used only in the class [examples.DeepCloneTreeComparisonExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.Program] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.BinaryExpression] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.Type] is being used only in the class [examples.ast.Expression], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.UnaryExpression] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.Write] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.Variable] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.Read] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.Assignment] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ast.IntLiteral] is being used only in the class [examples.ASTExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.DeepCloner] is being used only in the class [introspector.model.IntrospectorModel], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.ArrayNode] is being used only in the class [introspector.model.NodeFactory], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.EnumNode] is being used only in the class [introspector.model.NodeFactory], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.CollectionNode] is being used only in the class [introspector.model.NodeFactory], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.BuiltinTypeNode] is being used only in the class [introspector.model.NodeFactory], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.ObjectNode] is being used only in the class [introspector.model.NodeFactory], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.MapNode] is being used only in the class [introspector.model.NodeFactory], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.model.traverse.ConsoleTreeSerializer] is being used only in the class [examples.ShowDifferentTreesExample], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.Pair] is being used only in the class [introspector.controller.CompareTreesController], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.UnselectNodeController] is being used only in the class [introspector.view.IntrospectorView], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.TreeMouseClickController] is being used only in the class [introspector.view.IntrospectorView], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.ExpandTreeController] is being used only in the class [introspector.view.IntrospectorView], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.CompareTreesController] is being used only in the class [introspector.view.IntrospectorView], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.ExportTreeController] is being used only in the class [introspector.view.IntrospectorView], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.ResizeWindowController] is being used only in the class [introspector.view.IntrospectorView], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [introspector.controller.NodeSelectedController] is being used only in the class [introspector.view.IntrospectorView], so it may be modified to be a private inner class inside the class which it is using it.

ClassType [examples.ASTExample] is only being used by classes belonging to its same package [examples], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [examples.ast.Expression] is only being used by classes belonging to its same package [examples.ast], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [examples.ast.Type] is only being used by classes belonging to its same package [examples.ast], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.DeepCloner] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.ArrayNode] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.AbstractNode] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.EnumNode] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.CollectionNode] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.BuiltinTypeNode] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.ObjectNode] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.model.MapNode] is only being used by classes belonging to its same package [introspector.model], so it may be modified to be a package protected class only if you do not want it to be visible for the client.

ClassType [introspector.controller.Pair] is only being used by classes belonging to its same package [introspector.controller], so it may be modified to be a package protected class only if you do not want it to be visible for the client.
Always override toString
es.uniovi.reflection.analyses.bloch.3.10
Reliability Type Declaration 0/315 (100.00%)

This rule detects classes not implementing/redefining the toString method when this method is being invoked somewhere in the code.

Check parameters for validity
es.uniovi.reflection.analyses.bloch.7.38
Bad Practice Parameter Declaration 233/417 (44.12%)

This rule detects public method or constructor definitions that declare a parameter used inside, but there is no previous validity check performed on it. Any use of the parameter inside an if or assert condition will be understood as a validity check.

Parameter java.lang.Object root declared at line 30 in public callable introspector.model.IntrospectorModel:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 31.

Parameter java.lang.String name declared at line 42 in public callable introspector.model.IntrospectorModel:<init>(java.lang.String,java.lang.Object,boolean) is not checked for validity before it is used at line(s) 45.

Parameter T2 value declared at line 18 in public callable introspector.controller.Pair:<init>(T1,T2) is not checked for validity before it is used at line(s) 19.

Parameter java.lang.Object root declared at line 42 in public callable introspector.model.IntrospectorModel:<init>(java.lang.String,java.lang.Object,boolean) is not checked for validity before it is used at line(s) 44,45.

Parameter java.lang.Object parent declared at line 63 in public callable introspector.model.IntrospectorModel:getChild(java.lang.Object,int)introspector.model.Node is not checked for validity before it is used at line(s) 64.

Parameter int index declared at line 63 in public callable introspector.model.IntrospectorModel:getChild(java.lang.Object,int)introspector.model.Node is not checked for validity before it is used at line(s) 65.

Parameter java.lang.Object parent declared at line 74 in public callable introspector.model.IntrospectorModel:getChildCount(java.lang.Object)int is not checked for validity before it is used at line(s) 75.

Parameter java.lang.Object object declared at line 85 in public callable introspector.model.IntrospectorModel:isLeaf(java.lang.Object)boolean is not checked for validity before it is used at line(s) 86.

Parameter java.lang.Object parent declared at line 97 in public callable introspector.model.IntrospectorModel:getIndexOfChild(java.lang.Object,java.lang.Object)int is not checked for validity before it is used at line(s) 98.

Parameter java.lang.Object child declared at line 97 in public callable introspector.model.IntrospectorModel:getIndexOfChild(java.lang.Object,java.lang.Object)int is not checked for validity before it is used at line(s) 99.

Parameter java.lang.String title declared at line 163 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,int,int,boolean) is not checked for validity before it is used at line(s) 164.

Parameter javax.swing.tree.TreeModel model declared at line 163 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,int,int,boolean) is not checked for validity before it is used at line(s) 169.

Parameter int width declared at line 163 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,int,int,boolean) is not checked for validity before it is used at line(s) 167,181.

Parameter int height declared at line 163 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,int,int,boolean) is not checked for validity before it is used at line(s) 167.

Parameter boolean show declared at line 163 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,int,int,boolean) is not checked for validity before it is used at line(s) 211.

Parameter java.lang.String title declared at line 328 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel) is not checked for validity before it is used at line(s) 329.

Parameter javax.swing.tree.TreeModel model declared at line 328 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel) is not checked for validity before it is used at line(s) 329.

Parameter java.lang.String title declared at line 337 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 338.

Parameter java.lang.String treeName declared at line 337 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 338.

Parameter java.lang.Object model declared at line 337 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 338.

Parameter java.lang.String title declared at line 346 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,boolean) is not checked for validity before it is used at line(s) 347.

Parameter javax.swing.tree.TreeModel model declared at line 346 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,boolean) is not checked for validity before it is used at line(s) 347.

Parameter boolean show declared at line 346 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,javax.swing.tree.TreeModel,boolean) is not checked for validity before it is used at line(s) 347.

Parameter java.lang.String title declared at line 356 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,boolean) is not checked for validity before it is used at line(s) 357.

Parameter java.lang.String treeName declared at line 356 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,boolean) is not checked for validity before it is used at line(s) 357.

Parameter java.lang.Object model declared at line 356 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,boolean) is not checked for validity before it is used at line(s) 357.

Parameter boolean show declared at line 356 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,boolean) is not checked for validity before it is used at line(s) 357.

Parameter java.lang.String title declared at line 370 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,int,int,boolean) is not checked for validity before it is used at line(s) 371.

Parameter java.lang.String treeName declared at line 370 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,int,int,boolean) is not checked for validity before it is used at line(s) 371.

Parameter java.lang.Object model declared at line 370 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,int,int,boolean) is not checked for validity before it is used at line(s) 371.

Parameter int width declared at line 370 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,int,int,boolean) is not checked for validity before it is used at line(s) 371.

Parameter int height declared at line 370 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,int,int,boolean) is not checked for validity before it is used at line(s) 371.

Parameter boolean show declared at line 370 in public callable introspector.view.IntrospectorView:<init>(java.lang.String,java.lang.String,java.lang.Object,int,int,boolean) is not checked for validity before it is used at line(s) 371.

Parameter javax.swing.tree.TreeModel newTreeModel declared at line 220 in public callable introspector.view.IntrospectorView:addTree(javax.swing.tree.TreeModel)void is not checked for validity before it is used at line(s) 222.

Parameter java.lang.Object treeRoot declared at line 39 in public callable introspector.Introspector:writeTreeAsTxt(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 42.

Parameter java.lang.String rootName declared at line 39 in public callable introspector.Introspector:writeTreeAsTxt(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 42.

Parameter java.lang.String outputFileName declared at line 39 in public callable introspector.Introspector:writeTreeAsTxt(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 42.

Parameter boolean allInfo declared at line 39 in public callable introspector.Introspector:writeTreeAsTxt(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 42.

Parameter java.lang.Object treeRoot declared at line 56 in public callable introspector.Introspector:writeTreeAsTxt(java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 57.

Parameter java.lang.String rootName declared at line 56 in public callable introspector.Introspector:writeTreeAsTxt(java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 57.

Parameter java.lang.String outputFileName declared at line 56 in public callable introspector.Introspector:writeTreeAsTxt(java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 57.

Parameter java.lang.Object treeRoot declared at line 68 in public callable introspector.Introspector:writeTreeAsHtml(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 71.

Parameter java.lang.String rootName declared at line 68 in public callable introspector.Introspector:writeTreeAsHtml(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 71.

Parameter java.lang.String outputFileName declared at line 68 in public callable introspector.Introspector:writeTreeAsHtml(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 71.

Parameter boolean allInfo declared at line 68 in public callable introspector.Introspector:writeTreeAsHtml(java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 71.

Parameter java.lang.Object treeRoot declared at line 85 in public callable introspector.Introspector:writeTreeAsHtml(java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 86.

Parameter java.lang.String rootName declared at line 85 in public callable introspector.Introspector:writeTreeAsHtml(java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 86.

Parameter java.lang.String outputFileName declared at line 85 in public callable introspector.Introspector:writeTreeAsHtml(java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 86.

Parameter java.lang.Object treeRoot1 declared at line 96 in public callable introspector.Introspector:compareTrees(java.lang.Object,java.lang.Object)boolean is not checked for validity before it is used at line(s) 98.

Parameter java.lang.Object treeRoot2 declared at line 96 in public callable introspector.Introspector:compareTrees(java.lang.Object,java.lang.Object)boolean is not checked for validity before it is used at line(s) 98.

Parameter java.lang.Object treeRoot1 declared at line 111 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 115,117.

Parameter java.lang.Object treeRoot2 declared at line 111 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 115,118.

Parameter java.lang.String outputFileName1 declared at line 111 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 119.

Parameter java.lang.String outputFileName2 declared at line 111 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 120.

Parameter boolean allInfo declared at line 111 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 119,120.

Parameter java.lang.Object treeRoot1 declared at line 135 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 136.

Parameter java.lang.Object treeRoot2 declared at line 135 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 136.

Parameter java.lang.String outputFileName1 declared at line 135 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 136.

Parameter java.lang.String outputFileName2 declared at line 135 in public callable introspector.Introspector:compareTreesAsTxt(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 136.

Parameter introspector.model.IntrospectorModel treeFirstMoment declared at line 147 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 148.

Parameter java.lang.Object treeSecondMoment declared at line 147 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 148.

Parameter java.lang.String outputFileName1 declared at line 147 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 148.

Parameter java.lang.String outputFileName2 declared at line 147 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 148.

Parameter introspector.model.IntrospectorModel treeFirstMoment declared at line 160 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 161.

Parameter java.lang.Object treeSecondMoment declared at line 160 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 161.

Parameter java.lang.String outputFileName1 declared at line 160 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 161.

Parameter java.lang.String outputFileName2 declared at line 160 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 161.

Parameter boolean allInfo declared at line 160 in public callable introspector.Introspector:compareTreesAsTxt(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 161.

Parameter java.lang.Object treeRoot1 declared at line 174 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 178,179.

Parameter java.lang.Object treeRoot2 declared at line 174 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 178,180.

Parameter java.lang.String outputFileName1 declared at line 174 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 182.

Parameter java.lang.String outputFileName2 declared at line 174 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 183.

Parameter boolean allInfo declared at line 174 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 182,183.

Parameter java.lang.Object treeRoot1 declared at line 198 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 199.

Parameter java.lang.Object treeRoot2 declared at line 198 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 199.

Parameter java.lang.String outputFileName1 declared at line 198 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 199.

Parameter java.lang.String outputFileName2 declared at line 198 in public callable introspector.Introspector:compareTreesAsHtml(java.lang.Object,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 199.

Parameter introspector.model.IntrospectorModel treeFirstMoment declared at line 210 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 211.

Parameter java.lang.Object treeSecondMoment declared at line 210 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 211.

Parameter java.lang.String outputFileName1 declared at line 210 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 211.

Parameter java.lang.String outputFileName2 declared at line 210 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String)boolean is not checked for validity before it is used at line(s) 211.

Parameter introspector.model.IntrospectorModel treeFirstMoment declared at line 223 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 224.

Parameter java.lang.Object treeSecondMoment declared at line 223 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 224.

Parameter java.lang.String outputFileName1 declared at line 223 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 224.

Parameter java.lang.String outputFileName2 declared at line 223 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 224.

Parameter boolean allInfo declared at line 223 in public callable introspector.Introspector:compareTreesAsHtml(introspector.model.IntrospectorModel,java.lang.Object,java.lang.String,java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 224.

Parameter int line declared at line 30 in public callable examples.ast.ASTNode:<init>(int,int) is not checked for validity before it is used at line(s) 31.

Parameter int column declared at line 30 in public callable examples.ast.ASTNode:<init>(int,int) is not checked for validity before it is used at line(s) 32.

Parameter int line declared at line 20 in public callable examples.ast.Program:<init>(int,int,java.util.List<examples.ast.Statement>) is not checked for validity before it is used at line(s) 21.

Parameter int column declared at line 20 in public callable examples.ast.Program:<init>(int,int,java.util.List<examples.ast.Statement>) is not checked for validity before it is used at line(s) 21.

Parameter java.util.List<examples.ast.Statement> statements declared at line 20 in public callable examples.ast.Program:<init>(int,int,java.util.List<examples.ast.Statement>) is not checked for validity before it is used at line(s) 22.

Parameter int line declared at line 15 in public callable examples.ast.Statement:<init>(int,int) is not checked for validity before it is used at line(s) 16.

Parameter int column declared at line 15 in public callable examples.ast.Statement:<init>(int,int) is not checked for validity before it is used at line(s) 16.

Parameter int line declared at line 40 in public callable examples.ast.BinaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 41.

Parameter int column declared at line 40 in public callable examples.ast.BinaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 41.

Parameter java.lang.String operator declared at line 40 in public callable examples.ast.BinaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 42.

Parameter examples.ast.Expression operand1 declared at line 40 in public callable examples.ast.BinaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 43.

Parameter examples.ast.Expression operand2 declared at line 40 in public callable examples.ast.BinaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 44.

Parameter int line declared at line 26 in public callable examples.ast.Expression:<init>(int,int) is not checked for validity before it is used at line(s) 27.

Parameter int column declared at line 26 in public callable examples.ast.Expression:<init>(int,int) is not checked for validity before it is used at line(s) 27.

Parameter int line declared at line 15 in public callable examples.ast.Type:<init>(int,int) is not checked for validity before it is used at line(s) 16.

Parameter int column declared at line 15 in public callable examples.ast.Type:<init>(int,int) is not checked for validity before it is used at line(s) 16.

Parameter int line declared at line 21 in public callable examples.ast.UnaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression) is not checked for validity before it is used at line(s) 22.

Parameter int column declared at line 21 in public callable examples.ast.UnaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression) is not checked for validity before it is used at line(s) 22.

Parameter java.lang.String operator declared at line 21 in public callable examples.ast.UnaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression) is not checked for validity before it is used at line(s) 23.

Parameter examples.ast.Expression operand declared at line 21 in public callable examples.ast.UnaryExpression:<init>(int,int,java.lang.String,examples.ast.Expression) is not checked for validity before it is used at line(s) 24.

Parameter int line declared at line 21 in public callable examples.ast.Write:<init>(int,int,examples.ast.Expression) is not checked for validity before it is used at line(s) 22.

Parameter int column declared at line 21 in public callable examples.ast.Write:<init>(int,int,examples.ast.Expression) is not checked for validity before it is used at line(s) 22.

Parameter examples.ast.Expression expression declared at line 21 in public callable examples.ast.Write:<init>(int,int,examples.ast.Expression) is not checked for validity before it is used at line(s) 23.

Parameter int line declared at line 17 in public callable examples.ast.Variable:<init>(int,int,java.lang.String) is not checked for validity before it is used at line(s) 18.

Parameter int column declared at line 17 in public callable examples.ast.Variable:<init>(int,int,java.lang.String) is not checked for validity before it is used at line(s) 18.

Parameter java.lang.String name declared at line 17 in public callable examples.ast.Variable:<init>(int,int,java.lang.String) is not checked for validity before it is used at line(s) 19.

Parameter int line declared at line 20 in public callable examples.ast.Read:<init>(int,int,examples.ast.Expression) is not checked for validity before it is used at line(s) 21.

Parameter int column declared at line 20 in public callable examples.ast.Read:<init>(int,int,examples.ast.Expression) is not checked for validity before it is used at line(s) 21.

Parameter examples.ast.Expression expression declared at line 20 in public callable examples.ast.Read:<init>(int,int,examples.ast.Expression) is not checked for validity before it is used at line(s) 22.

Parameter int line declared at line 29 in public callable examples.ast.Assignment:<init>(int,int,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 30.

Parameter int column declared at line 29 in public callable examples.ast.Assignment:<init>(int,int,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 30.

Parameter examples.ast.Expression lhs declared at line 29 in public callable examples.ast.Assignment:<init>(int,int,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 31.

Parameter examples.ast.Expression rhs declared at line 29 in public callable examples.ast.Assignment:<init>(int,int,examples.ast.Expression,examples.ast.Expression) is not checked for validity before it is used at line(s) 32.

Parameter int line declared at line 26 in public callable examples.ast.IntLiteral:<init>(int,int,int) is not checked for validity before it is used at line(s) 27.

Parameter int column declared at line 26 in public callable examples.ast.IntLiteral:<init>(int,int,int) is not checked for validity before it is used at line(s) 27.

Parameter int value declared at line 26 in public callable examples.ast.IntLiteral:<init>(int,int,int) is not checked for validity before it is used at line(s) 28.

Parameter introspector.model.Node original declared at line 40 in public callable introspector.model.DeepCloner:deepClone(introspector.model.Node)introspector.model.Node is not checked for validity before it is used at line(s) 44,49.

Parameter T original declared at line 60 in public callable introspector.model.DeepCloner:deepClone<T>(T)T is not checked for validity before it is used at line(s) 61.

Parameter java.lang.Class<T> type declared at line 29 in public callable introspector.model.NodeFactory:isBuiltinType<T>(java.lang.Class<T>)boolean is not checked for validity before it is used at line(s) 30.

Parameter java.lang.String name declared at line 55 in public callable introspector.model.NodeFactory:createNode(java.lang.String,java.lang.Object)introspector.model.Node is not checked for validity before it is used at line(s) 57,59,60.

Parameter java.lang.String name declared at line 70 in public callable introspector.model.NodeFactory:createNode(java.lang.String,java.lang.Object,java.lang.Class<?>)introspector.model.Node is not checked for validity before it is used at line(s) 74,76,79,82,85,88,91,92,94.

Parameter java.lang.Object value declared at line 70 in public callable introspector.model.NodeFactory:createNode(java.lang.String,java.lang.Object,java.lang.Class<?>)introspector.model.Node is not checked for validity before it is used at line(s) 74,76,79,82,85.

Parameter java.lang.String name declared at line 24 in public callable introspector.model.ArrayNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 25.

Parameter java.lang.Object value declared at line 24 in public callable introspector.model.ArrayNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 25.

Parameter java.lang.String name declared at line 31 in public callable introspector.model.ArrayNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 32.

Parameter java.lang.Object value declared at line 31 in public callable introspector.model.ArrayNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 32.

Parameter java.lang.Class<?> type declared at line 31 in public callable introspector.model.ArrayNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 32.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 73 in public callable introspector.model.ArrayNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> is not checked for validity before it is used at line(s) 75,79,80,81,85,86,87,93,94,95,99,100,103,104,105.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 183 in public callable introspector.model.AbstractNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> is not checked for validity before it is used at line(s) 186,188,191,194,197,200,202.

Parameter java.lang.String name declared at line 17 in public callable introspector.model.EnumNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 18.

Parameter java.lang.Object value declared at line 17 in public callable introspector.model.EnumNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 18.

Parameter java.lang.Class<?> type declared at line 17 in public callable introspector.model.EnumNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 18.

Parameter java.lang.String name declared at line 26 in public callable introspector.model.CollectionNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 27.

Parameter java.lang.Object value declared at line 26 in public callable introspector.model.CollectionNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 27.

Parameter java.lang.String name declared at line 33 in public callable introspector.model.CollectionNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 34.

Parameter java.lang.Object value declared at line 33 in public callable introspector.model.CollectionNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 34.

Parameter java.lang.Class<?> type declared at line 33 in public callable introspector.model.CollectionNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 34.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 73 in public callable introspector.model.CollectionNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> is not checked for validity before it is used at line(s) 75,79,80,81,85,86,87,93,94,98,99,100,103,104,105.

Parameter java.lang.String name declared at line 22 in public callable introspector.model.BuiltinTypeNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 23.

Parameter java.lang.Object value declared at line 22 in public callable introspector.model.BuiltinTypeNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 23.

Parameter java.lang.String name declared at line 32 in public callable introspector.model.BuiltinTypeNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 33.

Parameter java.lang.Object value declared at line 32 in public callable introspector.model.BuiltinTypeNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 33.

Parameter java.lang.Class<?> type declared at line 32 in public callable introspector.model.BuiltinTypeNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 33.

Parameter java.lang.String name declared at line 26 in public callable introspector.model.ObjectNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 27.

Parameter java.lang.Object value declared at line 26 in public callable introspector.model.ObjectNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 27.

Parameter java.lang.String name declared at line 33 in public callable introspector.model.ObjectNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 34.

Parameter java.lang.Object value declared at line 33 in public callable introspector.model.ObjectNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 34.

Parameter java.lang.Class<?> type declared at line 33 in public callable introspector.model.ObjectNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 34.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 139 in public callable introspector.model.ObjectNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> is not checked for validity before it is used at line(s) 141,145,146,147,150,153,154,155,159,160,161,169,174,177,178,181,182,183.

Parameter java.lang.String name declared at line 23 in public callable introspector.model.MapNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 24.

Parameter java.lang.Object value declared at line 23 in public callable introspector.model.MapNode:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 24.

Parameter java.lang.String name declared at line 30 in public callable introspector.model.MapNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 31.

Parameter java.lang.Object value declared at line 30 in public callable introspector.model.MapNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 31.

Parameter java.lang.Class<?> type declared at line 30 in public callable introspector.model.MapNode:<init>(java.lang.String,java.lang.Object,java.lang.Class<?>) is not checked for validity before it is used at line(s) 31.

Parameter java.lang.String treeName declared at line 279 in public callable introspector.view.IntrospectorView:addTree(java.lang.String,java.lang.Object)void is not checked for validity before it is used at line(s) 280.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 92 in public callable introspector.model.MapNode:compareTrees(introspector.model.Node,boolean,java.util.Set<introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)java.util.Set<introspector.model.Node> is not checked for validity before it is used at line(s) 94,98,99,100,104,105,106,112,113,117,118,119,122,123,124.

Parameter java.lang.String name declared at line 30 in public callable introspector.model.IntrospectorModel:<init>(java.lang.String,java.lang.Object) is not checked for validity before it is used at line(s) 31.

Parameter java.lang.Object newTreeModel declared at line 279 in public callable introspector.view.IntrospectorView:addTree(java.lang.String,java.lang.Object)void is not checked for validity before it is used at line(s) 280.

Parameter javax.swing.JLabel label declared at line 33 in public callable introspector.view.ViewHelper:showErrorMessageInStatus(javax.swing.JLabel,java.lang.String)void is not checked for validity before it is used at line(s) 34,35.

Parameter java.lang.String message declared at line 33 in public callable introspector.view.ViewHelper:showErrorMessageInStatus(javax.swing.JLabel,java.lang.String)void is not checked for validity before it is used at line(s) 35.

Parameter javax.swing.JLabel label declared at line 43 in public callable introspector.view.ViewHelper:showMessageInStatus(javax.swing.JLabel,java.lang.String)void is not checked for validity before it is used at line(s) 44,45.

Parameter java.lang.String message declared at line 43 in public callable introspector.view.ViewHelper:showMessageInStatus(javax.swing.JLabel,java.lang.String)void is not checked for validity before it is used at line(s) 45.

Parameter javax.swing.JFrame parent declared at line 76 in public callable introspector.view.ViewHelper:selectFileFromDisk(javax.swing.JFrame,java.lang.String,java.lang.String[])java.util.Optional<java.lang.String> is not checked for validity before it is used at line(s) 79.

Parameter java.lang.String description declared at line 76 in public callable introspector.view.ViewHelper:selectFileFromDisk(javax.swing.JFrame,java.lang.String,java.lang.String[])java.util.Optional<java.lang.String> is not checked for validity before it is used at line(s) 78.

Parameter java.lang.String[] extensions declared at line 76 in public callable introspector.view.ViewHelper:selectFileFromDisk(javax.swing.JFrame,java.lang.String,java.lang.String[])java.util.Optional<java.lang.String> is not checked for validity before it is used at line(s) 78.

Parameter java.lang.String resourceName declared at line 92 in public callable introspector.view.ViewHelper:getResourceNamePath(java.lang.String)java.lang.String is not checked for validity before it is used at line(s) 93.

Parameter T1 key declared at line 11 in public callable introspector.model.traverse.SymmetricPair:<init>(T1,T2) is not checked for validity before it is used at line(s) 12.

Parameter T2 value declared at line 11 in public callable introspector.model.traverse.SymmetricPair:<init>(T1,T2) is not checked for validity before it is used at line(s) 12.

Parameter javax.swing.tree.TreePath path1 declared at line 34 in public callable introspector.model.traverse.TreeComparator:compareTrees(javax.swing.tree.TreePath,javax.swing.tree.TreePath)java.util.Set<introspector.model.Node> is not checked for validity before it is used at line(s) 35.

Parameter javax.swing.tree.TreePath path2 declared at line 34 in public callable introspector.model.traverse.TreeComparator:compareTrees(javax.swing.tree.TreePath,javax.swing.tree.TreePath)java.util.Set<introspector.model.Node> is not checked for validity before it is used at line(s) 35.

Parameter boolean allInfo declared at line 30 in public callable introspector.model.traverse.ConsoleTreeSerializer:<init>(boolean) is not checked for validity before it is used at line(s) 31.

Parameter java.lang.String fileName declared at line 46 in public callable introspector.model.traverse.TxtTreeSerializer:<init>(java.lang.String,boolean) is not checked for validity before it is used at line(s) 47.

Parameter boolean allInfo declared at line 46 in public callable introspector.model.traverse.TxtTreeSerializer:<init>(java.lang.String,boolean) is not checked for validity before it is used at line(s) 48.

Parameter java.lang.String fileName declared at line 58 in public callable introspector.model.traverse.TxtTreeSerializer:<init>(java.lang.String,boolean,java.util.Set<introspector.model.Node>) is not checked for validity before it is used at line(s) 59.

Parameter boolean allInfo declared at line 58 in public callable introspector.model.traverse.TxtTreeSerializer:<init>(java.lang.String,boolean,java.util.Set<introspector.model.Node>) is not checked for validity before it is used at line(s) 60.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 58 in public callable introspector.model.traverse.TxtTreeSerializer:<init>(java.lang.String,boolean,java.util.Set<introspector.model.Node>) is not checked for validity before it is used at line(s) 61.

Parameter int depth declared at line 139 in public callable introspector.model.traverse.TxtTreeSerializer:beforeTraversing(introspector.model.Node,int,boolean)void is not checked for validity before it is used at line(s) 140.

Parameter int depth declared at line 207 in public callable introspector.model.traverse.HtmlTreeSerializer:afterTraversing(introspector.model.Node,int,boolean)void is not checked for validity before it is used at line(s) 209,210,211.

Parameter introspector.model.Node node declared at line 147 in public callable introspector.model.traverse.TxtTreeSerializer:traversing(introspector.model.Node,int,boolean)void is not checked for validity before it is used at line(s) 148,153,156.

Parameter java.util.Map<?,?> map declared at line 25 in public callable introspector.model.traverse.TraverseHelper:containsNullKey(java.util.Map<?,?>)boolean is not checked for validity before it is used at line(s) 26.

Parameter introspector.model.Node node declared at line 89 in public callable introspector.model.traverse.TraverseHelper:shouldBeTraversed(introspector.model.Node,java.util.Set<introspector.model.Node>)boolean is not checked for validity before it is used at line(s) 90.

Parameter java.util.Set<introspector.model.Node> alreadyTraversed declared at line 89 in public callable introspector.model.traverse.TraverseHelper:shouldBeTraversed(introspector.model.Node,java.util.Set<introspector.model.Node>)boolean is not checked for validity before it is used at line(s) 90,92.

Parameter introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node> nodePair declared at line 107 in public callable introspector.model.traverse.TraverseHelper:shouldBeTraversed(introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)boolean is not checked for validity before it is used at line(s) 108.

Parameter java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>> alreadyTraversed declared at line 107 in public callable introspector.model.traverse.TraverseHelper:shouldBeTraversed(introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>,java.util.Set<introspector.model.traverse.SymmetricPair<introspector.model.Node,introspector.model.Node>>)boolean is not checked for validity before it is used at line(s) 108,110.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 126 in public callable introspector.model.traverse.TraverseHelper:addNewChildren(java.util.List<introspector.model.Node>,java.util.List<introspector.model.Node>,java.util.Set<introspector.model.Node>)void is not checked for validity before it is used at line(s) 135.

Parameter introspector.model.Node node declared at line 52 in public callable introspector.model.traverse.WriteTreeTraversal:traverse(introspector.model.Node,introspector.model.traverse.TreeSerializer)void is not checked for validity before it is used at line(s) 54.

Parameter introspector.model.traverse.TreeSerializer treeSerializer declared at line 52 in public callable introspector.model.traverse.WriteTreeTraversal:traverse(introspector.model.Node,introspector.model.traverse.TreeSerializer)void is not checked for validity before it is used at line(s) 53,54,55.

Parameter java.lang.String fileName declared at line 44 in public callable introspector.model.traverse.HtmlTreeSerializer:<init>(java.lang.String,boolean) is not checked for validity before it is used at line(s) 45.

Parameter boolean allInfo declared at line 44 in public callable introspector.model.traverse.HtmlTreeSerializer:<init>(java.lang.String,boolean) is not checked for validity before it is used at line(s) 46.

Parameter java.lang.String fileName declared at line 56 in public callable introspector.model.traverse.HtmlTreeSerializer:<init>(java.lang.String,boolean,java.util.Set<introspector.model.Node>) is not checked for validity before it is used at line(s) 57.

Parameter boolean allInfo declared at line 56 in public callable introspector.model.traverse.HtmlTreeSerializer:<init>(java.lang.String,boolean,java.util.Set<introspector.model.Node>) is not checked for validity before it is used at line(s) 58.

Parameter java.util.Set<introspector.model.Node> modifiedNodes declared at line 56 in public callable introspector.model.traverse.HtmlTreeSerializer:<init>(java.lang.String,boolean,java.util.Set<introspector.model.Node>) is not checked for validity before it is used at line(s) 59.

Parameter introspector.model.Node node declared at line 184 in public callable introspector.model.traverse.HtmlTreeSerializer:traversing(introspector.model.Node,int,boolean)void is not checked for validity before it is used at line(s) 185.

Parameter int depth declared at line 184 in public callable introspector.model.traverse.HtmlTreeSerializer:traversing(introspector.model.Node,int,boolean)void is not checked for validity before it is used at line(s) 188,190,193,194,196,198,199.

Parameter boolean hasBeenVisited declared at line 184 in public callable introspector.model.traverse.HtmlTreeSerializer:traversing(introspector.model.Node,int,boolean)void is not checked for validity before it is used at line(s) 188,190,196,198.

Parameter T1 key declared at line 18 in public callable introspector.controller.Pair:<init>(T1,T2) is not checked for validity before it is used at line(s) 19.

Parameter javax.swing.JTree tree declared at line 27 in public callable introspector.controller.UnselectNodeController:unselectNode(javax.swing.JTree)void is not checked for validity before it is used at line(s) 28.

Parameter javax.swing.JTree tree declared at line 36 in public callable introspector.controller.TreeMouseClickController:<init>(javax.swing.JTree,javax.swing.JPopupMenu) is not checked for validity before it is used at line(s) 37.

Parameter javax.swing.JPopupMenu popupMenu declared at line 36 in public callable introspector.controller.TreeMouseClickController:<init>(javax.swing.JTree,javax.swing.JPopupMenu) is not checked for validity before it is used at line(s) 38.

Parameter javax.swing.JTree tree declared at line 51 in public callable introspector.controller.ExpandTreeController:expandAllFromNode(javax.swing.JTree,introspector.model.Node,javax.swing.tree.TreePath)java.util.List<introspector.model.Node> is not checked for validity before it is used at line(s) 53.

Parameter introspector.model.Node node declared at line 51 in public callable introspector.controller.ExpandTreeController:expandAllFromNode(javax.swing.JTree,introspector.model.Node,javax.swing.tree.TreePath)java.util.List<introspector.model.Node> is not checked for validity before it is used at line(s) 53.

Parameter javax.swing.tree.TreePath treePath declared at line 51 in public callable introspector.controller.ExpandTreeController:expandAllFromNode(javax.swing.JTree,introspector.model.Node,javax.swing.tree.TreePath)java.util.List<introspector.model.Node> is not checked for validity before it is used at line(s) 53.

Parameter javax.swing.JTree tree declared at line 63 in public callable introspector.controller.ExpandTreeController:expandAllFromSelectedNode(javax.swing.JTree)java.util.List<introspector.model.Node> is not checked for validity before it is used at line(s) 64,66,67,68,74.

Parameter java.util.List<javax.swing.JTree> trees declared at line 84 in public callable introspector.controller.ExpandTreeController:expandAllFromRootNode(java.util.List<javax.swing.JTree>)java.util.List<introspector.model.Node> is not checked for validity before it is used at line(s) 86.

Parameter javax.swing.JLabel statusLabel declared at line 28 in public callable introspector.controller.CompareTreesController:<init>(javax.swing.JLabel) is not checked for validity before it is used at line(s) 29.

Parameter javax.swing.JTree tree declared at line 67 in public callable <anonymous introspector.controller.CompareTreesController$1>:getTreeCellRendererComponent(javax.swing.JTree,java.lang.Object,boolean,boolean,boolean,int,boolean)java.awt.Component is not checked for validity before it is used at line(s) 69.

Parameter java.lang.Object value declared at line 67 in public callable <anonymous introspector.controller.CompareTreesController$1>:getTreeCellRendererComponent(javax.swing.JTree,java.lang.Object,boolean,boolean,boolean,int,boolean)java.awt.Component is not checked for validity before it is used at line(s) 69,71.

Parameter boolean sel declared at line 67 in public callable <anonymous introspector.controller.CompareTreesController$1>:getTreeCellRendererComponent(javax.swing.JTree,java.lang.Object,boolean,boolean,boolean,int,boolean)java.awt.Component is not checked for validity before it is used at line(s) 69.

Parameter boolean expanded declared at line 67 in public callable <anonymous introspector.controller.CompareTreesController$1>:getTreeCellRendererComponent(javax.swing.JTree,java.lang.Object,boolean,boolean,boolean,int,boolean)java.awt.Component is not checked for validity before it is used at line(s) 69.

Parameter boolean leaf declared at line 67 in public callable <anonymous introspector.controller.CompareTreesController$1>:getTreeCellRendererComponent(javax.swing.JTree,java.lang.Object,boolean,boolean,boolean,int,boolean)java.awt.Component is not checked for validity before it is used at line(s) 69.

Parameter int row declared at line 67 in public callable <anonymous introspector.controller.CompareTreesController$1>:getTreeCellRendererComponent(javax.swing.JTree,java.lang.Object,boolean,boolean,boolean,int,boolean)java.awt.Component is not checked for validity before it is used at line(s) 69.

Parameter boolean hasFocus declared at line 67 in public callable <anonymous introspector.controller.CompareTreesController$1>:getTreeCellRendererComponent(javax.swing.JTree,java.lang.Object,boolean,boolean,boolean,int,boolean)java.awt.Component is not checked for validity before it is used at line(s) 69.

Parameter javax.swing.JFrame frame declared at line 43 in public callable introspector.controller.ExportTreeController:<init>(javax.swing.JFrame,java.util.List<javax.swing.JTree>) is not checked for validity before it is used at line(s) 44.

Parameter java.util.List<javax.swing.JTree> trees declared at line 43 in public callable introspector.controller.ExportTreeController:<init>(javax.swing.JFrame,java.util.List<javax.swing.JTree>) is not checked for validity before it is used at line(s) 45.

Parameter javax.swing.JFrame frame declared at line 53 in public callable introspector.controller.ExportTreeController:<init>(javax.swing.JFrame,javax.swing.JTree) is not checked for validity before it is used at line(s) 54.

Parameter javax.swing.JTree tree declared at line 53 in public callable introspector.controller.ExportTreeController:<init>(javax.swing.JFrame,javax.swing.JTree) is not checked for validity before it is used at line(s) 56.

Parameter java.lang.String filename declared at line 66 in public callable introspector.controller.ExportTreeController:exportToTxt(java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 77,78.

Parameter javax.swing.JLabel statusLabel declared at line 94 in public callable introspector.controller.ExportTreeController:exportToTxt(javax.swing.JLabel,boolean)boolean is not checked for validity before it is used at line(s) 100,104.

Parameter boolean expandSelectedNode declared at line 94 in public callable introspector.controller.ExportTreeController:exportToTxt(javax.swing.JLabel,boolean)boolean is not checked for validity before it is used at line(s) 98.

Parameter java.lang.String filename declared at line 120 in public callable introspector.controller.ExportTreeController:exportToHtml(java.lang.String,boolean)boolean is not checked for validity before it is used at line(s) 131,132.

Parameter javax.swing.JLabel statusLabel declared at line 148 in public callable introspector.controller.ExportTreeController:exportToHtml(javax.swing.JLabel,boolean)boolean is not checked for validity before it is used at line(s) 154,158.

Parameter boolean expandSelectedNode declared at line 148 in public callable introspector.controller.ExportTreeController:exportToHtml(javax.swing.JLabel,boolean)boolean is not checked for validity before it is used at line(s) 152.

Parameter java.lang.String fileName declared at line 171 in public callable introspector.controller.ExportTreeController:removeFileExtension(java.lang.String)java.lang.String is not checked for validity before it is used at line(s) 172,174,175.

Parameter introspector.view.IntrospectorView introspectorView declared at line 26 in public callable introspector.controller.ResizeWindowController:<init>(introspector.view.IntrospectorView) is not checked for validity before it is used at line(s) 27.

Parameter javax.swing.JTree tree declared at line 37 in public callable introspector.controller.NodeSelectedController:<init>(javax.swing.JTree,javax.swing.JTextArea,javax.swing.JLabel) is not checked for validity before it is used at line(s) 38.

Parameter javax.swing.JTextArea textArea declared at line 37 in public callable introspector.controller.NodeSelectedController:<init>(javax.swing.JTree,javax.swing.JTextArea,javax.swing.JLabel) is not checked for validity before it is used at line(s) 39.

Parameter javax.swing.JLabel labelClass declared at line 37 in public callable introspector.controller.NodeSelectedController:<init>(javax.swing.JTree,javax.swing.JTextArea,javax.swing.JLabel) is not checked for validity before it is used at line(s) 40.
Convert Integers to Floating Point for Floating-Point Operations
es.uniovi.reflection.analyses.cmu.num50
Program Understandability Any Assignment 0/370 (100.00%)

The rule detects division expressions where the two operands are/promote to integers or longs, and the result is assigned to a float or double variable. It is recommended to include a double literal (1.0) as an operand (in case the programmer wants to enforce a double division) or to change the type of the variable to integer (if an integer result is expected).

Minimize the scope of local variables
es.uniovi.reflection.analyses.bloch.8.45
Bad Practice Local Variable Declaration 28/231 (87.88%)

This rule detects both initialized and non-initialized local variable declarations which are not used in the following statement of the program. The rule makes the recommendation of moving these declarations before the statements in which are used for the first time. In case these first uses are located inside a try-catch block or other inner scopes (for instance, inisde if or for blocks), the declaration should be moved before the statement in which the scope changes (unless this variable is only used inside this scope).

You should move the declaration of local variable [list2] in line 27 to inmediately after the statement in line 45, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [map] in line 28 to inmediately after the statement in line 58, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [menuItemExportTxt] in line 108 to inmediately after the statement in line 110, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [input] in line 115 to inmediately after the statement in line 116, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [walker] in line 130 to inmediately after the statement in line 131, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [node2] in line 118 to inmediately after the statement in line 119, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [node2] in line 180 to inmediately after the statement in line 182, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [previousCenterComponent] in line 247 to inmediately after the statement in line 254, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [popupMenu] in line 93 to inmediately after the statement in line 98, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [menuItemExportHTML] in line 101 to inmediately after the statement in line 103, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [tree1] in line 22 to inmediately after the statement in line 28, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [view] in line 23 to inmediately after the statement in line 25, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [tree1] in line 24 to inmediately after the statement in line 30, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [view] in line 29 to inmediately after the statement in line 34, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [view] in line 33 to inmediately after the statement in line 35, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [s2] in line 31 to inmediately after the statement in line 33, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [s3] in line 31 to inmediately after the statement in line 34, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [s4] in line 31 to inmediately after the statement in line 36, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [s5] in line 31 to inmediately after the statement in line 44, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [i] in line 39 to inmediately after the statement in line 40, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [clonedObject] in line 49 to inmediately after the statement in line 50, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [walker] in line 40 to inmediately after the statement in line 41, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [i] in line 41 to inmediately after the statement in line 41, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [walker] in line 76 to inmediately after the statement in line 77, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [i] in line 55 to inmediately after the statement in line 56, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [i] in line 57 to inmediately after the statement in line 58, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [i] in line 66 to inmediately after the statement in line 67, placing the declaration as close as possible from its first use.

You should move the declaration of local variable [walker] in line 69 to inmediately after the statement in line 70, placing the declaration as close as possible from its first use.
Beware the performance of String concatenation
es.uniovi.reflection.analyses.bloch.8.51
Runtime Performance Expression 17/4,275 (99.60%)

This rule detects when the operators + or += are used to concatenate any String inside a loop. This is risky since this operation already takes quadratic time and StringBuilder class must be used instead.

You must not use the operator +/+= in line 63 of type ArrayNode, since it performs in quadratic time, and is already inside a loop (line 57).

You must not use the operator +/+= in line 62 of type CollectionNode, since it performs in quadratic time, and is already inside a loop (line 59).

You must not use the operator +/+= in line 64 of type CollectionNode, since it performs in quadratic time, and is already inside a loop (line 59).

You must not use the operator +/+= in line 120 of type ObjectNode, since it performs in quadratic time, and is already inside a loop (line 115).

You must not use the operator +/+= in line 128 of type ObjectNode, since it performs in quadratic time, and is already inside a loop (line 115).

You must not use the operator +/+= in line 72 of type MapNode, since it performs in quadratic time, and is already inside a loop (line 68).

You must not use the operator +/+= in line 75 of type MapNode, since it performs in quadratic time, and is already inside a loop (line 68).

You must not use the operator +/+= in line 78 of type MapNode, since it performs in quadratic time, and is already inside a loop (line 68).

You must not use the operator +/+= in line 81 of type MapNode, since it performs in quadratic time, and is already inside a loop (line 68).

You must not use the operator +/+= in line 59 of type RootClass, since it performs in quadratic time, and is already inside a loop (line 58).

You must not use the operator +/+= in line 41 of type RootNode, since it performs in quadratic time, and is already inside a loop (line 40).

You must not use the operator +/+= in line 57 of type RootClass, since it performs in quadratic time, and is already inside a loop (line 56).

You must not use the operator +/+= in line 68 of type RootClass, since it performs in quadratic time, and is already inside a loop (line 67).

You must not use the operator +/+= in line 41 of type RootClass, since it performs in quadratic time, and is already inside a loop (line 41).

You must not use the operator +/+= in line 61 of type ArrayNode, since it performs in quadratic time, and is already inside a loop (line 57).

You must not use the operator +/+= in line 78 of type ExportTreeController, since it performs in quadratic time, and is already inside a loop (line 67).

You must not use the operator +/+= in line 132 of type ExportTreeController, since it performs in quadratic time, and is already inside a loop (line 121).
Include failure-capture information in detail messages
es.uniovi.reflection.analyses.bloch.9.63
Reliability Call 0/1,251 (100.00%)

This rule detects Exception subtype classes that do not provide enough parameters to encapsulate all the failure-capture information. To do so, the rule detects constructor calls from these classes, where a string is passed as argument concatenating different types of data (**Scenario 1**). Moreover, this rule also detects constructor calls from Exception subtype classes where a string is passed as argument concatenating different types of data, but whose classes define a constructor with enough parameters to store the failure-capture information without any concatenation (**Scenario 2**).

Adhere to generally accepted naming conventions
es.uniovi.reflection.analyses.bloch.8.56.1
Program Understandability Declaration 3/6,218 (99.95%)

This rule detects types whose names do not follow the CamelCase convention. It also checks that methods, non-final local variable, parameters and fields follow the camelCase convention, excepting static final (constant) fields that must follow the SNAKE_CASE convention.

The constant (static final) field instance does not follow the Java (upper) SNAKE_CASE code convention

The constant (static final) field kryo does not follow the Java (upper) SNAKE_CASE code convention

The type CompareTreesController$1 does not follow the Java (upper) CamelCase code convention
Do not ignore exceptions
es.uniovi.reflection.analyses.bloch.9.65
Reliability Catch Clause 1/10 (90.00%)

This rule detects empty catch blocks, which must not be used to silently ignore exceptions.

Catch block in callable introspector.view.ViewHelper:writeInStatusLabel(javax.swing.JLabel,java.lang.String)void, in line 63 is empty. You must handle the exception properly or, at least, log it.
Enforce noninstanciability with a private constructor
es.uniovi.reflection.analyses.bloch.2.4
Bad Practice Class Declaration 18/225 (92.00%)

This rule detects classes with only static members but without a private constructor. These classes are designed to be static so, in order to prevent their instantiation, they must implement a private constructor.

You should include a private constructor in static class TwoTreesComparisonAPIExample in order to enforce noninstanciability

You should include a private constructor in static class ASTExample in order to enforce noninstanciability

You should include a private constructor in static class MultipleTreesExample in order to enforce noninstanciability

You should include a private constructor in static class EnumExample in order to enforce noninstanciability

You should include a private constructor in static class CycleExample in order to enforce noninstanciability

You should include a private constructor in static class SingletonExample in order to enforce noninstanciability

You should include a private constructor in static class AliasExample in order to enforce noninstanciability

You should include a private constructor in static class InheritedAttributesExample in order to enforce noninstanciability

You should include a private constructor in static class ShowDifferentTreesExample in order to enforce noninstanciability

You should include a private constructor in static class MapComparisonAPIExample in order to enforce noninstanciability

You should include a private constructor in static class TwoTreesComparisonVisualExample in order to enforce noninstanciability

You should include a private constructor in static class IntrospectorDemo in order to enforce noninstanciability

You should include a private constructor in static class SameTreeComparisonOverTimeExample in order to enforce noninstanciability

You should include a private constructor in static class DeepCloneTreeComparisonExample in order to enforce noninstanciability

You should include a private constructor in static class DeepCloner in order to enforce noninstanciability

You should include a private constructor in static class NodeFactory in order to enforce noninstanciability

You should include a private constructor in static class TraverseHelper in order to enforce noninstanciability

You should include a private constructor in static class KotlinASTExample in order to enforce noninstanciability
Do Not Use the clone() Method to Copy Untrusted Method Parameters
es.uniovi.reflection.analyses.cmu.met52
Security Method Invocation 0/902 (100.00%)

The rule checks when clone is invoked against a parameter in a public method or constructor of a public type, and the type of the parameter is not final (overridable). We also consider parameterized (generic) type and array type parameters of non-final types.

Consistently use the Override annotation
es.uniovi.reflection.analyses.bloch.6.36
Bad Practice Method Declaration 4/4,288 (99.91%)

This rule detects methods, defined in one of its supertypes, which have the same name and parameter types. If this method has no Override annotation, a warning is prompted.

You must use the Override annotation in method getChildren (line 33) since it is actually overriding the method introspector.model.AbstractNode:getChildren()java.util.List<introspector.model.Node>.

You must use the Override annotation in method isLeaf (line 42) since it is actually overriding the method introspector.model.Node:isLeaf()boolean.

You must use the Override annotation in method isLeaf (line 42) since it is actually overriding the method introspector.model.Node:isLeaf()boolean.

You must use the Override annotation in method getChildren (line 51) since it is actually overriding the method introspector.model.AbstractNode:getChildren()java.util.List<introspector.model.Node>.
Avoid Cyclic Dependencies Between Packages
es.uniovi.reflection.analyses.cmu.dcl60
Bad Practice Package 4/35 (88.57%)

This rule detects cyclic dependencies between packages and encourages the programmer to undo them.

1 dependency cycle(s) involving package introspector.controller: [Cycle of 2 packages: introspector.controller->introspector.view->introspector.controller]. You must undo them.

1 dependency cycle(s) involving package introspector.model: [Cycle of 2 packages: introspector.model->introspector.model.traverse->introspector.model]. You must undo them.

1 dependency cycle(s) involving package introspector.model.traverse: [Cycle of 2 packages: introspector.model.traverse->introspector.model->introspector.model.traverse]. You must undo them.

1 dependency cycle(s) involving package introspector.view: [Cycle of 2 packages: introspector.view->introspector.controller->introspector.view]. You must undo them.
When you catch an exception to throw a new higher-level one, make sure to set the original exception as the cause.
es.uniovi.reflection.analyses.bloch.9.61.2
Bad Practice Throw Statement 0/0 (100.00%)

This rule detects methods that may throw a checked exception whose particular type is not explicitly declared in the throws clause (because a supertype is declared to be thrown instead).All the particular types of checked exception that may be thrown in a method must be declared in its signature.

Return an Empty Array or Collection Instead of a Null Value for Methods that Return an Array or Collection
es.uniovi.reflection.analyses.cmu.met55
Reliability Return Statement 2/203 (99.01%)

This rule detects statements returning the null literal in methods whose return type is an array or implements the java.util.Collection interface and encourages the programmer to use an empty collection or array instead.

You must not return null when you can return an empty collection or array. Line 34 in /src/main/java/introspector/model/EnumNode.java.

You must not return null when you can return an empty collection or array. Line 52 in /src/main/java/introspector/model/BuiltinTypeNode.java.
Always override hashCode when you override equals
es.uniovi.reflection.analyses.bloch.3.9
Reliability Type Declaration 0/315 (100.00%)

This rule detects classes that implement only one of the hashCode and equals methods. Both methods must be implemented to preserve the general contract for the hashCode method.

Adhere to generally accepted naming conventions
es.uniovi.reflection.analyses.bloch.8.56.2
Program Understandability Package Node 2/38 (94.74%)

This rule detects packages that start with 'java' or 'javax' reserved names, have no hierarchical structure with component names separated by '.', or do not follow the lowercase convention. It also detects when the default package contains any type declaration.

Packages and modules must start with the organization name, and then separate its distinct components with . in a hierarchical way. PACKAGE examples does not follow this convention.

Packages and modules must start with the organization name, and then separate its distinct components with . in a hierarchical way. PACKAGE introspector does not follow this convention.
Declare the particular checked exceptions which can be thrown by your method
es.uniovi.reflection.analyses.bloch.9.62
Program Understandability Callable Declaration 0/4,728 (100.00%)

This rule detects methods that may throw a checked exception whose particular type is not declared in the throws clause (because a supertype is declared to be thrown instead).