Dependency Graph

Online documentation:

Dependency Matrix

Online documentation:

Visualizing Code Metrics through Treemaping

With the Online documentation, understand how Treemaping can help you see patterns in your code base, that would be hard to spot with other ways.

Abstractness versus Instability Diagram

The Abstractness versus Instability Diagram helps to detect which projects are potentially painful to maintain (i.e concrete and stable) and which projects are potentially useless (i.e abstract and instable).

Online documentation:

For beginners: Where to start

Code queries and rules results are truncated to list a maximum of 100 code elements in this report

Does this report gets too large?

The list contains only code elements refactored or added since the baseline for comparison.

The setting Recent Violations Only is enabled

Why should I enable the setting Recent Violations Only ?

Quick Tips

Main
Main \ Rules
Main \ Rules \ Code Quality
Main \ Rules \ Object Oriented Design
Main \ Rules \ Design
Main \ Rules \ Architecture and Layering
Main \ Rules \ Best Practices
Main \ Rules \ Dead Code
Main \ Rules \ Visibility
Main \ Rules \ Purity - Immutability - Side-Effects
Main \ Rules \ Naming Conventions
Main \ Rules \ Source Files Organization
Main \ Group of Queries \ Object Oriented Design
Main \ Group of Queries \ API Breaking Changes
Main \ Group of Queries \ Code Diff Summary
Main \ Group of Queries \ Dead Code
Main \ Metrics \ Application Statistics
Main \ Metrics \ Projects Metrics
Main \ Metrics \ Packages Metrics
Main \ Metrics \ Types Metrics
Main \ Projects Dependencies
Main \ Packages Dependencies
Main \ Types Dependencies
Main \ Build Order
Main \ Analysis Log
Main \ Trend Charts
jarchitect report summary application nameLog4j 2report build date09.22.2014 11:05:26analysis duration00:12jarchitect version 4.0.0.8041baseline for comparison Not Defined. To define a Baseline for Comparison, please read this online documentation. code coverage data Not Defined. To import Code Coverage Data, please read this online documentation.
Get started.Quick tips.Back to JArchitect. The present HTML report is a summary of data gathered by the analysis.
It is recommended to use the JArchitect interactive UI capabilities
to make the most of JArchitect by mastering all aspects of your code.

Diagrams

Java Projects Dependency Graph
Dependency Graph
View as ?fullscaled
Java Projects Dependency Matrix
Dependency Matrix
View as ?fullscaled
Treemap View
Treemap Metric View
View as ?fullscaled
Abstractness versus Instability
Abstractness vs. Instability
View as ?fullscaled

Application Metrics

Note: Further Application Statistics are available.
# Lines of Code
29 723      
0 (NotMyCode)
# Types
1 035      
19   Projects      
68   Packages      
5 945   Methods      
2 483   Fields      
442   Source Files      
Comment
35.35%      
16 251   Lines of Comment      
Method Complexity
56   Max      
2.44   Average      
Code Coverage by TestsN/A because no coverage data specified
Third-Party Usage
34   Projects used      
124   Packages used      
648   Types used      
1 483   Methods used      
41   Fields used      

Rules summary

39390This section lists all Rules violated, and Rules or Queries with Error
  • Number of Rules or Queries with Error (syntax error, exception thrown, time-out): 0
  • Number of Rules violated: 50

Summary of Rules violated

graphHelp Rules can be checked live at
development-time, from within
JArchitect. Online documentation.
graphHelp JArchitect rules report too many flaws on
existing code base? Use the option
Recent Violations Only!
warningCritical Some Critical Rules are violated. Critical Rules
can be used to break the build process if
violated. Online documentation.
Name # Matches Elements Group
warningCritical   Types too big - critical
1 typesCode Quality
warningCritical   Methods too complex - critical
2 methodsCode Quality
warningCritical   Methods with too many parameters - critical
43 methodsCode Quality
warning   Quick summary of methods to refactor
659 methodsCode Quality
warning   Methods too big
109 methodsCode Quality
warning   Methods too complex
37 methodsCode Quality
warning   Methods potentially poorly commented
67 methodsCode Quality
warning   Methods with too many parameters
119 methodsCode Quality
warning   Methods with too many local variables
34 methodsCode Quality
warning   Methods with too many overloads
352 methodsCode Quality
warning   Types with too many methods
26 typesCode Quality
warning   Types with too many fields
3 typesCode Quality
warning   Types with poor cohesion
9 typesCode Quality
warning   Base class should not use derivatives
6 typesObject Oriented Design
warning   Class shouldn't be too deep in inheritance tree
40 typesObject Oriented Design
warning   Class with no descendant should be final if possible
710 typesObject Oriented Design
warning   Avoid the Singleton pattern
17 typesObject Oriented Design
warning   Don't assign static fields from instance methods
40 fieldsObject Oriented Design
warning   Avoid empty interfaces
1 typesObject Oriented Design
warning   Avoid packages with few types
25 packagesDesign
warning   Nested types should not be visible
12 typesDesign
warning   Instances size shouldn't be too big
10 typesDesign
warning   Don't use obsolete types, methods or fields
22 methodsDesign
warning   Avoid packages mutually dependent
37 packagesArchitecture and Layering
warning   Avoid packages dependency cycles
5 packagesArchitecture and Layering
warningCritical   Prefer primitive types to boxed primitives
188 methodsBest Practices
warningCritical   Always override hashcode when you override equals
1 typesBest Practices
warningCritical   Always override toString
857 typesBest Practices
warningCritical   Prefer interfaces to abstract classes
45 typesBest Practices
warningCritical   Use interfaces only to define types
1 typesBest Practices
warningCritical   Avoid using raw types
31 methodsBest Practices
warningCritical   Don't force gabrage collector
4 methodsBest Practices
warningCritical   Do not raise generic exception
14 methodsBest Practices
warning   Potentially dead Types
2 typesDead Code
warning   Potentially dead Methods
313 methodsDead Code
warning   Potentially dead Fields
11 fieldsDead Code
warning   Methods that could have a lower visibility
3747 methodsVisibility
warning   Fields that could have a lower visibility
320 fieldsVisibility
warning   Fields should be declared as private
140 fieldsVisibility
warning   Constructors of abstract classes should be declared as protected or private
25 typesVisibility
warning   Fields should be marked as ReadOnly when possible
131 fieldsPurity - Immutability - Side-Effects
warning   Avoid static fields with a mutable field type
227 fieldsPurity - Immutability - Side-Effects
warning   A field must not be assigned from outside its parent hierarchy types
1 fieldsPurity - Immutability - Side-Effects
warning   Instance fields should begin with a lower character
18 fieldsNaming Conventions
warning   Methods name should begin with an lower character
1 methodsNaming Conventions
warning   Avoid types with name too long
78 typesNaming Conventions
warning   Avoid methods with name too long
214 methodsNaming Conventions
warning   Avoid fields with name too long
3 fieldsNaming Conventions
warning   Avoid defining multiple types in a source file
54 typesSource Files Organization
warning   package name should correspond to file location
747 typesSource Files Organization

Application Statistics

Stat # Occurences Avg StdDev Max
Properties on interfaces 71 interfaces 000 properties on org.apache.logging.log4j.Logger
Methods on interfaces 71 interfaces 6.2815.07126 methods on org.apache.logging.log4j.Logger
Arguments on methods on interfaces 446 methods 1.061.187 arguments on org.apache.logging.log4j.core.impl.LogEventFactory.createEvent(String,Marker,String,Level,Message,List,Throwable)
Public properties on classes 942 Classes 000 public properties on org.apache.logging.log4j.EventLogger
Public methods on classes 942 classes 5.267.04133 public methods on org.apache.logging.log4j.spi.AbstractLogger
Arguments on public methods on classes 4,952 methods 0.821.6229 arguments on org.apache.logging.log4j.core.appender.SyslogAppender.createAppender(String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,Filter,Configuration,String,String,LoggerFields[],String)
BC instructions in non-abstract methods 6,360 methods 21.5841.12801 BC instructions in org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(PluginType,Node,LogEvent)<T>
Cyclomatic complexity on non abstract Methods 6,360 Methods 1.862.56 CC = 52 for org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(PluginType,Node,LogEvent)<T>

Types Metrics : Code Quality

For a particular Code Metric defined for types, values in red represent the 15% highest values.
If you wish to define thresholds on types' Code Metrics, consider writing some Rule.
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.

Types Metrics : Code Members and Inheritance

Type Name # Instance Methods Nb Static Methods Nb Properties # Fields# Children ClassesDepth Of Inheritance Tree Type Package

Types Metrics : Lack Of Cohesion Of Methods and Association Between Classes

Packages Metrics

If you wish to define thresholds on packages' Code Metrics, consider writing some Rules.
Clicking column header arrows sorts values.
Clicking column header title text redirect to the online Code Metric definition.
Packages # lines of code# BC instruction # Types # lines of comment% Comment% CoverageAfferent CouplingEfferent Coupling
pom.xml::org.apache.logging.log4j134170422800-4413
org.apache.logging.log4j.message127459514600-2914
org.apache.logging.log4j.simple96461300-210
org.apache.logging.log4j.spi122862781900-2712
org.apache.logging.log4j.status151711600-3311
org.apache.logging.log4j.util72363400-128
org.apache.logging.log4j.osgi55221200-27
org.apache.logging.log4j.osgi.equinox929200-26
org.apache.logging.log4j.osgi.felix929200-26
pom.xml::org.apache.logging.log4j43620431100-015
org.apache.logging.log4j.core114951394400-3023
org.apache.logging.log4j.core.filter77439432300-1315
org.apache.logging.log4j.core.helpers67331173400-3118
org.apache.logging.log4j.core.impl64933511800-1417
org.apache.logging.log4j.core.jmx37716811600-323
org.apache.logging.log4j.core.layout148775292600-823
org.apache.logging.log4j.core.lookup58423252900-815
org.apache.logging.log4j.core.pattern164780597800-221
org.apache.logging.log4j.core.selector167653700-412
org.apache.logging.log4j.core.web67235201200-020
org.apache.logging.log4j.core.util92401300-23
org.apache.logging.log4j.core.appender208489027800-1837
org.apache.logging.log4j.core.appender.rewrite2471378900-117
org.apache.logging.log4j.core.appender.routing2841282800-019
org.apache.logging.log4j.core.appender.db2971458700-310
org.apache.logging.log4j.core.appender.db.jdbc72033842300-022
org.apache.logging.log4j.core.appender.db.jpa34415041600-017
org.apache.logging.log4j.core.appender.db.jpa.converter48119011900-013
org.apache.logging.log4j.core.appender.db.nosql49328021900-216
org.apache.logging.log4j.core.appender.db.nosql.couchdb81467300-111
org.apache.logging.log4j.core.appender.db.nosql.mongo134687400-012
org.apache.logging.log4j.core.appender.rolling91941143300-123
org.apache.logging.log4j.core.appender.rolling.action132577600-27
org.apache.logging.log4j.core.appender.rolling.helper69265100-04
org.apache.logging.log4j.core.async62224133300-123
org.apache.logging.log4j.core.async.perftest50425321600-012
org.apache.logging.log4j.core.config185484604200-2235
org.apache.logging.log4j.core.config.plugins38520302300-2318
org.apache.logging.log4j.core.net161369266500-330
org.apache.logging.log4j.core.net.ssl39514552000-39
org.apache.logging.log4j.core.net.mock126398600-16
org.apache.logging.log4j.core.osgi.equinox13100-02
org.apache.logging.log4j.core.osgi.felix13100-02
org.apache.logging.log4j.test312100-13
org.apache.logging.log4j.test.appender106390500-138
org.apache.logging.log4j.test.layout739100-09
org.apache.logging.dumbster.smtp3091278600-14
org.apache.log4j77028893200-322
org.apache.log4j.config731200-13
org.apache.log4j.helpers516100-12
org.apache.log4j.spi414700-24
org.apache.log4j.xml318100-08
org.apache.log4j.util43181100-13
org.apache.log4j.osgi.equinox13100-02
org.apache.log4j.osgi.felix13100-02
pom.xml::org.apache.logging.slf4j132618400-113
pom.xml::org.slf4j.helpers87390600-213
org.slf4j.impl1921155400-17
pom.xml::org.apache.logging.slf4j181860600-09
org.apache.logging.log4j.jcl64311400-012
org.apache.logging.log4j.flume.appender174077213700-043
org.apache.logging.log4j.flume.test3141100-05
org.apache.logging.log4j.taglib84133574400-018
org.apache.logging.log4j.jmx.gui216997800-011
org.apache.logging.log4j.samples.app226773700-013
org.apache.logging.log4j.samples.dto29103300-25
org.apache.logging.log4j.samples.events00500-12
org.apache.logging.log4j.samples.util25165100-12

0130
Code Quality  

warningCritical    Critical Rule warning: Types too big - critical
// <Name>Types too big - critical</Name>
warnif count > 0 from t in JustMyCode.Types where 
   
t.NbLinesOfCode > 500 ||
   
t.NbBCInstructions > 3000
   
orderby t.NbLinesOfCode descending
select new { t, t.NbLinesOfCode, t.NbBCInstructions,
                
t.Methods, t.Fields }

// Types where NbLinesOfCode > 500 are extremely complex 
// and should be split in a smaller group of types. 
// See the definition of the NbLinesOfCode metric here 
// http://www.jarchitect.com/Metrics#NbLinesOfCode

// In average, a line of code is compiled to around
// 6 BC instructions. This is why the code metric
// NbBCInstructions is used here, in case the 
// code metric NbLinesOfCode is un-available because
// of missing code source files.
// See the definition of the NbBCInstructions metric here 
// http://www.jarchitect.com/Metrics#NbBCInstructions

1 types matched

type# lines of code (LOC)# ByteCode instructionsMethodsFieldsFull Name
AbstractLoggerTest5143 06318 methods13 fieldsorg.apache.logging.log4j.AbstractLoggerTest

Statistics

Stat   # lines of code (LOC)   # ByteCode instructions   Methods   Fields
Sum:5143 06300
Average:5143 06300
Minimum:5143 06300
Maximum:5143 06300
Standard deviation:0000
Variance:0000
warningCritical    Critical Rule warning: Methods too complex - critical
// <Name>Methods too complex - critical</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.BCCyclomaticComplexity > 40 && 
  
m.BCNestingDepth > 5
  
orderby m.BCCyclomaticComplexity descending,
          
m.BCNestingDepth descending
select new { m, m.BCCyclomaticComplexity, m.BCNestingDepth }

// Methods with BCCyclomaticComplexity > 40 and BCNestingDepth  > 4
// are really too complex and should be split 
// in smaller methods, or even types.
// See the definition of the BCCyclomaticComplexity metric here 
// http://www.jarchitect.com/Metrics#ILCC
// See the definition of the BCNestingDepth metric here 
// http://www.jarchitect.com/Metrics#BCNestingDepth

2 methods matched

methodsByteCode Cyclomatic Complexity (BCCC)ByteCode Nesting DepthFull Name
createPluginObject(PluginType,Node,LogEvent)<T>5211org.apache.logging.log4j.core.config.BaseConfiguration .createPluginObject(PluginType,Node,LogEvent)<T>
createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)4116org.apache.logging.log4j.core.appender.db.nosql.mongo.MongoDBProvider .createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)

Statistics

Stat   ByteCode Cyclomatic Complexity (BCCC)   ByteCode Nesting Depth
Sum:9327
Average:46.513.5
Minimum:4111
Maximum:5216
Standard deviation:5.52.5
Variance:30.256.25
warningCritical    Critical Rule warning: Methods with too many parameters - critical
// <Name>Methods with too many parameters - critical</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.NbParameters > 8
  
orderby m.NbParameters descending
select new { m, m.NbParameters }

// Methods with more than 8 parameters might be painful to call 
// and might degrade performance. You should prefer using 
// additional properties/fields to the declaring type to 
// handle numerous states. Another alternative is to provide 
// a class or structure dedicated to handle arguments passing 
// (for example see the class System.Diagnostics.ProcessStartInfo 
//  and the method System.Diagnostics.Process.Start(ProcessStartInfo))
//  See the definition of the NbParameters metric here 
// http://www.jarchitect.com/Metrics#NbParameters

43 methods matched

methods# ParametersFull Name
createAppender(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,Filter,Configuration,String,String ,LoggerFields[],String)29org.apache.logging.log4j.core.appender.SyslogAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,Filter,Configuration,String,String ,LoggerFields[],String)
createAppender(String,String,SSLConfiguration,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,Filter,Configuration ,String,String,LoggerFields[],String)29org.apache.logging.log4j.core.appender.TLSSyslogAppender .createAppender(String,String,SSLConfiguration,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,Filter,Configuration ,String,String,LoggerFields[],String)
createAppender(Agent[],Property[],String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,FlumeEventFactory,Layout,Filter)22org.apache.logging.log4j.flume.appender.FlumeAppender.createAppender (Agent[],Property[],String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,FlumeEventFactory,Layout,Filter)
RFC5424Layout(Configuration,Facility,String,int,boolean,boolean,String ,String,String,String,String,String,String,String,String,Charset ,String,boolean,LoggerFields[])19org.apache.logging.log4j.core.layout.RFC5424Layout.RFC5424Layout (Configuration,Facility,String,int,boolean,boolean,String,String ,String,String,String,String,String,String,String,Charset,String ,boolean,LoggerFields[])
createLayout(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String ,LoggerFields[],Configuration)18org.apache.logging.log4j.core.layout.RFC5424Layout.createLayout(String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,LoggerFields[],Configuration)
createAppender(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,Layout,Filter,String)17org.apache.logging.log4j.core.appender.SMTPAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,String,String,String,String,Layout,Filter,String)
createAppender(String,String,String,String,String,String ,TriggeringPolicy,RolloverStrategy,Layout,Filter,String,String,String ,Configuration)14org.apache.logging.log4j.core.appender.RollingFileAppender .createAppender(String,String,String,String,String,String ,TriggeringPolicy,RolloverStrategy,Layout,Filter,String,String,String ,Configuration)
getSMTPManager(String,String,String,String,String,String,String,String ,int,String,String,boolean,String,int)14org.apache.logging.log4j.core.net.SMTPManager.getSMTPManager(String ,String,String,String,String,String,String,String,int,String,String ,boolean,String,int)
createAppender(String,String,String,String,String,String,String,String ,Layout,Filter,String,String,Configuration)13org.apache.logging.log4j.core.appender.FileAppender.createAppender (String,String,String,String,String,String,String,String,Layout,Filter ,String,String,Configuration)
createAppender(String,String,String,String,String,String,String,String ,String,String,Layout,Filter,String)13org.apache.logging.log4j.core.appender.JMSQueueAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,Layout,Filter,String)
createAppender(String,String,String,String,String,String,String,String ,String,String,Layout,Filter,String)13org.apache.logging.log4j.core.appender.JMSTopicAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,Layout,Filter,String)
createAppender(String,String,String,String,String,TriggeringPolicy ,RolloverStrategy,Layout,Filter,String,String,String,Configuration)13org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender .createAppender(String,String,String,String,String,TriggeringPolicy ,RolloverStrategy,Layout,Filter,String,String,String,Configuration)
SMTPManager$FactoryData(String,String,String,String,String,String ,String,String,int,String,String,boolean,int)13org.apache.logging.log4j.core.net.SMTPManager$FactoryData .SMTPManager$FactoryData(String,String,String,String,String,String ,String,String,int,String,String,boolean,int)
getContext(String,ClassLoader,Object,boolean,URI,String)12org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext (String,ClassLoader,Object,boolean,URI,String)
Log4jLogEvent(String,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long ,Log4jLogEvent$1)12org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long ,Log4jLogEvent$1)
createAppender(String,String,String,String,String,String,String,String ,Layout,Filter,String,Configuration)12org.apache.logging.log4j.core.appender.SocketAppender.createAppender (String,String,String,String,String,String,String,String,Layout,Filter ,String,Configuration)
RollingRandomAccessFileManager(RandomAccessFile,String,String ,OutputStream,boolean,boolean,long,long,TriggeringPolicy ,RolloverStrategy,String,Layout)12org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager.RollingRandomAccessFileManager (RandomAccessFile,String,String,OutputStream,boolean,boolean,long,long ,TriggeringPolicy,RolloverStrategy,String,Layout)
setValues(AsyncLogger,String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)12org.apache.logging.log4j.core.async.RingBufferLogEvent.setValues (AsyncLogger,String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)
setValues(AsyncLogger,String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)12org.apache.logging.log4j.core.async.RingBufferLogEventTranslator .setValues(AsyncLogger,String,Marker,String,Level,Message,Throwable ,Map,ThreadContext$ContextStack,String,StackTraceElement,long)
FlumeAppender(String,Filter,Layout,boolean,String,String,String,String ,String,boolean,FlumeEventFactory,AbstractFlumeManager)12org.apache.logging.log4j.flume.appender.FlumeAppender.FlumeAppender (String,Filter,Layout,boolean,String,String,String,String,String ,boolean,FlumeEventFactory,AbstractFlumeManager)
FlumePersistentManager(String,String,Agent[],int,int,int,int,int ,Database,Environment,SecretKey,int)12org.apache.logging.log4j.flume.appender.FlumePersistentManager .FlumePersistentManager(String,String,Agent[],int,int,int,int,int ,Database,Environment,SecretKey,int)
Log4jLogEvent(String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)11org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,Throwable,Map,ThreadContext$ContextStack ,String,StackTraceElement,long)
createEvent(String,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)11org.apache.logging.log4j.core.impl.Log4jLogEvent.createEvent(String ,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)
Log4jLogEvent(String,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)11org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)
createAppender(String,String,String,String,String,String,Layout,Filter ,String,String,Configuration)11org.apache.logging.log4j.core.appender.RandomAccessFileAppender .createAppender(String,String,String,String,String,String,Layout ,Filter,String,String,Configuration)
SimpleLogger(String,Level,boolean,boolean,boolean,boolean,String ,MessageFactory,PropertiesUtil,PrintStream)10org.apache.logging.log4j.simple.SimpleLogger.SimpleLogger(String,Level ,boolean,boolean,boolean,boolean,String,MessageFactory,PropertiesUtil ,PrintStream)
createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)10org.apache.logging.log4j.core.appender.db.nosql.mongo.MongoDBProvider .createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)
RollingFileManager(String,String,OutputStream,boolean,long,long ,TriggeringPolicy,RolloverStrategy,String,Layout)10org.apache.logging.log4j.core.appender.rolling.RollingFileManager .RollingFileManager(String,String,OutputStream,boolean,long,long ,TriggeringPolicy,RolloverStrategy,String,Layout)
createManager(String,OutputStream,Socket,SSLConfiguration,InetAddress ,String,int,int,boolean,Layout)10org.apache.logging.log4j.core.net .TLSSocketManager$TLSSocketManagerFactory.createManager(String ,OutputStream,Socket,SSLConfiguration,InetAddress,String,int,int ,boolean,Layout)
TLSSocketManager(String,OutputStream,Socket,SSLConfiguration ,InetAddress,String,int,int,boolean,Layout)10org.apache.logging.log4j.core.net.TLSSocketManager.TLSSocketManager (String,OutputStream,Socket,SSLConfiguration,InetAddress,String,int ,int,boolean,Layout)
FlumePersistentManager$FactoryData(String,Agent[],int,int,int,int,int ,int,String,Property[])10org.apache.logging.log4j.flume.appender .FlumePersistentManager$FactoryData.FlumePersistentManager$FactoryData (String,Agent[],int,int,int,int,int,int,String,Property[])
getManager(String,Agent[],Property[],int,int,int,int,int,int,String)10org.apache.logging.log4j.flume.appender.FlumePersistentManager .getManager(String,Agent[],Property[],int,int,int,int,int,int,String)
append(CharSequence,int,int)9org.apache.logging.log4j.spi.LoggerStream.append(CharSequence,int,int)
finalizeConverter(char,String,int,StringBuilder,FormattingInfo,Map ,List,List,boolean)9org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter (char,String,int,StringBuilder,FormattingInfo,Map,List,List,boolean)
AsyncAppender(String,Filter,AppenderRef[],String,int,boolean,boolean ,Configuration,boolean)9org.apache.logging.log4j.core.appender.AsyncAppender.AsyncAppender (String,Filter,AppenderRef[],String,int,boolean,boolean,Configuration ,boolean)
createAppender(AppenderRef[],String,String,String,String,String,Filter ,Configuration,String)9org.apache.logging.log4j.core.appender.AsyncAppender.createAppender (AppenderRef[],String,String,String,String,String,Filter,Configuration ,String)
RollingFileAppender(String,Layout,Filter,RollingFileManager,String ,String,boolean,boolean,Advertiser)9org.apache.logging.log4j.core.appender.RollingFileAppender .RollingFileAppender(String,Layout,Filter,RollingFileManager,String ,String,boolean,boolean,Advertiser)
RollingRandomAccessFileAppender(String,Layout,Filter ,RollingFileManager,String,String,boolean,boolean,Advertiser)9org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender .RollingRandomAccessFileAppender(String,Layout,Filter ,RollingFileManager,String,String,boolean,boolean,Advertiser)
JMSQueueManager$FactoryData(String,String,String,String,String,String ,String,String,String)9org.apache.logging.log4j.core.net.JMSQueueManager$FactoryData .JMSQueueManager$FactoryData(String,String,String,String,String,String ,String,String,String)
getJMSQueueManager(String,String,String,String,String,String,String ,String,String)9org.apache.logging.log4j.core.net.JMSQueueManager.getJMSQueueManager (String,String,String,String,String,String,String,String,String)
JMSTopicManager$FactoryData(String,String,String,String,String,String ,String,String,String)9org.apache.logging.log4j.core.net.JMSTopicManager$FactoryData .JMSTopicManager$FactoryData(String,String,String,String,String,String ,String,String,String)
getJMSTopicManager(String,String,String,String,String,String,String ,String,String)9org.apache.logging.log4j.core.net.JMSTopicManager.getJMSTopicManager (String,String,String,String,String,String,String,String,String)
TCPSocketManager(String,OutputStream,Socket,InetAddress,String,int,int ,boolean,Layout)9org.apache.logging.log4j.core.net.TCPSocketManager.TCPSocketManager (String,OutputStream,Socket,InetAddress,String,int,int,boolean,Layout)

Statistics

Stat   # Parameters
Sum:536
Average:12.47
Minimum:9
Maximum:29
Standard deviation:4.63
Variance:21.46
warningCritical    Rule warning: Quick summary of methods to refactor
// <Name>Quick summary of methods to refactor</Name>
warnif count > 0 from m in JustMyCode.Methods where 
                                    
// Code Metrics' definitions
  m.NbLinesOfCode > 30 ||           // http://www.jarchitect.com/Metrics#NbLinesOfCode
  m.NbBCInstructions > 200 ||       // http://www.jarchitect.com/Metrics#NbBCInstructions
  m.CyclomaticComplexity > 20 ||    // http://www.jarchitect.com/Metrics#CC
  m.BCCyclomaticComplexity > 50 ||  // http://www.jarchitect.com/Metrics#ILCC
  m.BCNestingDepth > 5 ||           // http://www.jarchitect.com/Metrics#BCNestingDepth
  m.NbParameters > 5 ||             // http://www.jarchitect.com/Metrics#NbParameters
  m.NbVariables > 8 ||              // http://www.jarchitect.com/Metrics#NbVariables
  m.NbOverloads > 6                 // http://www.jarchitect.com/Metrics#NbOverloads

select new { m, m.NbLinesOfCode, m.NbBCInstructions, m.CyclomaticComplexity, 
             
m.BCCyclomaticComplexity, m.BCNestingDepth, 
             
m.NbParameters, m.NbVariables, m.NbOverloads } 

659 methods matched

methods# lines of code (LOC)# ByteCode instructionsCyclomatic Complexity (CC)ByteCode Cyclomatic Complexity (BCCC)ByteCode Nesting Depth# Parameters# Variables# OverloadsFull Name
getContext()18N/A10009org.apache.logging.log4j.LogManager.getContext()
getContext(boolean)110110109org.apache.logging.log4j.LogManager.getContext(boolean)
getContext(ClassLoader,boolean)18110209org.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean)
getContext(ClassLoader,boolean,Object)18110309org.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean ,Object)
getContext(ClassLoader,boolean,URI)110110309org.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean,URI )
getContext(ClassLoader,boolean,Object,URI)110110409org.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean ,Object,URI)
getContext(ClassLoader,boolean,Object,URI,String)110110509org.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean ,Object,URI,String)
getContext(String,boolean)17110209org.apache.logging.log4j.LogManager.getContext(String,boolean)
getContext(String,ClassLoader,boolean)17110309org.apache.logging.log4j.LogManager.getContext(String,ClassLoader ,boolean)
getLogger()14N/A10009org.apache.logging.log4j.LogManager.getLogger()
getLogger(Class)19220109org.apache.logging.log4j.LogManager.getLogger(Class)
getLogger(Class,MessageFactory)110220209org.apache.logging.log4j.LogManager.getLogger(Class,MessageFactory)
getLogger(MessageFactory)15110109org.apache.logging.log4j.LogManager.getLogger(MessageFactory)
getLogger(Object)110220109org.apache.logging.log4j.LogManager.getLogger(Object)
getLogger(Object,MessageFactory)111220209org.apache.logging.log4j.LogManager.getLogger(Object,MessageFactory)
getLogger(String)217220119org.apache.logging.log4j.LogManager.getLogger(String)
getLogger(String,MessageFactory)218220219org.apache.logging.log4j.LogManager.getLogger(String,MessageFactory)
getLogger(String,String)19110209org.apache.logging.log4j.LogManager.getLogger(String,String)
LogManager()023411500172org.apache.logging.log4j.LogManager.LogManager()
debug(Marker,Message)001102014org.apache.logging.log4j.Logger.debug(Marker,Message)
debug(Marker,Message,Throwable)001103014org.apache.logging.log4j.Logger.debug(Marker,Message,Throwable)
debug(Marker,Object)001102014org.apache.logging.log4j.Logger.debug(Marker,Object)
debug(Marker,Object,Throwable)001103014org.apache.logging.log4j.Logger.debug(Marker,Object,Throwable)
debug(Marker,String)001102014org.apache.logging.log4j.Logger.debug(Marker,String)
debug(Marker,String,Object[])001103014org.apache.logging.log4j.Logger.debug(Marker,String,Object[])
debug(Marker,String,Throwable)001103014org.apache.logging.log4j.Logger.debug(Marker,String,Throwable)
debug(Message)001101014org.apache.logging.log4j.Logger.debug(Message)
debug(Message,Throwable)001102014org.apache.logging.log4j.Logger.debug(Message,Throwable)
debug(Object)001101014org.apache.logging.log4j.Logger.debug(Object)
debug(Object,Throwable)001102014org.apache.logging.log4j.Logger.debug(Object,Throwable)
debug(String)001101014org.apache.logging.log4j.Logger.debug(String)
debug(String,Object[])001102014org.apache.logging.log4j.Logger.debug(String,Object[])
debug(String,Throwable)001102014org.apache.logging.log4j.Logger.debug(String,Throwable)
error(Marker,Message)001102014org.apache.logging.log4j.Logger.error(Marker,Message)
error(Marker,Message,Throwable)001103014org.apache.logging.log4j.Logger.error(Marker,Message,Throwable)
error(Marker,Object)001102014org.apache.logging.log4j.Logger.error(Marker,Object)
error(Marker,Object,Throwable)001103014org.apache.logging.log4j.Logger.error(Marker,Object,Throwable)
error(Marker,String)001102014org.apache.logging.log4j.Logger.error(Marker,String)
error(Marker,String,Object[])001103014org.apache.logging.log4j.Logger.error(Marker,String,Object[])
error(Marker,String,Throwable)001103014org.apache.logging.log4j.Logger.error(Marker,String,Throwable)
error(Message)001101014org.apache.logging.log4j.Logger.error(Message)
error(Message,Throwable)001102014org.apache.logging.log4j.Logger.error(Message,Throwable)
error(Object)001101014org.apache.logging.log4j.Logger.error(Object)
error(Object,Throwable)001102014org.apache.logging.log4j.Logger.error(Object,Throwable)
error(String)001101014org.apache.logging.log4j.Logger.error(String)
error(String,Object[])001102014org.apache.logging.log4j.Logger.error(String,Object[])
error(String,Throwable)001102014org.apache.logging.log4j.Logger.error(String,Throwable)
fatal(Marker,Message)001102014org.apache.logging.log4j.Logger.fatal(Marker,Message)
fatal(Marker,Message,Throwable)001103014org.apache.logging.log4j.Logger.fatal(Marker,Message,Throwable)
fatal(Marker,Object)001102014org.apache.logging.log4j.Logger.fatal(Marker,Object)
fatal(Marker,Object,Throwable)001103014org.apache.logging.log4j.Logger.fatal(Marker,Object,Throwable)
fatal(Marker,String)001102014org.apache.logging.log4j.Logger.fatal(Marker,String)
fatal(Marker,String,Object[])001103014org.apache.logging.log4j.Logger.fatal(Marker,String,Object[])
fatal(Marker,String,Throwable)001103014org.apache.logging.log4j.Logger.fatal(Marker,String,Throwable)
fatal(Message)001101014org.apache.logging.log4j.Logger.fatal(Message)
fatal(Message,Throwable)001102014org.apache.logging.log4j.Logger.fatal(Message,Throwable)
fatal(Object)001101014org.apache.logging.log4j.Logger.fatal(Object)
fatal(Object,Throwable)001102014org.apache.logging.log4j.Logger.fatal(Object,Throwable)
fatal(String)001101014org.apache.logging.log4j.Logger.fatal(String)
fatal(String,Object[])001102014org.apache.logging.log4j.Logger.fatal(String,Object[])
fatal(String,Throwable)001102014org.apache.logging.log4j.Logger.fatal(String,Throwable)
info(Marker,Message)001102014org.apache.logging.log4j.Logger.info(Marker,Message)
info(Marker,Message,Throwable)001103014org.apache.logging.log4j.Logger.info(Marker,Message,Throwable)
info(Marker,Object)001102014org.apache.logging.log4j.Logger.info(Marker,Object)
info(Marker,Object,Throwable)001103014org.apache.logging.log4j.Logger.info(Marker,Object,Throwable)
info(Marker,String)001102014org.apache.logging.log4j.Logger.info(Marker,String)
info(Marker,String,Object[])001103014org.apache.logging.log4j.Logger.info(Marker,String,Object[])
info(Marker,String,Throwable)001103014org.apache.logging.log4j.Logger.info(Marker,String,Throwable)
info(Message)001101014org.apache.logging.log4j.Logger.info(Message)
info(Message,Throwable)001102014org.apache.logging.log4j.Logger.info(Message,Throwable)
info(Object)001101014org.apache.logging.log4j.Logger.info(Object)
info(Object,Throwable)001102014org.apache.logging.log4j.Logger.info(Object,Throwable)
info(String)001101014org.apache.logging.log4j.Logger.info(String)
info(String,Object[])001102014org.apache.logging.log4j.Logger.info(String,Object[])
info(String,Throwable)001102014org.apache.logging.log4j.Logger.info(String,Throwable)
log(Level,Marker,Message)001103014org.apache.logging.log4j.Logger.log(Level,Marker,Message)
log(Level,Marker,Message,Throwable)001104014org.apache.logging.log4j.Logger.log(Level,Marker,Message,Throwable)
log(Level,Marker,Object)001103014org.apache.logging.log4j.Logger.log(Level,Marker,Object)
log(Level,Marker,Object,Throwable)001104014org.apache.logging.log4j.Logger.log(Level,Marker,Object,Throwable)
log(Level,Marker,String)001103014org.apache.logging.log4j.Logger.log(Level,Marker,String)
log(Level,Marker,String,Object[])001104014org.apache.logging.log4j.Logger.log(Level,Marker,String,Object[])
log(Level,Marker,String,Throwable)001104014org.apache.logging.log4j.Logger.log(Level,Marker,String,Throwable)
log(Level,Message)001102014org.apache.logging.log4j.Logger.log(Level,Message)
log(Level,Message,Throwable)001103014org.apache.logging.log4j.Logger.log(Level,Message,Throwable)
log(Level,Object)001102014org.apache.logging.log4j.Logger.log(Level,Object)
log(Level,Object,Throwable)001103014org.apache.logging.log4j.Logger.log(Level,Object,Throwable)
log(Level,String)001102014org.apache.logging.log4j.Logger.log(Level,String)
log(Level,String,Object[])001103014org.apache.logging.log4j.Logger.log(Level,String,Object[])
log(Level,String,Throwable)001103014org.apache.logging.log4j.Logger.log(Level,String,Throwable)
trace(Marker,Message)001102014org.apache.logging.log4j.Logger.trace(Marker,Message)
trace(Marker,Message,Throwable)001103014org.apache.logging.log4j.Logger.trace(Marker,Message,Throwable)
trace(Marker,Object)001102014org.apache.logging.log4j.Logger.trace(Marker,Object)
trace(Marker,Object,Throwable)001103014org.apache.logging.log4j.Logger.trace(Marker,Object,Throwable)
trace(Marker,String)001102014org.apache.logging.log4j.Logger.trace(Marker,String)
trace(Marker,String,Object[])001103014org.apache.logging.log4j.Logger.trace(Marker,String,Object[])
trace(Marker,String,Throwable)001103014org.apache.logging.log4j.Logger.trace(Marker,String,Throwable)
trace(Message)001101014org.apache.logging.log4j.Logger.trace(Message)
trace(Message,Throwable)001102014org.apache.logging.log4j.Logger.trace(Message,Throwable)
trace(Object)001101014org.apache.logging.log4j.Logger.trace(Object)
trace(Object,Throwable)001102014org.apache.logging.log4j.Logger.trace(Object,Throwable)

Statistics

Stat   # lines of code (LOC)   # ByteCode instructions   Cyclomatic Complexity (CC)   ByteCode Cyclomatic Complexity (BCCC)   ByteCode Nesting Depth   # Parameters   # Variables   # Overloads
Sum:8 45042 6592 2322 7614162 0482 3675 006
Average:12.8264.734.394.190.633.113.597.6
Minimum:00110001
Maximum:156801565221296821
Standard deviation:19.7398.416.586.232.093.366.426.36
Variance:389.289 68443.3438.864.3711.2841.1640.42
warningCritical    Rule warning: Methods too big
// <Name>Methods too big</Name>
warnif count > 0 from m in JustMyCode.Methods where 
   
m.NbLinesOfCode > 30 ||
   
m.NbBCInstructions > 200
   
orderby m.NbLinesOfCode descending,
           
m.NbBCInstructions descending
select new { m, m.NbLinesOfCode, m.NbBCInstructions }

// Methods where NbLinesOfCode > 30 or NbBCInstructions > 200
// are extremely complex and should be split in smaller methods.
// See the definition of the NbLinesOfCode metric here 
// http://www.jarchitect.com/Metrics#NbLinesOfCode

109 methods matched

methods# lines of code (LOC)# ByteCode instructionsFull Name
createPluginObject(PluginType,Node,LogEvent)<T>156801org.apache.logging.log4j.core.config.BaseConfiguration .createPluginObject(PluginType,Node,LogEvent)<T>
toSerializable(LogEvent)135606org.apache.logging.log4j.core.layout.JSONLayout.toSerializable (LogEvent)
toSerializable(LogEvent)135593org.apache.logging.log4j.core.layout.XMLLayout.toSerializable(LogEvent )
testWriteInternal03()116774org.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManagerTest.testWriteInternal03()
XMLConfiguration(ConfigurationFactory$ConfigurationSource)104518org.apache.logging.log4j.core.config.XMLConfiguration.XMLConfiguration (ConfigurationFactory$ConfigurationSource)
recursiveDeepToString(Object,StringBuilder,Set)104389org.apache.logging.log4j.message.ParameterizedMessage .recursiveDeepToString(Object,StringBuilder,Set)
run()95345org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.run()
testWriteInternal02()92581org.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManagerTest.testWriteInternal02()
parse(String,List,List,boolean)86312org.apache.logging.log4j.core.pattern.PatternParser.parse(String,List ,List,boolean)
JSONConfiguration(ConfigurationFactory$ConfigurationSource)78390org.apache.logging.log4j.core.config.JSONConfiguration .JSONConfiguration(ConfigurationFactory$ConfigurationSource)
sendBatch(DatabaseEntry,DatabaseEntry)76279org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.sendBatch(DatabaseEntry ,DatabaseEntry)
createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)74443org.apache.logging.log4j.core.appender.db.nosql.mongo.MongoDBProvider .createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)
substitute(LogEvent,StringBuilder,int,int,List)66251org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute (LogEvent,StringBuilder,int,int,List)
getNextTime(long,int,boolean)64260org.apache.logging.log4j.core.appender.rolling.PatternProcessor .getNextTime(long,int,boolean)
testWriteInternal01()62374org.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManagerTest.testWriteInternal01()
createProperties(String,Agent[],Property[],int,String)59345org.apache.logging.log4j.flume.appender .FlumeEmbeddedManager$FlumeManagerFactory.createProperties(String ,Agent[],Property[],int,String)
writeInternal(LogEvent)59258org.apache.logging.log4j.core.appender.db.nosql.NoSQLDatabaseManager .writeInternal(LogEvent)
test()58365org.apache.logging.log4j.core.filter.BurstFilterTest.test()
toSerializable(LogEvent)58293org.apache.logging.log4j.core.layout.HTMLLayout.toSerializable (LogEvent)
createAppender(Agent[],Property[],String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,FlumeEventFactory,Layout,Filter)58257org.apache.logging.log4j.flume.appender.FlumeAppender.createAppender (Agent[],Property[],String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,FlumeEventFactory,Layout,Filter)
purgeAscending(int,int,RollingFileManager)55199org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy .purgeAscending(int,int,RollingFileManager)
testReconnect()55152org.apache.logging.log4j.core.net.SocketReconnectTest.testReconnect()
main(String[])54331org.apache.logging.log4j.core.async.perftest.PerfTestDriver.main (String[])
RFC5424Layout(Configuration,Facility,String,int,boolean,boolean,String ,String,String,String,String,String,String,String,String,Charset ,String,boolean,LoggerFields[])54270org.apache.logging.log4j.core.layout.RFC5424Layout.RFC5424Layout (Configuration,Facility,String,int,boolean,boolean,String,String ,String,String,String,String,String,String,String,Charset,String ,boolean,LoggerFields[])
execute()53409org.apache.logging.dumbster.smtp.SmtpRequest.execute()
createNoSQLProvider(String,String,String,String,String,String,String ,String)53301org.apache.logging.log4j.core.appender.db.nosql.couchdb .CouchDBProvider.createNoSQLProvider(String,String,String,String ,String,String,String,String)
createConverter(String,StringBuilder,Map,List,boolean)53282org.apache.logging.log4j.core.pattern.PatternParser.createConverter (String,StringBuilder,Map,List,boolean)
collectPlugins(boolean,String)52289org.apache.logging.log4j.core.config.plugins.PluginManager .collectPlugins(boolean,String)
formatState(StringBuilder,ThreadInfo)52221org.apache.logging.log4j.message.ExtendedThreadInformation.formatState (StringBuilder,ThreadInfo)
doConfigure()51243org.apache.logging.log4j.core.config.BaseConfiguration.doConfigure()
constructNode(String,Node,JsonNode)50334org.apache.logging.log4j.core.config.JSONConfiguration.constructNode (String,Node,JsonNode)
testLayout()50272org.apache.logging.log4j.core.layout.RFC5424LayoutTest.testLayout()
createManager(String,FlumePersistentManager$FactoryData)49235org.apache.logging.log4j.flume.appender .FlumePersistentManager$BDBManagerFactory.createManager(String ,FlumePersistentManager$FactoryData)
getAllEvents(String)48154org.apache.logging.log4j.samples.app.MockEventsSupplier.getAllEvents (String)
toString()47273org.apache.logging.log4j.Timer.toString()
toString()47273org.apache.logging.log4j.core.Timer.toString()
testPerformance()47207org.apache.logging.log4j.DebugDisabledPerformanceComparison .testPerformance()
run()47161org.apache.logging.log4j.core.net.SocketReconnectTest$TestSocketServer .run()
run()47145org.apache.logging.dumbster.smtp.SimpleSmtpServer.run()
getContext(String,ClassLoader,boolean,URI)46140org.apache.logging.log4j.core.selector.ClassLoaderContextSelector .getContext(String,ClassLoader,boolean,URI)
startLogging(String,String,String,HttpServletRequest)4686org.apache.logging.log4j.samples.app.LoggingController.startLogging (String,String,String,HttpServletRequest)
FlumeEvent(LogEvent,String,String,String,String,String,boolean)45229org.apache.logging.log4j.flume.appender.FlumeEvent.FlumeEvent(LogEvent ,String,String,String,String,String,boolean)
tearDown()45105org.apache.logging.log4j.core.appender.db.jdbc .AbstractJdbcAppenderTest.tearDown()
tearDown()45105org.apache.logging.log4j.core.appender.db.jpa.AbstractJpaAppenderTest .tearDown()
createConnectionSource(String,String)45101org.apache.logging.log4j.core.appender.db.jdbc .FactoryMethodConnectionSource.createConnectionSource(String,String)
testBaseJpaEntityAppender()44249org.apache.logging.log4j.core.appender.db.jpa.AbstractJpaAppenderTest .testBaseJpaEntityAppender()
testBasicJpaEntityAppender()44246org.apache.logging.log4j.core.appender.db.jpa.AbstractJpaAppenderTest .testBasicJpaEntityAppender()
purgeDescending(int,int,RollingFileManager)44157org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy .purgeDescending(int,int,RollingFileManager)
testFailover()43216org.apache.logging.log4j.flume.appender.FlumePersistentAppenderTest .testFailover()
testRollover()43163org.apache.logging.log4j.core.appender .RollingRandomAccessFileAppenderRolloverTest.testRollover()
escapeJsonControlCharacters(String)43150org.apache.logging.log4j.core.helpers.Transform .escapeJsonControlCharacters(String)
createRequest(String,SmtpState)43148org.apache.logging.dumbster.smtp.SmtpRequest.createRequest(String ,SmtpState)
computeTimeStampString(long)42198org.apache.logging.log4j.core.layout.RFC5424Layout .computeTimeStampString(long)
mdcPattern()41170org.apache.logging.log4j.core.layout.PatternLayoutTest.mdcPattern()
getThrowable(String,String,Throwable,StackTraceElement[])41116org.apache.logging.log4j.core.appender.db.jpa.converter .ThrowableAttributeConverter.getThrowable(String,String,Throwable ,StackTraceElement[])
newInstance(String[])40235org.apache.logging.log4j.core.impl.ThrowableFormatOptions.newInstance (String[])
testInitializeWithClassLoaderNoParametersThenSetLoggerContextThenDeini tialize()39198org.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testInitializeWithClassLoaderNoParametersThenSetLoggerContextThenDein itialize()
appendStructuredElements(StringBuilder,LogEvent)39191org.apache.logging.log4j.core.layout.RFC5424Layout .appendStructuredElements(StringBuilder,LogEvent)
testEscape()38228org.apache.logging.log4j.core.layout.RFC5424LayoutTest.testEscape()
testLogDebug()38213org.apache.logging.log4j.AbstractLoggerTest.testLogDebug()
testLogError()38213org.apache.logging.log4j.AbstractLoggerTest.testLogError()
testLogFatal()38213org.apache.logging.log4j.AbstractLoggerTest.testLogFatal()
testLogInfo()38213org.apache.logging.log4j.AbstractLoggerTest.testLogInfo()
testLogTrace()38213org.apache.logging.log4j.AbstractLoggerTest.testLogTrace()
testLogWarn()38213org.apache.logging.log4j.AbstractLoggerTest.testLogWarn()
testDebug()38192org.apache.logging.log4j.AbstractLoggerTest.testDebug()
testError()38192org.apache.logging.log4j.AbstractLoggerTest.testError()
testFatal()38192org.apache.logging.log4j.AbstractLoggerTest.testFatal()
testInfo()38192org.apache.logging.log4j.AbstractLoggerTest.testInfo()
testTrace()38192org.apache.logging.log4j.AbstractLoggerTest.testTrace()
testWarn()38192org.apache.logging.log4j.AbstractLoggerTest.testWarn()
testInitializeWithNoParametersThenSetLoggerContextThenDeinitialize()38189org.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testInitializeWithNoParametersThenSetLoggerContextThenDeinitialize()
testDataSourceConfig()38178org.apache.logging.log4j.core.appender.db.jdbc .AbstractJdbcAppenderTest.testDataSourceConfig()
testDelivery()38159org.apache.logging.log4j.core.appender.SMTPAppenderTest.testDelivery()
AnsiEscape()37399org.apache.logging.log4j.core.pattern.AnsiEscape.AnsiEscape()
testThreads()37198org.apache.logging.log4j.FilterPerformanceComparison.testThreads()
testWrapExecutionWithNoParameters()37198org.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testWrapExecutionWithNoParameters()
testFlushAtEndOfBatch()37196org.apache.logging.log4j.core.appender.JSONCompleteFileAppenderTest .testFlushAtEndOfBatch()
testAdditivity3()37135org.apache.log4j.LoggerTest.testAdditivity3()
DatePatternConverter(String[])37126org.apache.logging.log4j.core.pattern.DatePatternConverter .DatePatternConverter(String[])
printStack(StringBuilder,StackTraceElement[])36169org.apache.logging.log4j.message.ExtendedThreadInformation.printStack (StringBuilder,StackTraceElement[])
resolvePackageData(Stack,Map,StackTraceElement[],StackTraceElement[])36152org.apache.logging.log4j.core.impl.ThrowableProxy.resolvePackageData (Stack,Map,StackTraceElement[],StackTraceElement[])
lookup(String)36147org.apache.logging.log4j.core.lookup.WebLookup.lookup(String)
getAbbreviator(String)36124org.apache.logging.log4j.core.pattern.NameAbbreviator.getAbbreviator (String)
getConfiguration(String,URI)35166org.apache.logging.log4j.core.config.ConfigurationFactory$Factory .getConfiguration(String,URI)
decode(ClassLoader)35143org.apache.logging.log4j.core.config.plugins.PluginManager.decode (ClassLoader)
testLookup()34147org.apache.logging.log4j.core.web.WebLookupTest.testLookup()
format(String,Object[])34123org.apache.logging.log4j.message.ParameterizedMessage.format(String ,Object[])
call()34114org.apache.logging.log4j.flume.appender .FlumePersistentManager$BDBWriter.call()
testDriverManagerConfig()33192org.apache.logging.log4j.core.appender.db.jdbc .AbstractJdbcAppenderTest.testDriverManagerConfig()
testFactoryMethodConfig()33192org.apache.logging.log4j.core.appender.db.jdbc .AbstractJdbcAppenderTest.testFactoryMethodConfig()
locateContext(ClassLoader,URI)33149org.apache.logging.log4j.core.selector.ClassLoaderContextSelector .locateContext(ClassLoader,URI)
convertSpecialChars(String)3381org.apache.logging.log4j.core.helpers.OptionConverter .convertSpecialChars(String)
getHeader()32204org.apache.logging.log4j.core.layout.HTMLLayout.getHeader()
testReconnect()32150org.apache.logging.log4j.flume.appender.FlumeAppenderTest .testReconnect()
log(Marker,String,Level,Message,Throwable)32141org.apache.logging.log4j.simple.SimpleLogger.log(Marker,String,Level ,Message,Throwable)
testLayout()32130org.apache.logging.log4j.core.layout.SerializedLayoutTest.testLayout()
testFilter()31201org.apache.logging.log4j.core.filter.ThreadContextMapFilterTest .testFilter()
testInitializeUsingJndiSelector()31160org.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testInitializeUsingJndiSelector()
testFlushAtEndOfBatch()31158org.apache.logging.log4j.core.appender.XmlCompleteFileAppenderTest .testFlushAtEndOfBatch()

Statistics

Stat   # lines of code (LOC)   # ByteCode instructions
Sum:5 20725 675
Average:47.77235.55
Minimum:081
Maximum:156801
Standard deviation:23.88126.2
Variance:570.4715 926
warningCritical    Rule warning: Methods too complex
// <Name>Methods too complex</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.CyclomaticComplexity > 20 ||
  
m.BCCyclomaticComplexity > 40 ||
  
m.BCNestingDepth > 5
  
orderby m.CyclomaticComplexity descending,
          
m.BCCyclomaticComplexity descending,
          
m.BCNestingDepth descending
select new { m, m.CyclomaticComplexity, 
                
m.BCCyclomaticComplexity,
                
m.BCNestingDepth  }

// Methods where CyclomaticComplexity > 20 
// or BCCyclomaticComplexity > 40
// or BCNestingDepth > 4
// are hard to understand and maintain
// and should be split in smaller methods.
// See the definition of the complexity metrics here:
// http://www.jarchitect.com/Metrics#CC
// http://www.jarchitect.com/Metrics#ILCC
// http://www.jarchitect.com/Metrics#BCNestingDepth

37 methods matched

methodsCyclomatic Complexity (CC)ByteCode Cyclomatic Complexity (BCCC)ByteCode Nesting DepthFull Name
createPluginObject(PluginType,Node,LogEvent)<T>565211org.apache.logging.log4j.core.config.BaseConfiguration .createPluginObject(PluginType,Node,LogEvent)<T>
XMLConfiguration(ConfigurationFactory$ConfigurationSource)394011org.apache.logging.log4j.core.config.XMLConfiguration.XMLConfiguration (ConfigurationFactory$ConfigurationSource)
run()32454org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.run()
newInstance(String[])323121org.apache.logging.log4j.core.impl.ThrowableFormatOptions.newInstance (String[])
toSerializable(LogEvent)30303org.apache.logging.log4j.core.layout.XMLLayout.toSerializable(LogEvent )
lookup(String)30160org.apache.logging.log4j.core.lookup.WebLookup.lookup(String)
sendBatch(DatabaseEntry,DatabaseEntry)29425org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.sendBatch(DatabaseEntry ,DatabaseEntry)
createNoSQLProvider(String,String,String,String,String,String,String ,String)29249org.apache.logging.log4j.core.appender.db.nosql.couchdb .CouchDBProvider.createNoSQLProvider(String,String,String,String ,String,String,String,String)
createProperties(String,Agent[],Property[],int,String)292310org.apache.logging.log4j.flume.appender .FlumeEmbeddedManager$FlumeManagerFactory.createProperties(String ,Agent[],Property[],int,String)
recursiveDeepToString(Object,StringBuilder,Set)28260org.apache.logging.log4j.message.ParameterizedMessage .recursiveDeepToString(Object,StringBuilder,Set)
createConverter(String,StringBuilder,Map,List,boolean)28238org.apache.logging.log4j.core.pattern.PatternParser.createConverter (String,StringBuilder,Map,List,boolean)
JSONConfiguration(ConfigurationFactory$ConfigurationSource)27289org.apache.logging.log4j.core.config.JSONConfiguration .JSONConfiguration(ConfigurationFactory$ConfigurationSource)
getContext(String,ClassLoader,boolean,URI)27201org.apache.logging.log4j.core.selector.ClassLoaderContextSelector .getContext(String,ClassLoader,boolean,URI)
createAppender(Agent[],Property[],String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,FlumeEventFactory,Layout,Filter)25248org.apache.logging.log4j.flume.appender.FlumeAppender.createAppender (Agent[],Property[],String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,FlumeEventFactory,Layout,Filter)
parse(String,List,List,boolean)25245org.apache.logging.log4j.core.pattern.PatternParser.parse(String,List ,List,boolean)
getConfiguration(String,URI)242215org.apache.logging.log4j.core.config.ConfigurationFactory$Factory .getConfiguration(String,URI)
purgeAscending(int,int,RollingFileManager)22197org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy .purgeAscending(int,int,RollingFileManager)
callAppender(LogEvent)21174org.apache.logging.log4j.core.config.AppenderControl.callAppender (LogEvent)
toLevel(String,Level)21110org.apache.log4j.Level.toLevel(String,Level)
escapeJsonControlCharacters(String)20198org.apache.logging.log4j.core.helpers.Transform .escapeJsonControlCharacters(String)
getInputFromURI(URI)20198org.apache.logging.log4j.core.config.ConfigurationFactory .getInputFromURI(URI)
getThrowable(String,String,Throwable,StackTraceElement[])191811org.apache.logging.log4j.core.appender.db.jpa.converter .ThrowableAttributeConverter.getThrowable(String,String,Throwable ,StackTraceElement[])
FlumeEvent(LogEvent,String,String,String,String,String,boolean)19186org.apache.logging.log4j.flume.appender.FlumeEvent.FlumeEvent(LogEvent ,String,String,String,String,String,boolean)
getAbbreviator(String)18157org.apache.logging.log4j.core.pattern.NameAbbreviator.getAbbreviator (String)
collectPlugins(boolean,String)17176org.apache.logging.log4j.core.config.plugins.PluginManager .collectPlugins(boolean,String)
getManager(String,Agent[],Property[],int,String)17157org.apache.logging.log4j.flume.appender.FlumeEmbeddedManager .getManager(String,Agent[],Property[],int,String)
equals(Object)17147org.apache.logging.log4j.message.StructuredDataMessage.equals(Object)
locateContext(ClassLoader,URI)16138org.apache.logging.log4j.core.selector.ClassLoaderContextSelector .locateContext(ClassLoader,URI)
constructNode(String,Node,JsonNode)15157org.apache.logging.log4j.core.config.JSONConfiguration.constructNode (String,Node,JsonNode)
main(String[])14116org.apache.logging.log4j.core.net.SocketServer.main(String[])
main(String[])14116org.apache.logging.log4j.core.net.UDPSocketServer.main(String[])
getConfiguration(ConfigurationFactory$ConfigurationSource)1196org.apache.logging.log4j.core.config.ConfigurationFactory$Factory .getConfiguration(ConfigurationFactory$ConfigurationSource)
constructHierarchy(Node,Element)10106org.apache.logging.log4j.core.config.XMLConfiguration .constructHierarchy(Node,Element)
UUIDUtil()13112org.apache.logging.log4j.core.helpers.UUIDUtil.UUIDUtil()
ThreadContext()1186org.apache.logging.log4j.ThreadContext.ThreadContext()
createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)N/A4116org.apache.logging.log4j.core.appender.db.nosql.mongo.MongoDBProvider .createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)
execute()N/A308org.apache.logging.dumbster.smtp.SmtpRequest.execute()

Statistics

Stat   Cyclomatic Complexity (CC)   ByteCode Cyclomatic Complexity (BCCC)   ByteCode Nesting Depth
Sum:783841272
Average:22.3722.737.35
Minimum:190
Maximum:565221
Standard deviation:10.0510.384.24
Variance:101.09107.6617.96
warningCritical    Rule warning: Methods potentially poorly commented
// <Name>Methods potentially poorly commented</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.PercentageComment < 20 && 
  
m.NbLinesOfCode > 20  
  
orderby m.PercentageComment ascending
select new { m, m.PercentageComment, m.NbLinesOfCode, m.NbLinesOfComment }

// Methods where %Comment < 20 and that have 
// at least 20 lines of code might need to be more commented.
// See the definition of the Comments metric here 
// http://www.jarchitect.com/Metrics#PercentageComment
// http://www.jarchitect.com/Metrics#NbLinesOfComment 

67 methods matched

methodsPercentage Comment# lines of code (LOC)# lines of commentFull Name
printStack(StringBuilder,StackTraceElement[])0360org.apache.logging.log4j.message.ExtendedThreadInformation.printStack (StringBuilder,StackTraceElement[])
formatState(StringBuilder,ThreadInfo)0520org.apache.logging.log4j.message.ExtendedThreadInformation.formatState (StringBuilder,ThreadInfo)
SimpleLoggerContext()0210org.apache.logging.log4j.simple.SimpleLoggerContext .SimpleLoggerContext()
createFilter(KeyValuePair[],String,String,String)0270org.apache.logging.log4j.core.filter.MapFilter.createFilter (KeyValuePair[],String,String,String)
createFilter(KeyValuePair[],String,String,String)0270org.apache.logging.log4j.core.filter.ThreadContextMapFilter .createFilter(KeyValuePair[],String,String,String)
convertSpecialChars(String)0330org.apache.logging.log4j.core.helpers.OptionConverter .convertSpecialChars(String)
formatElements(StringBuilder,int,StackTraceElement[] ,StackTracePackageElement[],List)0230org.apache.logging.log4j.core.impl.ThrowableProxy.formatElements (StringBuilder,int,StackTraceElement[],StackTracePackageElement[],List )
RFC5424Layout(Configuration,Facility,String,int,boolean,boolean,String ,String,String,String,String,String,String,String,String,Charset ,String,boolean,LoggerFields[])0540org.apache.logging.log4j.core.layout.RFC5424Layout.RFC5424Layout (Configuration,Facility,String,int,boolean,boolean,String,String ,String,String,String,String,String,String,String,Charset,String ,boolean,LoggerFields[])
appendStructuredElements(StringBuilder,LogEvent)0390org.apache.logging.log4j.core.layout.RFC5424Layout .appendStructuredElements(StringBuilder,LogEvent)
computeTimeStampString(long)0420org.apache.logging.log4j.core.layout.RFC5424Layout .computeTimeStampString(long)
lookup(String)0360org.apache.logging.log4j.core.lookup.WebLookup.lookup(String)
parse(String,boolean,boolean)0230org.apache.logging.log4j.core.pattern.PatternParser.parse(String ,boolean,boolean)
formatSubShortOption(Throwable,StringBuilder)0300org.apache.logging.log4j.core.pattern.ThrowablePatternConverter .formatSubShortOption(Throwable,StringBuilder)
initializeJndi(String)0260org.apache.logging.log4j.core.web.Log4jWebInitializerImpl .initializeJndi(String)
writeInternal(LogEvent)0250org.apache.logging.log4j.core.appender.db.jdbc.JDBCDatabaseManager .writeInternal(LogEvent)
convertString(ListIterator,boolean)0220org.apache.logging.log4j.core.appender.db.jpa.converter .ThrowableAttributeConverter.convertString(ListIterator,boolean)
getThrowable(String,String,Throwable,StackTraceElement[])0410org.apache.logging.log4j.core.appender.db.jpa.converter .ThrowableAttributeConverter.getThrowable(String,String,Throwable ,StackTraceElement[])
JSONConfiguration(ConfigurationFactory$ConfigurationSource)0780org.apache.logging.log4j.core.config.JSONConfiguration .JSONConfiguration(ConfigurationFactory$ConfigurationSource)
constructNode(String,Node,JsonNode)0500org.apache.logging.log4j.core.config.JSONConfiguration.constructNode (String,Node,JsonNode)
XMLConfiguration(ConfigurationFactory$ConfigurationSource)01040org.apache.logging.log4j.core.config.XMLConfiguration.XMLConfiguration (ConfigurationFactory$ConfigurationSource)
constructHierarchy(Node,Element)0270org.apache.logging.log4j.core.config.XMLConfiguration .constructHierarchy(Node,Element)
decode(ClassLoader)0350org.apache.logging.log4j.core.config.plugins.PluginManager.decode (ClassLoader)
encode(ConcurrentMap)0220org.apache.logging.log4j.core.config.plugins.PluginManager.encode (ConcurrentMap)
getSMTPManager(String,String,String,String,String,String,String,String ,int,String,String,boolean,String,int)0310org.apache.logging.log4j.core.net.SMTPManager.getSMTPManager(String ,String,String,String,String,String,String,String,int,String,String ,boolean,String,int)
load()0280org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration.load()
load()0300org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration.load()
log(Marker,String,Level,Message,Throwable)0240org.apache.logging.slf4j.SLF4JLogger.log(Marker,String,Level,Message ,Throwable)
createProperties(String,Agent[],Property[],int,String)0590org.apache.logging.log4j.flume.appender .FlumeEmbeddedManager$FlumeManagerFactory.createProperties(String ,Agent[],Property[],int,String)
createEvent(DatabaseEntry)0230org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.createEvent(DatabaseEntry)
send(Event)0270org.apache.logging.log4j.flume.appender.FlumePersistentManager.send (Event)
doConfigure()1511org.apache.logging.log4j.core.config.BaseConfiguration.doConfigure()
log(Marker,String,Level,Message,Throwable)3321org.apache.logging.log4j.simple.SimpleLogger.log(Marker,String,Level ,Message,Throwable)
SimpleLogger(String,Level,boolean,boolean,boolean,boolean,String ,MessageFactory,PropertiesUtil,PrintStream)4211org.apache.logging.log4j.simple.SimpleLogger.SimpleLogger(String,Level ,boolean,boolean,boolean,boolean,String,MessageFactory,PropertiesUtil ,PrintStream)
appendThrowableAsHTML(Throwable,StringBuilder)4231org.apache.logging.log4j.core.layout.HTMLLayout.appendThrowableAsHTML (Throwable,StringBuilder)
getContext(String,ClassLoader,boolean,URI)4462org.apache.logging.log4j.core.selector.ClassLoaderContextSelector .getContext(String,ClassLoader,boolean,URI)
rollover(RolloverStrategy)4211org.apache.logging.log4j.core.appender.rolling.RollingFileManager .rollover(RolloverStrategy)
createManager(String,SMTPManager$FactoryData)4211org.apache.logging.log4j.core.net.SMTPManager$SMTPManagerFactory .createManager(String,SMTPManager$FactoryData)
run()4954org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.run()
toSerializable(LogEvent)51358org.apache.logging.log4j.core.layout.JSONLayout.toSerializable (LogEvent)
toSerializable(LogEvent)51358org.apache.logging.log4j.core.layout.XMLLayout.toSerializable(LogEvent )
sendBatch(DatabaseEntry,DatabaseEntry)6765org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.sendBatch(DatabaseEntry ,DatabaseEntry)
startLogging(String,String,String,HttpServletRequest)6463org.apache.logging.log4j.samples.app.LoggingController.startLogging (String,String,String,HttpServletRequest)
createPluginObject(PluginType,Node,LogEvent)<T>715613org.apache.logging.log4j.core.config.BaseConfiguration .createPluginObject(PluginType,Node,LogEvent)<T>
call()8343org.apache.logging.log4j.flume.appender .FlumePersistentManager$BDBWriter.call()
toSerializable(LogEvent)9586org.apache.logging.log4j.core.layout.HTMLLayout.toSerializable (LogEvent)
getNextTime(long,int,boolean)9647org.apache.logging.log4j.core.appender.rolling.PatternProcessor .getNextTime(long,int,boolean)
getAllEvents(String)9485org.apache.logging.log4j.samples.app.MockEventsSupplier.getAllEvents (String)
collectPlugins(boolean,String)10526org.apache.logging.log4j.core.config.plugins.PluginManager .collectPlugins(boolean,String)
buildServiceInfoVersion1(String,int,String,Map)10263org.apache.logging.log4j.core.net.MulticastDNSAdvertiser .buildServiceInfoVersion1(String,int,String,Map)
createManager(String,FlumePersistentManager$FactoryData)10496org.apache.logging.log4j.flume.appender .FlumePersistentManager$BDBManagerFactory.createManager(String ,FlumePersistentManager$FactoryData)
getHeader()11324org.apache.logging.log4j.core.layout.HTMLLayout.getHeader()
format(LogEvent,StringBuilder)11233org.apache.logging.log4j.core.pattern .ExtendedThrowablePatternConverter.format(LogEvent,StringBuilder)
format(LogEvent,StringBuilder)11233org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter .format(LogEvent,StringBuilder)
callAppender(LogEvent)12284org.apache.logging.log4j.core.config.AppenderControl.callAppender (LogEvent)
run()12213org.apache.logging.log4j.samples.app.LoggingApp$Worker.run()
getInstance()14234org.apache.logging.log4j.core.config.ConfigurationFactory.getInstance( )
getInputFromURI(URI)14295org.apache.logging.log4j.core.config.ConfigurationFactory .getInputFromURI(URI)
invoke(Object,Method,Object[])15224org.apache.logging.log4j.samples.app.LogEventFactory$AuditProxy.invoke (Object,Method,Object[])
getConfiguration(String,URI)16357org.apache.logging.log4j.core.config.ConfigurationFactory$Factory .getConfiguration(String,URI)
connect(Agent[],int,int,int)16255org.apache.logging.log4j.flume.appender.FlumeAvroManager.connect (Agent[],int,int,int)
buildServiceInfoVersion3(String,int,String,Map)17235org.apache.logging.log4j.core.net.MulticastDNSAdvertiser .buildServiceInfoVersion3(String,int,String,Map)
escapeJsonControlCharacters(String)184310org.apache.logging.log4j.core.helpers.Transform .escapeJsonControlCharacters(String)
run()18225org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run()
createPolicy(String,KeyValuePair[])18266org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy .createPolicy(String,KeyValuePair[])
main(String[])18225org.apache.logging.log4j.core.net.SocketServer.main(String[])
DatePatternConverter(String[])19379org.apache.logging.log4j.core.pattern.DatePatternConverter .DatePatternConverter(String[])
FlumeEvent(LogEvent,String,String,String,String,String,boolean)194511org.apache.logging.log4j.flume.appender.FlumeEvent.FlumeEvent(LogEvent ,String,String,String,String,String,boolean)

Statistics

Stat   Percentage Comment   # lines of code (LOC)   # lines of comment
Sum:3812 763178
Average:5.6941.242.66
Minimum:0210
Maximum:1915613
Standard deviation:6.4727.913.2
Variance:41.86778.9310.26
warningCritical    Rule warning: Methods with too many parameters
// <Name>Methods with too many parameters</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.NbParameters > 5 
  
orderby m.NbParameters descending
select new { m, m.NbParameters }

// Methods where NbParameters > 5 might be painful to call 
// and might degrade performance. You should prefer using 
// additional properties/fields to the declaring type to 
// handle numerous states. Another alternative is to provide 
// a class or structure dedicated to handle arguments passing 
// (for example see the class System.Diagnostics.ProcessStartInfo 
// and the method System.Diagnostics.Process.Start(ProcessStartInfo))
// See the definition of the NbParameters metric here 
// http://www.jarchitect.com/Metrics#NbParameters

119 methods matched

methods# ParametersFull Name
createAppender(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,Filter,Configuration,String,String ,LoggerFields[],String)29org.apache.logging.log4j.core.appender.SyslogAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,Filter,Configuration,String,String ,LoggerFields[],String)
createAppender(String,String,SSLConfiguration,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,Filter,Configuration ,String,String,LoggerFields[],String)29org.apache.logging.log4j.core.appender.TLSSyslogAppender .createAppender(String,String,SSLConfiguration,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,Filter,Configuration ,String,String,LoggerFields[],String)
createAppender(Agent[],Property[],String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,FlumeEventFactory,Layout,Filter)22org.apache.logging.log4j.flume.appender.FlumeAppender.createAppender (Agent[],Property[],String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,FlumeEventFactory,Layout,Filter)
RFC5424Layout(Configuration,Facility,String,int,boolean,boolean,String ,String,String,String,String,String,String,String,String,Charset ,String,boolean,LoggerFields[])19org.apache.logging.log4j.core.layout.RFC5424Layout.RFC5424Layout (Configuration,Facility,String,int,boolean,boolean,String,String ,String,String,String,String,String,String,String,Charset,String ,boolean,LoggerFields[])
createLayout(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String ,LoggerFields[],Configuration)18org.apache.logging.log4j.core.layout.RFC5424Layout.createLayout(String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,LoggerFields[],Configuration)
createAppender(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,Layout,Filter,String)17org.apache.logging.log4j.core.appender.SMTPAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,String,String,String,String,Layout,Filter,String)
createAppender(String,String,String,String,String,String ,TriggeringPolicy,RolloverStrategy,Layout,Filter,String,String,String ,Configuration)14org.apache.logging.log4j.core.appender.RollingFileAppender .createAppender(String,String,String,String,String,String ,TriggeringPolicy,RolloverStrategy,Layout,Filter,String,String,String ,Configuration)
getSMTPManager(String,String,String,String,String,String,String,String ,int,String,String,boolean,String,int)14org.apache.logging.log4j.core.net.SMTPManager.getSMTPManager(String ,String,String,String,String,String,String,String,int,String,String ,boolean,String,int)
createAppender(String,String,String,String,String,String,String,String ,Layout,Filter,String,String,Configuration)13org.apache.logging.log4j.core.appender.FileAppender.createAppender (String,String,String,String,String,String,String,String,Layout,Filter ,String,String,Configuration)
createAppender(String,String,String,String,String,String,String,String ,String,String,Layout,Filter,String)13org.apache.logging.log4j.core.appender.JMSQueueAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,Layout,Filter,String)
createAppender(String,String,String,String,String,String,String,String ,String,String,Layout,Filter,String)13org.apache.logging.log4j.core.appender.JMSTopicAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,Layout,Filter,String)
createAppender(String,String,String,String,String,TriggeringPolicy ,RolloverStrategy,Layout,Filter,String,String,String,Configuration)13org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender .createAppender(String,String,String,String,String,TriggeringPolicy ,RolloverStrategy,Layout,Filter,String,String,String,Configuration)
SMTPManager$FactoryData(String,String,String,String,String,String ,String,String,int,String,String,boolean,int)13org.apache.logging.log4j.core.net.SMTPManager$FactoryData .SMTPManager$FactoryData(String,String,String,String,String,String ,String,String,int,String,String,boolean,int)
getContext(String,ClassLoader,Object,boolean,URI,String)12org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext (String,ClassLoader,Object,boolean,URI,String)
Log4jLogEvent(String,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long ,Log4jLogEvent$1)12org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long ,Log4jLogEvent$1)
createAppender(String,String,String,String,String,String,String,String ,Layout,Filter,String,Configuration)12org.apache.logging.log4j.core.appender.SocketAppender.createAppender (String,String,String,String,String,String,String,String,Layout,Filter ,String,Configuration)
RollingRandomAccessFileManager(RandomAccessFile,String,String ,OutputStream,boolean,boolean,long,long,TriggeringPolicy ,RolloverStrategy,String,Layout)12org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager.RollingRandomAccessFileManager (RandomAccessFile,String,String,OutputStream,boolean,boolean,long,long ,TriggeringPolicy,RolloverStrategy,String,Layout)
setValues(AsyncLogger,String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)12org.apache.logging.log4j.core.async.RingBufferLogEvent.setValues (AsyncLogger,String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)
setValues(AsyncLogger,String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)12org.apache.logging.log4j.core.async.RingBufferLogEventTranslator .setValues(AsyncLogger,String,Marker,String,Level,Message,Throwable ,Map,ThreadContext$ContextStack,String,StackTraceElement,long)
FlumeAppender(String,Filter,Layout,boolean,String,String,String,String ,String,boolean,FlumeEventFactory,AbstractFlumeManager)12org.apache.logging.log4j.flume.appender.FlumeAppender.FlumeAppender (String,Filter,Layout,boolean,String,String,String,String,String ,boolean,FlumeEventFactory,AbstractFlumeManager)
FlumePersistentManager(String,String,Agent[],int,int,int,int,int ,Database,Environment,SecretKey,int)12org.apache.logging.log4j.flume.appender.FlumePersistentManager .FlumePersistentManager(String,String,Agent[],int,int,int,int,int ,Database,Environment,SecretKey,int)
Log4jLogEvent(String,Marker,String,Level,Message,Throwable,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)11org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,Throwable,Map,ThreadContext$ContextStack ,String,StackTraceElement,long)
createEvent(String,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)11org.apache.logging.log4j.core.impl.Log4jLogEvent.createEvent(String ,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)
Log4jLogEvent(String,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)11org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,ThrowableProxy,Map ,ThreadContext$ContextStack,String,StackTraceElement,long)
createAppender(String,String,String,String,String,String,Layout,Filter ,String,String,Configuration)11org.apache.logging.log4j.core.appender.RandomAccessFileAppender .createAppender(String,String,String,String,String,String,Layout ,Filter,String,String,Configuration)
SimpleLogger(String,Level,boolean,boolean,boolean,boolean,String ,MessageFactory,PropertiesUtil,PrintStream)10org.apache.logging.log4j.simple.SimpleLogger.SimpleLogger(String,Level ,boolean,boolean,boolean,boolean,String,MessageFactory,PropertiesUtil ,PrintStream)
createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)10org.apache.logging.log4j.core.appender.db.nosql.mongo.MongoDBProvider .createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)
RollingFileManager(String,String,OutputStream,boolean,long,long ,TriggeringPolicy,RolloverStrategy,String,Layout)10org.apache.logging.log4j.core.appender.rolling.RollingFileManager .RollingFileManager(String,String,OutputStream,boolean,long,long ,TriggeringPolicy,RolloverStrategy,String,Layout)
createManager(String,OutputStream,Socket,SSLConfiguration,InetAddress ,String,int,int,boolean,Layout)10org.apache.logging.log4j.core.net .TLSSocketManager$TLSSocketManagerFactory.createManager(String ,OutputStream,Socket,SSLConfiguration,InetAddress,String,int,int ,boolean,Layout)
TLSSocketManager(String,OutputStream,Socket,SSLConfiguration ,InetAddress,String,int,int,boolean,Layout)10org.apache.logging.log4j.core.net.TLSSocketManager.TLSSocketManager (String,OutputStream,Socket,SSLConfiguration,InetAddress,String,int ,int,boolean,Layout)
FlumePersistentManager$FactoryData(String,Agent[],int,int,int,int,int ,int,String,Property[])10org.apache.logging.log4j.flume.appender .FlumePersistentManager$FactoryData.FlumePersistentManager$FactoryData (String,Agent[],int,int,int,int,int,int,String,Property[])
getManager(String,Agent[],Property[],int,int,int,int,int,int,String)10org.apache.logging.log4j.flume.appender.FlumePersistentManager .getManager(String,Agent[],Property[],int,int,int,int,int,int,String)
append(CharSequence,int,int)9org.apache.logging.log4j.spi.LoggerStream.append(CharSequence,int,int)
finalizeConverter(char,String,int,StringBuilder,FormattingInfo,Map ,List,List,boolean)9org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter (char,String,int,StringBuilder,FormattingInfo,Map,List,List,boolean)
AsyncAppender(String,Filter,AppenderRef[],String,int,boolean,boolean ,Configuration,boolean)9org.apache.logging.log4j.core.appender.AsyncAppender.AsyncAppender (String,Filter,AppenderRef[],String,int,boolean,boolean,Configuration ,boolean)
createAppender(AppenderRef[],String,String,String,String,String,Filter ,Configuration,String)9org.apache.logging.log4j.core.appender.AsyncAppender.createAppender (AppenderRef[],String,String,String,String,String,Filter,Configuration ,String)
RollingFileAppender(String,Layout,Filter,RollingFileManager,String ,String,boolean,boolean,Advertiser)9org.apache.logging.log4j.core.appender.RollingFileAppender .RollingFileAppender(String,Layout,Filter,RollingFileManager,String ,String,boolean,boolean,Advertiser)
RollingRandomAccessFileAppender(String,Layout,Filter ,RollingFileManager,String,String,boolean,boolean,Advertiser)9org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender .RollingRandomAccessFileAppender(String,Layout,Filter ,RollingFileManager,String,String,boolean,boolean,Advertiser)
JMSQueueManager$FactoryData(String,String,String,String,String,String ,String,String,String)9org.apache.logging.log4j.core.net.JMSQueueManager$FactoryData .JMSQueueManager$FactoryData(String,String,String,String,String,String ,String,String,String)
getJMSQueueManager(String,String,String,String,String,String,String ,String,String)9org.apache.logging.log4j.core.net.JMSQueueManager.getJMSQueueManager (String,String,String,String,String,String,String,String,String)
JMSTopicManager$FactoryData(String,String,String,String,String,String ,String,String,String)9org.apache.logging.log4j.core.net.JMSTopicManager$FactoryData .JMSTopicManager$FactoryData(String,String,String,String,String,String ,String,String,String)
getJMSTopicManager(String,String,String,String,String,String,String ,String,String)9org.apache.logging.log4j.core.net.JMSTopicManager.getJMSTopicManager (String,String,String,String,String,String,String,String,String)
TCPSocketManager(String,OutputStream,Socket,InetAddress,String,int,int ,boolean,Layout)9org.apache.logging.log4j.core.net.TCPSocketManager.TCPSocketManager (String,OutputStream,Socket,InetAddress,String,int,int,boolean,Layout)
getContext(String,ClassLoader,Object,boolean)8org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext (String,ClassLoader,Object,boolean)
FileAppender(String,Layout,Filter,FileManager,String,boolean,boolean ,Advertiser)8org.apache.logging.log4j.core.appender.FileAppender.FileAppender (String,Layout,Filter,FileManager,String,boolean,boolean,Advertiser)
RandomAccessFileAppender(String,Layout,Filter,RandomAccessFileManager ,String,boolean,boolean,Advertiser)8org.apache.logging.log4j.core.appender.RandomAccessFileAppender .RandomAccessFileAppender(String,Layout,Filter,RandomAccessFileManager ,String,boolean,boolean,Advertiser)
createNoSQLProvider(String,String,String,String,String,String,String ,String)8org.apache.logging.log4j.core.appender.db.nosql.couchdb .CouchDBProvider.createNoSQLProvider(String,String,String,String ,String,String,String,String)
getFileManager(String,String,boolean,boolean,TriggeringPolicy ,RolloverStrategy,String,Layout)8org.apache.logging.log4j.core.appender.rolling.RollingFileManager .getFileManager(String,String,boolean,boolean,TriggeringPolicy ,RolloverStrategy,String,Layout)
getRollingRandomAccessFileManager(String,String,boolean,boolean ,TriggeringPolicy,RolloverStrategy,String,Layout)8org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager.getRollingRandomAccessFileManager (String,String,boolean,boolean,TriggeringPolicy,RolloverStrategy ,String,Layout)
AsyncLoggerConfig(String,List,Filter,Level,boolean,Property[] ,Configuration,boolean)8org.apache.logging.log4j.core.async.AsyncLoggerConfig .AsyncLoggerConfig(String,List,Filter,Level,boolean,Property[] ,Configuration,boolean)
createLogger(String,String,String,String,AppenderRef[],Property[] ,Configuration,Filter)8org.apache.logging.log4j.core.async.AsyncLoggerConfig.createLogger (String,String,String,String,AppenderRef[],Property[],Configuration ,Filter)
LoggerConfig(String,List,Filter,Level,boolean,Property[],Configuration ,boolean)8org.apache.logging.log4j.core.config.LoggerConfig.LoggerConfig(String ,List,Filter,Level,boolean,Property[],Configuration,boolean)
createLogger(String,String,String,String,AppenderRef[],Property[] ,Configuration,Filter)8org.apache.logging.log4j.core.config.LoggerConfig.createLogger(String ,String,String,String,AppenderRef[],Property[],Configuration,Filter)
FlumePersistentManager$BDBWriter(byte[],byte[],Environment,Database ,FlumePersistentManager$Gate,AtomicLong,long,int)8org.apache.logging.log4j.flume.appender .FlumePersistentManager$BDBWriter.FlumePersistentManager$BDBWriter (byte[],byte[],Environment,Database,FlumePersistentManager$Gate ,AtomicLong,long,int)
FlumePersistentManager$WriterThread(Database,Environment ,FlumePersistentManager,FlumePersistentManager$Gate,int,SecretKey ,AtomicLong,int)8org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread .FlumePersistentManager$WriterThread(Database,Environment ,FlumePersistentManager,FlumePersistentManager$Gate,int,SecretKey ,AtomicLong,int)
createEvent(String,Marker,String,Level,Message,List,Throwable)7org.apache.logging.log4j.core.LogEventFactoryTest$TestLogEventFactory .createEvent(String,Marker,String,Level,Message,List,Throwable)
createEvent(String,Marker,String,Level,Message,List,Throwable)7org.apache.logging.log4j.core.impl.DefaultLogEventFactory.createEvent (String,Marker,String,Level,Message,List,Throwable)
Log4jLogEvent(String,Marker,String,Level,Message,List,Throwable)7org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,List,Throwable)
createEvent(String,Marker,String,Level,Message,List,Throwable)7org.apache.logging.log4j.core.impl.LogEventFactory.createEvent(String ,Marker,String,Level,Message,List,Throwable)
HTMLLayout(boolean,String,String,Charset,String,String,String)7org.apache.logging.log4j.core.layout.HTMLLayout.HTMLLayout(boolean ,String,String,Charset,String,String,String)
FailoverAppender(String,Filter,String,String[],int,Configuration ,boolean)7org.apache.logging.log4j.core.appender.FailoverAppender .FailoverAppender(String,Filter,String,String[],int,Configuration ,boolean)
createAppender(String,String,String[],String,Configuration,Filter ,String)7org.apache.logging.log4j.core.appender.FailoverAppender.createAppender (String,String,String[],String,Configuration,Filter,String)
getFileManager(String,boolean,boolean,boolean,String,Layout,int)7org.apache.logging.log4j.core.appender.FileManager.getFileManager (String,boolean,boolean,boolean,String,Layout,int)
RandomAccessFileManager(RandomAccessFile,String,OutputStream,boolean ,int,String,Layout)7org.apache.logging.log4j.core.appender.RandomAccessFileManager .RandomAccessFileManager(RandomAccessFile,String,OutputStream,boolean ,int,String,Layout)
SocketAppender(String,Layout,Filter,AbstractSocketManager,boolean ,boolean,Advertiser)7org.apache.logging.log4j.core.appender.SocketAppender.SocketAppender (String,Layout,Filter,AbstractSocketManager,boolean,boolean,Advertiser )
SyslogAppender(String,Layout,Filter,boolean,boolean ,AbstractSocketManager,Advertiser)7org.apache.logging.log4j.core.appender.SyslogAppender.SyslogAppender (String,Layout,Filter,boolean,boolean,AbstractSocketManager,Advertiser )
TLSSyslogAppender(String,Layout,Filter,boolean,boolean ,AbstractSocketManager,Advertiser)7org.apache.logging.log4j.core.appender.TLSSyslogAppender .TLSSyslogAppender(String,Layout,Filter,boolean,boolean ,AbstractSocketManager,Advertiser)
createColumnConfig(Configuration,String,String,String,String,String ,String)7org.apache.logging.log4j.core.appender.db.jdbc.ColumnConfig .createColumnConfig(Configuration,String,String,String,String,String ,String)
createAppender(String,String,Filter,ConnectionSource,String,String ,ColumnConfig[])7org.apache.logging.log4j.core.appender.db.jdbc.JDBCAppender .createAppender(String,String,Filter,ConnectionSource,String,String ,ColumnConfig[])
RollingFileManager$FactoryData(String,boolean,boolean,TriggeringPolicy ,RolloverStrategy,String,Layout)7org.apache.logging.log4j.core.appender.rolling .RollingFileManager$FactoryData.RollingFileManager$FactoryData(String ,boolean,boolean,TriggeringPolicy,RolloverStrategy,String,Layout)
RollingRandomAccessFileManager$FactoryData(String,boolean,boolean ,TriggeringPolicy,RolloverStrategy,String,Layout)7org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager$FactoryData .RollingRandomAccessFileManager$FactoryData(String,boolean,boolean ,TriggeringPolicy,RolloverStrategy,String,Layout)
createLogger(String,String,String,AppenderRef[],Property[] ,Configuration,Filter)7org.apache.logging.log4j.core.async.AsyncLoggerConfig$RootLogger .createLogger(String,String,String,AppenderRef[],Property[] ,Configuration,Filter)
PerfTestDriver$Setup(Class,String,String,String,int ,PerfTestDriver$WaitStrategy,String[])7org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup .PerfTestDriver$Setup(Class,String,String,String,int ,PerfTestDriver$WaitStrategy,String[])
createLogger(String,String,String,AppenderRef[],Property[] ,Configuration,Filter)7org.apache.logging.log4j.core.config.LoggerConfig$RootLogger .createLogger(String,String,String,AppenderRef[],Property[] ,Configuration,Filter)
JMSQueueManager(String,Context,String,String,String,String ,JMSQueueManager$QueueInfo)7org.apache.logging.log4j.core.net.JMSQueueManager.JMSQueueManager (String,Context,String,String,String,String,JMSQueueManager$QueueInfo)
JMSTopicManager(String,Context,String,String,String,String ,JMSTopicManager$TopicInfo)7org.apache.logging.log4j.core.net.JMSTopicManager.JMSTopicManager (String,Context,String,String,String,String,JMSTopicManager$TopicInfo)
createEvent(LogEvent,String,String,String,String,String,boolean)7org.apache.logging.log4j.flume.appender.FlumeAppender.createEvent (LogEvent,String,String,String,String,String,boolean)
FlumeAvroManager(String,String,Agent[],int,int,int,int)7org.apache.logging.log4j.flume.appender.FlumeAvroManager .FlumeAvroManager(String,String,Agent[],int,int,int,int)
FlumeEvent(LogEvent,String,String,String,String,String,boolean)7org.apache.logging.log4j.flume.appender.FlumeEvent.FlumeEvent(LogEvent ,String,String,String,String,String,boolean)
createEvent(LogEvent,String,String,String,String,String,boolean)7org.apache.logging.log4j.flume.appender.FlumeEventFactory.createEvent (LogEvent,String,String,String,String,String,boolean)
getContext(String,ClassLoader,Object,boolean,URI,String)6org.apache.logging.log4j.TestLoggerContextFactory.getContext(String ,ClassLoader,Object,boolean,URI,String)
getContext(String,ClassLoader,Object,boolean,URI,String)6org.apache.logging.log4j.simple.SimpleLoggerContextFactory.getContext (String,ClassLoader,Object,boolean,URI,String)
getContext(String,ClassLoader,Object,boolean,URI,String)6org.apache.logging.log4j.spi.LoggerContextFactory.getContext(String ,ClassLoader,Object,boolean,URI,String)
printf(Locale,String,Object[])6org.apache.logging.log4j.spi.LoggerStream.printf(Locale,String ,Object[])
format(Locale,String,Object[])6org.apache.logging.log4j.spi.LoggerStream.format(Locale,String ,Object[])
Log4jLogEvent(String,Marker,String,Level,Message,Throwable)6org.apache.logging.log4j.core.impl.Log4jLogEvent.Log4jLogEvent(String ,Marker,String,Level,Message,Throwable)
createLayout(String,String,String,String,String,String)6org.apache.logging.log4j.core.layout.HTMLLayout.createLayout(String ,String,String,String,String,String)
PatternLayout(Configuration,RegexReplacement,String,Charset,boolean ,boolean)6org.apache.logging.log4j.core.layout.PatternLayout.PatternLayout (Configuration,RegexReplacement,String,Charset,boolean,boolean)
createLayout(String,Configuration,RegexReplacement,String,String ,String)6org.apache.logging.log4j.core.layout.PatternLayout.createLayout(String ,Configuration,RegexReplacement,String,String,String)
XMLLayout(boolean,boolean,boolean,boolean,String,Charset)6org.apache.logging.log4j.core.layout.XMLLayout.XMLLayout(boolean ,boolean,boolean,boolean,String,Charset)
createLayout(String,String,String,String,String,String)6org.apache.logging.log4j.core.layout.XMLLayout.createLayout(String ,String,String,String,String,String)
AbstractOutputStreamAppender<M>(String,Layout,Filter,boolean,boolean ,OutputStreamManager)6org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender .AbstractOutputStreamAppender<M>(String,Layout,Filter,boolean,boolean ,OutputStreamManager)
createAppender(Layout,Filter,String,String,String,String)6org.apache.logging.log4j.core.appender.ConsoleAppender.createAppender (Layout,Filter,String,String,String,String)
FileManager$FactoryData(boolean,boolean,boolean,int,String,Layout)6org.apache.logging.log4j.core.appender.FileManager$FactoryData .FileManager$FactoryData(boolean,boolean,boolean,int,String,Layout)
FileManager(String,OutputStream,boolean,boolean,String,Layout)6org.apache.logging.log4j.core.appender.FileManager.FileManager(String ,OutputStream,boolean,boolean,String,Layout)
getFileManager(String,boolean,boolean,int,String,Layout)6org.apache.logging.log4j.core.appender.RandomAccessFileManager .getFileManager(String,boolean,boolean,int,String,Layout)
createSocketManager(Protocol,String,int,int,boolean,Layout)6org.apache.logging.log4j.core.appender.SocketAppender .createSocketManager(Protocol,String,int,int,boolean,Layout)
createSocketManager(SSLConfiguration,String,int,int,boolean,Layout)6org.apache.logging.log4j.core.appender.TLSSyslogAppender .createSocketManager(SSLConfiguration,String,int,int,boolean,Layout)
RewriteAppender(String,Filter,boolean,AppenderRef[],RewritePolicy ,Configuration)6org.apache.logging.log4j.core.appender.rewrite.RewriteAppender .RewriteAppender(String,Filter,boolean,AppenderRef[],RewritePolicy ,Configuration)
createAppender(String,String,AppenderRef[],Configuration,RewritePolicy ,Filter)6org.apache.logging.log4j.core.appender.rewrite.RewriteAppender .createAppender(String,String,AppenderRef[],Configuration ,RewritePolicy,Filter)

Statistics

Stat   # Parameters
Sum:1 041
Average:8.75
Minimum:6
Maximum:29
Standard deviation:3.99
Variance:15.92
warningCritical    Rule warning: Methods with too many local variables
// <Name>Methods with too many local variables</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.NbVariables > 15 
  
orderby m.NbVariables descending
select new { m, m.NbVariables }

// Methods where NbVariables > 8 are hard to understand and maintain.
// Methods where NbVariables > 15 are extremely complex 
// and should be split in smaller methods.
// See the definition of the Nbvariables metric here 
// http://www.jarchitect.com/Metrics#Nbvariables

34 methods matched

methods# VariablesFull Name
createPluginObject(PluginType,Node,LogEvent)<T>68org.apache.logging.log4j.core.config.BaseConfiguration .createPluginObject(PluginType,Node,LogEvent)<T>
XMLConfiguration(ConfigurationFactory$ConfigurationSource)41org.apache.logging.log4j.core.config.XMLConfiguration.XMLConfiguration (ConfigurationFactory$ConfigurationSource)
UUIDUtil()30org.apache.logging.log4j.core.helpers.UUIDUtil.UUIDUtil()
JSONConfiguration(ConfigurationFactory$ConfigurationSource)29org.apache.logging.log4j.core.config.JSONConfiguration .JSONConfiguration(ConfigurationFactory$ConfigurationSource)
collectPlugins(boolean,String)28org.apache.logging.log4j.core.config.plugins.PluginManager .collectPlugins(boolean,String)
run()28org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.run()
recursiveDeepToString(Object,StringBuilder,Set)26org.apache.logging.log4j.message.ParameterizedMessage .recursiveDeepToString(Object,StringBuilder,Set)
testWriteInternal03()26org.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManagerTest.testWriteInternal03()
createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)24org.apache.logging.log4j.core.appender.db.nosql.mongo.MongoDBProvider .createNoSQLProvider(String,String,String,String,String,String,String ,String,String,String)
createManager(String,FlumePersistentManager$FactoryData)24org.apache.logging.log4j.flume.appender .FlumePersistentManager$BDBManagerFactory.createManager(String ,FlumePersistentManager$FactoryData)
sendBatch(DatabaseEntry,DatabaseEntry)24org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread.sendBatch(DatabaseEntry ,DatabaseEntry)
FlumeEvent(LogEvent,String,String,String,String,String,boolean)22org.apache.logging.log4j.flume.appender.FlumeEvent.FlumeEvent(LogEvent ,String,String,String,String,String,boolean)
main(String[])21org.apache.logging.log4j.core.async.perftest.PerfTestDriver.main (String[])
getConfiguration(String,URI)21org.apache.logging.log4j.core.config.ConfigurationFactory$Factory .getConfiguration(String,URI)
createConverter(String,StringBuilder,Map,List,boolean)20org.apache.logging.log4j.core.pattern.PatternParser.createConverter (String,StringBuilder,Map,List,boolean)
decode(ClassLoader)20org.apache.logging.log4j.core.config.plugins.PluginManager.decode (ClassLoader)
toSerializable(LogEvent)19org.apache.logging.log4j.core.layout.JSONLayout.toSerializable (LogEvent)
substitute(LogEvent,StringBuilder,int,int,List)19org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute (LogEvent,StringBuilder,int,int,List)
constructNode(String,Node,JsonNode)19org.apache.logging.log4j.core.config.JSONConfiguration.constructNode (String,Node,JsonNode)
RFC5424Layout(Configuration,Facility,String,int,boolean,boolean,String ,String,String,String,String,String,String,String,String,Charset ,String,boolean,LoggerFields[])18org.apache.logging.log4j.core.layout.RFC5424Layout.RFC5424Layout (Configuration,Facility,String,int,boolean,boolean,String,String ,String,String,String,String,String,String,String,Charset,String ,boolean,LoggerFields[])
appendStructuredElements(StringBuilder,LogEvent)18org.apache.logging.log4j.core.layout.RFC5424Layout .appendStructuredElements(StringBuilder,LogEvent)
toSerializable(LogEvent)18org.apache.logging.log4j.core.layout.XMLLayout.toSerializable(LogEvent )
testWriteInternal02()18org.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManagerTest.testWriteInternal02()
multiThreadedTestRun(IPerfTestRunner,String,int,String)18org.apache.logging.log4j.core.async.perftest.MTPerfTest .multiThreadedTestRun(IPerfTestRunner,String,int,String)
createProperties(String,Agent[],Property[],int,String)18org.apache.logging.log4j.flume.appender .FlumeEmbeddedManager$FlumeManagerFactory.createProperties(String ,Agent[],Property[],int,String)
LogManager()17org.apache.logging.log4j.LogManager.LogManager()
testThreads()17org.apache.logging.log4j.FilterPerformanceComparison.testThreads()
newInstance(String[])17org.apache.logging.log4j.core.impl.ThrowableFormatOptions.newInstance (String[])
newInstance(String[])17org.apache.logging.log4j.core.pattern.LevelPatternConverter .newInstance(String[])
getContext(String,ClassLoader,boolean,URI)16org.apache.logging.log4j.core.selector.ClassLoaderContextSelector .getContext(String,ClassLoader,boolean,URI)
createNoSQLProvider(String,String,String,String,String,String,String ,String)16org.apache.logging.log4j.core.appender.db.nosql.couchdb .CouchDBProvider.createNoSQLProvider(String,String,String,String ,String,String,String,String)
advertise(Map)16org.apache.logging.log4j.core.net.MulticastDNSAdvertiser.advertise(Map )
createAppender(Agent[],Property[],String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,FlumeEventFactory,Layout,Filter)16org.apache.logging.log4j.flume.appender.FlumeAppender.createAppender (Agent[],Property[],String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,FlumeEventFactory,Layout,Filter)
testFailover()16org.apache.logging.log4j.flume.appender.FlumePersistentAppenderTest .testFailover()

Statistics

Stat   # Variables
Sum:765
Average:22.5
Minimum:16
Maximum:68
Standard deviation:9.56
Variance:91.49
warningCritical    Rule warning: Methods with too many overloads
// <Name>Methods with too many overloads</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.NbOverloads > 6 
  
orderby m.NbOverloads descending
select new { m, m.NbOverloads }

// Methods where NbOverloads > 6 might 
// be a problem to maintain and provoke higher coupling 
// than necessary. 
// This might also reveal a potential misused of the 
// C# and VB.NET language that since C#3 and VB9 support 
// object initialization. This feature helps reducing the number 
// of constructors of a class.
// See the definition of the NbOverloads metric here 
// http://www.jarchitect.com/Metrics#NbOverloads

352 methods matched

methods# OverloadsFull Name
replace(Object,Map)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(Object,Map )
replace(Object,Map,String,String)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(Object,Map ,String,String)
replace(Object,Properties)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(Object ,Properties)
replace(String)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(String)
replace(LogEvent,String)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,String)
replace(String,int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(String,int ,int)
replace(LogEvent,String,int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,String,int,int)
replace(char[])21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(char[])
replace(LogEvent,char[])21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,char[])
replace(char[],int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(char[],int ,int)
replace(LogEvent,char[],int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,char[],int,int)
replace(StringBuffer)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace (StringBuffer)
replace(LogEvent,StringBuffer)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,StringBuffer)
replace(StringBuffer,int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace (StringBuffer,int,int)
replace(LogEvent,StringBuffer,int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,StringBuffer,int,int)
replace(StringBuilder)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace (StringBuilder)
replace(LogEvent,StringBuilder)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,StringBuilder)
replace(StringBuilder,int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace (StringBuilder,int,int)
replace(LogEvent,StringBuilder,int,int)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,StringBuilder,int,int)
replace(Object)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(Object)
replace(LogEvent,Object)21org.apache.logging.log4j.core.lookup.StrSubstitutor.replace(LogEvent ,Object)
LocalizedMessage(String,Object[])18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,Object[])
LocalizedMessage(String,String,Object[])18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,String,Object[])
LocalizedMessage(ResourceBundle,String,Object[])18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (ResourceBundle,String,Object[])
LocalizedMessage(String,Locale,String,Object[])18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,Locale,String,Object[])
LocalizedMessage(ResourceBundle,Locale,String,Object[])18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (ResourceBundle,Locale,String,Object[])
LocalizedMessage(Locale,String,Object[])18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (Locale,String,Object[])
LocalizedMessage(String,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,Object)
LocalizedMessage(String,String,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,String,Object)
LocalizedMessage(ResourceBundle,String,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (ResourceBundle,String,Object)
LocalizedMessage(String,Locale,String,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,Locale,String,Object)
LocalizedMessage(ResourceBundle,Locale,String,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (ResourceBundle,Locale,String,Object)
LocalizedMessage(Locale,String,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (Locale,String,Object)
LocalizedMessage(String,Object,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,Object,Object)
LocalizedMessage(String,String,Object,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,String,Object,Object)
LocalizedMessage(ResourceBundle,String,Object,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (ResourceBundle,String,Object,Object)
LocalizedMessage(String,Locale,String,Object,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (String,Locale,String,Object,Object)
LocalizedMessage(ResourceBundle,Locale,String,Object,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (ResourceBundle,Locale,String,Object,Object)
LocalizedMessage(Locale,String,Object,Object)18org.apache.logging.log4j.message.LocalizedMessage.LocalizedMessage (Locale,String,Object,Object)
log(Level,Marker,Message)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Marker,Message)
log(Level,Marker,Message,Throwable)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Marker,Message ,Throwable)
log(Level,Marker,Object)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Marker,Object)
log(Level,Marker,Object,Throwable)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Marker,Object ,Throwable)
log(Level,Marker,String)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Marker,String)
log(Level,Marker,String,Object[])15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Marker,String ,Object[])
log(Level,Marker,String,Throwable)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Marker,String ,Throwable)
log(Level,Message)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Message)
log(Level,Message,Throwable)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Message ,Throwable)
log(Level,Object)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Object)
log(Level,Object,Throwable)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,Object,Throwable )
log(Level,String)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,String)
log(Level,String,Object[])15org.apache.logging.log4j.spi.AbstractLogger.log(Level,String,Object[])
log(Level,String,Throwable)15org.apache.logging.log4j.spi.AbstractLogger.log(Level,String,Throwable )
log(Marker,String,Level,Message,Throwable)15org.apache.logging.log4j.spi.AbstractLogger.log(Marker,String,Level ,Message,Throwable)
debug(Marker,Message)14org.apache.logging.log4j.Logger.debug(Marker,Message)
debug(Marker,Message,Throwable)14org.apache.logging.log4j.Logger.debug(Marker,Message,Throwable)
debug(Marker,Object)14org.apache.logging.log4j.Logger.debug(Marker,Object)
debug(Marker,Object,Throwable)14org.apache.logging.log4j.Logger.debug(Marker,Object,Throwable)
debug(Marker,String)14org.apache.logging.log4j.Logger.debug(Marker,String)
debug(Marker,String,Object[])14org.apache.logging.log4j.Logger.debug(Marker,String,Object[])
debug(Marker,String,Throwable)14org.apache.logging.log4j.Logger.debug(Marker,String,Throwable)
debug(Message)14org.apache.logging.log4j.Logger.debug(Message)
debug(Message,Throwable)14org.apache.logging.log4j.Logger.debug(Message,Throwable)
debug(Object)14org.apache.logging.log4j.Logger.debug(Object)
debug(Object,Throwable)14org.apache.logging.log4j.Logger.debug(Object,Throwable)
debug(String)14org.apache.logging.log4j.Logger.debug(String)
debug(String,Object[])14org.apache.logging.log4j.Logger.debug(String,Object[])
debug(String,Throwable)14org.apache.logging.log4j.Logger.debug(String,Throwable)
error(Marker,Message)14org.apache.logging.log4j.Logger.error(Marker,Message)
error(Marker,Message,Throwable)14org.apache.logging.log4j.Logger.error(Marker,Message,Throwable)
error(Marker,Object)14org.apache.logging.log4j.Logger.error(Marker,Object)
error(Marker,Object,Throwable)14org.apache.logging.log4j.Logger.error(Marker,Object,Throwable)
error(Marker,String)14org.apache.logging.log4j.Logger.error(Marker,String)
error(Marker,String,Object[])14org.apache.logging.log4j.Logger.error(Marker,String,Object[])
error(Marker,String,Throwable)14org.apache.logging.log4j.Logger.error(Marker,String,Throwable)
error(Message)14org.apache.logging.log4j.Logger.error(Message)
error(Message,Throwable)14org.apache.logging.log4j.Logger.error(Message,Throwable)
error(Object)14org.apache.logging.log4j.Logger.error(Object)
error(Object,Throwable)14org.apache.logging.log4j.Logger.error(Object,Throwable)
error(String)14org.apache.logging.log4j.Logger.error(String)
error(String,Object[])14org.apache.logging.log4j.Logger.error(String,Object[])
error(String,Throwable)14org.apache.logging.log4j.Logger.error(String,Throwable)
fatal(Marker,Message)14org.apache.logging.log4j.Logger.fatal(Marker,Message)
fatal(Marker,Message,Throwable)14org.apache.logging.log4j.Logger.fatal(Marker,Message,Throwable)
fatal(Marker,Object)14org.apache.logging.log4j.Logger.fatal(Marker,Object)
fatal(Marker,Object,Throwable)14org.apache.logging.log4j.Logger.fatal(Marker,Object,Throwable)
fatal(Marker,String)14org.apache.logging.log4j.Logger.fatal(Marker,String)
fatal(Marker,String,Object[])14org.apache.logging.log4j.Logger.fatal(Marker,String,Object[])
fatal(Marker,String,Throwable)14org.apache.logging.log4j.Logger.fatal(Marker,String,Throwable)
fatal(Message)14org.apache.logging.log4j.Logger.fatal(Message)
fatal(Message,Throwable)14org.apache.logging.log4j.Logger.fatal(Message,Throwable)
fatal(Object)14org.apache.logging.log4j.Logger.fatal(Object)
fatal(Object,Throwable)14org.apache.logging.log4j.Logger.fatal(Object,Throwable)
fatal(String)14org.apache.logging.log4j.Logger.fatal(String)
fatal(String,Object[])14org.apache.logging.log4j.Logger.fatal(String,Object[])
fatal(String,Throwable)14org.apache.logging.log4j.Logger.fatal(String,Throwable)
info(Marker,Message)14org.apache.logging.log4j.Logger.info(Marker,Message)
info(Marker,Message,Throwable)14org.apache.logging.log4j.Logger.info(Marker,Message,Throwable)
info(Marker,Object)14org.apache.logging.log4j.Logger.info(Marker,Object)
info(Marker,Object,Throwable)14org.apache.logging.log4j.Logger.info(Marker,Object,Throwable)

Statistics

Stat   # Overloads
Sum:4 592
Average:13.05
Minimum:7
Maximum:21
Standard deviation:3.36
Variance:11.26
warningCritical    Rule warning: Types with too many methods
// <Name>Types with too many methods</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.Methods.Count() > 20 
  
orderby t.Methods.Count() descending
select new { t, t.InstanceMethods, t.StaticMethods }

// Types where Methods.Count() > 20 might be hard to 
// understand and maintain 
// but there might be cases where it is relevant 
// to have a high number of methods. 
// For example, the System.Windows.Forms.DataGridView 
// standard class has more than 1000 methods.

26 types matched

typesInstanceMethodsStaticMethodsFull Name
AbstractLogger140 methods1 methodorg.apache.logging.log4j.spi.AbstractLogger
Logger126 methods0 methodorg.apache.logging.log4j.Logger
SLF4JLogger64 methods0 methodorg.slf4j.impl.SLF4JLogger
Category50 methods10 methodsorg.apache.log4j.Category
StrSubstitutor46 methods3 methodsorg.apache.logging.log4j.core.lookup.StrSubstitutor
BaseConfiguration39 methods0 methodorg.apache.logging.log4j.core.config.BaseConfiguration
LoggerTest37 methods0 methodorg.apache.logging.log4j.LoggerTest
ThrowableFormatOptionsTest35 methods1 methodorg.apache.logging.log4j.core.impl.ThrowableFormatOptionsTest
LoggerStream35 methods0 methodorg.apache.logging.log4j.spi.LoggerStream
Log4jLogEvent19 methods15 methodsorg.apache.logging.log4j.core.impl.Log4jLogEvent
FlumePersistentManager3 methods27 methodsorg.apache.logging.log4j.flume.appender.FlumePersistentManager
RFC5424Layout24 methods4 methodsorg.apache.logging.log4j.core.layout.RFC5424Layout
RequestContext0 method28 methodsorg.apache.logging.log4j.samples.dto.RequestContext
LoggerContext24 methods1 methodorg.apache.logging.log4j.core.LoggerContext
LoggerConfig23 methods2 methodsorg.apache.logging.log4j.core.config.LoggerConfig
LogManager0 method24 methodsorg.apache.logging.log4j.LogManager
MapMessage24 methods0 methodorg.apache.logging.log4j.message.MapMessage
Configuration24 methods0 methodorg.apache.logging.log4j.core.config.Configuration
ThrowableProxy23 methods0 methodorg.apache.logging.log4j.core.impl.ThrowableProxy
LevelTest23 methods0 methodorg.apache.log4j.LevelTest
LoggingMessageTagSupportTest21 methods2 methodsorg.apache.logging.log4j.taglib.LoggingMessageTagSupportTest
Level15 methods7 methodsorg.apache.logging.log4j.Level
DefaultThreadContextStack22 methods0 methodorg.apache.logging.log4j.spi.DefaultThreadContextStack
MutableThreadContextStack22 methods0 methodorg.apache.logging.log4j.spi.MutableThreadContextStack
Server0 method22 methodsorg.apache.logging.log4j.core.jmx.Server
PriorityTest21 methods0 methodorg.apache.log4j.PriorityTest

Statistics

Stat   InstanceMethods   StaticMethods
Sum:00
Average:00
Minimum:00
Maximum:00
Standard deviation:00
Variance:00
warningCritical    Rule warning: Types with too many fields
// <Name>Types with too many fields</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.Fields.Count() > 20 && 
  
!t.IsEnumeration 
  
orderby t.Fields.Count() descending
select new { t, t.InstanceFields, t.StaticFields, t.SizeOfInst }

// Types where Fields.Count() > 20 and not IsEnumeration 
// might be hard to understand and maintain 
// but there might be cases where it is relevant 
// to have a high number of fields. 
// For example, the System.Windows.Forms.Control 
// standard class has more than 200 fields.

3 types matched

typesInstanceFieldsStaticFieldsSize of instanceFull Name
RFC5424Layout24 fields11 fields108org.apache.logging.log4j.core.layout.RFC5424Layout
SmtpActionType1 field28 fields4org.apache.logging.dumbster.smtp.SmtpActionType
CachedDateFormat7 fields14 fields28org.apache.logging.log4j.core.pattern.CachedDateFormat

Statistics

Stat   InstanceFields   StaticFields   Size of instance
Sum:00140
Average:0046.67
Minimum:004
Maximum:00108
Standard deviation:0044.46
Variance:001 976
warningCritical    Rule warning: Types with poor cohesion
// <Name>Types with poor cohesion</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
(t.LCOM > 0.8 || t.LCOMHS > 0.95) && 
  
t.NbFields > 10 && 
  
t.NbMethods >10 
  
orderby t.LCOM descending, t.LCOMHS descending
select new { t, t.LCOM, t.LCOMHS, 
                
t.NbMethods, t.NbFields }

// Types where LCOM > 0.8 and NbFields > 10 
// and NbMethods >10 might be problematic. 
// However, it is very hard to avoid such 
// non-cohesive types. The LCOMHS metric
// is often considered as more efficient to 
// detect non-cohesive types.
// See the definition of the LCOM metric here 
// http://www.jarchitect.com/Metrics#LCOM

9 types matched

typesLack of Cohesion Of Methods (LCOM)LCOM Henderson-Sellers (LCOMHS)# Methods# FieldsFull Name
ConfigurationFactory0.9311612org.apache.logging.log4j.core.config.ConfigurationFactory
RFC5424Layout0.910.953035org.apache.logging.log4j.core.layout.RFC5424Layout
Log4jLogEvent0.910.944015org.apache.logging.log4j.core.impl.Log4jLogEvent
BaseConfiguration0.910.934119org.apache.logging.log4j.core.config.BaseConfiguration
RingBufferLogEvent0.90.942116org.apache.logging.log4j.core.async.RingBufferLogEvent
LocalizedMessage0.850.882711org.apache.logging.log4j.message.LocalizedMessage
PerformanceComparison0.850.921311org.apache.logging.log4j.PerformanceComparison
LoggerConfig0.830.862916org.apache.logging.log4j.core.config.LoggerConfig
AsyncLoggerConfigHelper0.820.91213org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper

Statistics

Stat   Lack of Cohesion Of Methods (LCOM)   LCOM Henderson-Sellers (LCOMHS)   # Methods   # Fields
Sum:7.98.32229148
Average:0.880.9225.4416.44
Minimum:0.820.861211
Maximum:0.9314135
Standard deviation:0.040.03910.197.03
Variance:0.00160.0016103.849.36

060
Object Oriented Design  

warningCritical    Rule warning: Base class should not use derivatives
// <Name>Base class should not use derivatives</Name>
warnif count > 0 
from baseClass in JustMyCode.Types
where baseClass.IsClass && baseClass.NbChildren > 0 // <-- for optimization!
let derivedClassesUsed = baseClass.DerivedTypes.UsedBy(baseClass)
where derivedClassesUsed.Count() > 0
select new { baseClass, derivedClassesUsed }

6 types matched

typesderivedClassesUsedFull Name
AbstractLogger1 typeorg.apache.logging.log4j.spi.AbstractLogger
StrMatcher5 typesorg.apache.logging.log4j.core.lookup.StrMatcher
NameAbbreviator3 typesorg.apache.logging.log4j.core.pattern.NameAbbreviator
ConfigurationFactory1 typeorg.apache.logging.log4j.core.config.ConfigurationFactory
Category1 typeorg.apache.log4j.Category
Priority1 typeorg.apache.log4j.Priority

Statistics

Stat   derivedClassesUsed
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
warningCritical    Rule warning: Class shouldn't be too deep in inheritance tree
// <Name>Class shouldn't be too deep in inheritance tree</Name>
warnif count > 0 from t in JustMyCode.Types 
where t.IsClass
let baseClasses = t.BaseClasses.ExceptThirdParty()

// Warn for classes with 3 or more base classes.
// Notice that we don't count third-party classes 
// because this rule concerns your code design,
// not third-party libraries consumed design.
where baseClasses.Count() >= 3

select new { t, baseClasses, 
                
// The metric value DepthOfInheritance takes account
                // of third-party base classes
                t.DepthOfInheritance } 

// Branches too long in the derivation should be avoided.
// See the definition of the DepthOfInheritance metric here 
// http://www.jarchitect.com/Metrics#DIT

40 types matched

typesbaseClassesDepth of inheritanceFull Name
AbstractStyleNameConverter$Black3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Black
AbstractStyleNameConverter$Blue3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Blue
AbstractStyleNameConverter$Cyan3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Cyan
AbstractStyleNameConverter$Green3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Green
AbstractStyleNameConverter$Magenta3 types4org.apache.logging.log4j.core.pattern .AbstractStyleNameConverter$Magenta
AbstractStyleNameConverter$Red3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Red
AbstractStyleNameConverter$White3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$White
AbstractStyleNameConverter$Yellow3 types4org.apache.logging.log4j.core.pattern .AbstractStyleNameConverter$Yellow
ClassNamePatternConverter3 types4org.apache.logging.log4j.core.pattern.ClassNamePatternConverter
ExtendedThrowablePatternConverter3 types4org.apache.logging.log4j.core.pattern .ExtendedThrowablePatternConverter
LoggerPatternConverter3 types4org.apache.logging.log4j.core.pattern.LoggerPatternConverter
RootThrowablePatternConverter3 types4org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter
ConsoleAppender3 types4org.apache.logging.log4j.core.appender.ConsoleAppender
FileAppender3 types4org.apache.logging.log4j.core.appender.FileAppender
RandomAccessFileAppender3 types4org.apache.logging.log4j.core.appender.RandomAccessFileAppender
RollingFileAppender3 types4org.apache.logging.log4j.core.appender.RollingFileAppender
RollingRandomAccessFileAppender3 types4org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender
SocketAppender3 types4org.apache.logging.log4j.core.appender.SocketAppender
SyslogAppender4 types5org.apache.logging.log4j.core.appender.SyslogAppender
TLSSyslogAppender5 types6org.apache.logging.log4j.core.appender.TLSSyslogAppender
AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender3 types4org.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender
JDBCAppender3 types4org.apache.logging.log4j.core.appender.db.jdbc.JDBCAppender
JPAAppender3 types4org.apache.logging.log4j.core.appender.db.jpa.JPAAppender
NoSQLAppender3 types4org.apache.logging.log4j.core.appender.db.nosql.NoSQLAppender
RollingFileManager3 types4org.apache.logging.log4j.core.appender.rolling.RollingFileManager
RollingRandomAccessFileManager4 types5org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager
OnStartupTriggeringPolicyTest$MyRollingManager4 types5org.apache.logging.log4j.core.appender.rolling .OnStartupTriggeringPolicyTest$MyRollingManager
DatagramSocketManager3 types4org.apache.logging.log4j.core.net.DatagramSocketManager
TCPSocketManager3 types4org.apache.logging.log4j.core.net.TCPSocketManager
TLSSocketManager4 types5org.apache.logging.log4j.core.net.TLSSocketManager
InMemoryAppender3 types4org.apache.logging.log4j.test.appender.InMemoryAppender
FlumePersistentManager3 types4org.apache.logging.log4j.flume.appender.FlumePersistentManager
DebugTag3 types6org.apache.logging.log4j.taglib.DebugTag
ErrorTag3 types6org.apache.logging.log4j.taglib.ErrorTag
FatalTag3 types6org.apache.logging.log4j.taglib.FatalTag
InfoTag3 types6org.apache.logging.log4j.taglib.InfoTag
LogTag3 types6org.apache.logging.log4j.taglib.LogTag
TraceTag3 types6org.apache.logging.log4j.taglib.TraceTag
WarnTag3 types6org.apache.logging.log4j.taglib.WarnTag
LoggingMessageTagSupportTest$13 types6org.apache.logging.log4j.taglib.LoggingMessageTagSupportTest$1

Statistics

Stat   baseClasses   Depth of inheritance
Sum:0182
Average:04.55
Minimum:04
Maximum:06
Standard deviation:00.84
Variance:00.7
warningCritical    Rule warning: Class with no descendant should be final if possible
// <Name>Class with no descendant should be final if possible</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.IsClass && 
  
t.NbChildren ==0 && 
 
!t.IsFinal && 
 
!t.IsStatic 
  
// && !t.IsPublic <-- You might want to add this condition 
  //                    if you are developping a framework
  //                    with classes that are intended to be 
  //                    sub-classed by your clients.
  orderby t.NbLinesOfCode descending
select new { t, t.NbLinesOfCode }

710 types matched

types# lines of code (LOC)Full Name
AbstractLoggerTest514org.apache.logging.log4j.AbstractLoggerTest
NoSQLDatabaseManagerTest351org.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManagerTest
RFC5424Layout280org.apache.logging.log4j.core.layout.RFC5424Layout
Log4jWebInitializerImplTest266org.apache.logging.log4j.core.web.Log4jWebInitializerImplTest
RFC5424LayoutTest241org.apache.logging.log4j.core.layout.RFC5424LayoutTest
ParameterizedMessage224org.apache.logging.log4j.message.ParameterizedMessage
DefaultThreadContextStackTest222org.apache.logging.log4j.spi.DefaultThreadContextStackTest
MutableThreadContextStackTest222org.apache.logging.log4j.spi.MutableThreadContextStackTest
LoggerTest221org.apache.log4j.LoggerTest
TestConfigurator219org.apache.logging.log4j.core.config.TestConfigurator
StrSubstitutor218org.apache.logging.log4j.core.lookup.StrSubstitutor
ThrowableProxy211org.apache.logging.log4j.core.impl.ThrowableProxy
FlumePersistentManager$WriterThread210org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread
LoggerTest208org.apache.logging.log4j.LoggerTest
FlumeAppenderTest199org.apache.logging.log4j.flume.appender.FlumeAppenderTest
XMLConfiguration193org.apache.logging.log4j.core.config.XMLConfiguration
FlumePersistentAppenderTest191org.apache.logging.log4j.flume.appender.FlumePersistentAppenderTest
SLF4JLogger176org.slf4j.impl.SLF4JLogger
JSONConfiguration173org.apache.logging.log4j.core.config.JSONConfiguration
XMLLayout171org.apache.logging.log4j.core.layout.XMLLayout
JSONLayout164org.apache.logging.log4j.core.layout.JSONLayout
DebugDisabledPerformanceComparison151org.apache.logging.log4j.DebugDisabledPerformanceComparison
AbstractDatabaseManagerTest146org.apache.logging.log4j.core.appender.db.AbstractDatabaseManagerTest
DefaultRolloverStrategy145org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy
LoggingMessageTagSupportTest139org.apache.logging.log4j.taglib.LoggingMessageTagSupportTest
FlumeEmbeddedAppenderTest138org.apache.logging.log4j.flume.appender.FlumeEmbeddedAppenderTest
LoggerTest132org.apache.logging.log4j.core.LoggerTest
ResolverUtil131org.apache.logging.log4j.core.config.plugins.ResolverUtil
PluginManager130org.apache.logging.log4j.core.config.plugins.PluginManager
MulticastDNSAdvertiser121org.apache.logging.log4j.core.net.MulticastDNSAdvertiser
FlumeEmbeddedAgentTest121org.apache.logging.log4j.flume.appender.FlumeEmbeddedAgentTest
PatternProcessor119org.apache.logging.log4j.core.appender.rolling.PatternProcessor
FileAppenderTest117org.apache.logging.log4j.core.appender.FileAppenderTest
ThrowableAttributeConverter115org.apache.logging.log4j.core.appender.db.jpa.converter .ThrowableAttributeConverter
ClassLoaderContextSelector113org.apache.logging.log4j.core.selector.ClassLoaderContextSelector
SSLConfiguration113org.apache.logging.log4j.core.net.ssl.SSLConfiguration
DefaultThreadContextStack110org.apache.logging.log4j.spi.DefaultThreadContextStack
PatternProcessorTest109org.apache.logging.log4j.core.appender.rolling.PatternProcessorTest
ThreadContextInheritanceTest108org.apache.logging.log4j.ThreadContextInheritanceTest
SetLoggerTagTest104org.apache.logging.log4j.taglib.SetLoggerTagTest
SmtpRequest102org.apache.logging.dumbster.smtp.SmtpRequest
FlumePersistentManager102org.apache.logging.log4j.flume.appender.FlumePersistentManager
SMTPManager101org.apache.logging.log4j.core.net.SMTPManager
ThreadContextTest100org.apache.logging.log4j.ThreadContextTest
ExtendedThreadInformation99org.apache.logging.log4j.message.ExtendedThreadInformation
SimpleSmtpServer99org.apache.logging.dumbster.smtp.SimpleSmtpServer
PerformanceComparison98org.apache.logging.log4j.PerformanceComparison
ClientGUI98org.apache.logging.log4j.jmx.gui.ClientGUI
DefaultThreadContextMapTest97org.apache.logging.log4j.spi.DefaultThreadContextMapTest
Log4jLogEvent97org.apache.logging.log4j.core.impl.Log4jLogEvent
Timer96org.apache.logging.log4j.Timer
Timer96org.apache.logging.log4j.core.Timer
DriverManagerConnectionSourceTest95org.apache.logging.log4j.core.appender.db.jdbc .DriverManagerConnectionSourceTest
Log4jServletContainerInitializerTest94org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest
LocalizedMessage93org.apache.logging.log4j.message.LocalizedMessage
ColumnConfigTest92org.apache.logging.log4j.core.appender.db.jdbc.ColumnConfigTest
PatternLayoutTest91org.apache.logging.log4j.core.layout.PatternLayoutTest
SMTPAppenderTest91org.apache.logging.log4j.core.appender.SMTPAppenderTest
LevelPatternConverterTest89org.apache.logging.log4j.core.pattern.LevelPatternConverterTest
LoggerTest88org.apache.logging.slf4j.LoggerTest
AsyncLogger87org.apache.logging.log4j.core.async.AsyncLogger
SocketAppenderTest86org.apache.logging.log4j.core.appender.SocketAppenderTest
FlumeEvent86org.apache.logging.log4j.flume.appender.FlumeEvent
LoggerStreamTest85org.apache.logging.log4j.spi.LoggerStreamTest
FlumePersistentPerf85org.apache.logging.log4j.flume.appender.FlumePersistentPerf
PerfTestDriver84org.apache.logging.log4j.core.async.perftest.PerfTestDriver
PerfTestResultFormatter84org.apache.logging.log4j.core.async.perftest.PerfTestResultFormatter
ThrowablePatternConverterTest81org.apache.logging.log4j.core.pattern.ThrowablePatternConverterTest
AsyncLoggerConfigHelper81org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper
CategoryTest80org.apache.log4j.CategoryTest
LoggerContextAdmin77org.apache.logging.log4j.core.jmx.LoggerContextAdmin
ListAppender77org.apache.logging.log4j.test.appender.ListAppender
StrictXMLConfigTest76org.apache.logging.log4j.core.StrictXMLConfigTest
Log4jServletFilterTest75org.apache.logging.log4j.core.web.Log4jServletFilterTest
LevelTest75org.apache.log4j.LevelTest
SimplePerfTest73org.apache.logging.log4j.core.SimplePerfTest
MapRewritePolicyTest73org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicyTest
LoggerTest73org.apache.logging.slf4j.LoggerTest
FilterPerformanceComparison72org.apache.logging.log4j.FilterPerformanceComparison
RollingRandomAccessFileManagerTest72org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManagerTest
XMLConfigurationTest71org.apache.logging.log4j.core.config.XMLConfigurationTest
SLF4JLogger71org.apache.logging.slf4j.SLF4JLogger
FlumeEmbeddedManager$FlumeManagerFactory71org.apache.logging.log4j.flume.appender .FlumeEmbeddedManager$FlumeManagerFactory
BurstFilterTest70org.apache.logging.log4j.core.filter.BurstFilterTest
FileRenameActionTest69org.apache.logging.log4j.core.appender.rolling.helper .FileRenameActionTest
ConfigurationFactory$Factory68org.apache.logging.log4j.core.config.ConfigurationFactory$Factory
LoggerAwareTagSupportTest67org.apache.logging.log4j.taglib.LoggerAwareTagSupportTest
MessageFormatsPerfTest66org.apache.logging.log4j.message.MessageFormatsPerfTest
ResolverUtilTest66org.apache.logging.log4j.core.config.plugins.ResolverUtilTest
FormattedMessage65org.apache.logging.log4j.message.FormattedMessage
AbstractDatabaseAppenderTest64org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppenderTest
SimpleLogger62org.apache.logging.log4j.simple.SimpleLogger
PerformanceRun62org.apache.logging.log4j.PerformanceRun
RingBufferLogEventTest62org.apache.logging.log4j.core.async.RingBufferLogEventTest
PatternParserTest60org.apache.logging.log4j.core.pattern.PatternParserTest
SocketReconnectTest60org.apache.logging.log4j.core.net.SocketReconnectTest
Logger$PrivateConfig59org.apache.logging.log4j.core.Logger$PrivateConfig
ThreadContextMapFilter59org.apache.logging.log4j.core.filter.ThreadContextMapFilter
WebLookupTest59org.apache.logging.log4j.core.web.WebLookupTest
AdvertiserTest58org.apache.logging.log4j.core.config.AdvertiserTest

Statistics

Stat   # lines of code (LOC)
Sum:22 035
Average:31.04
Minimum:0
Maximum:514
Standard deviation:46.84
Variance:2 193
warningCritical    Rule warning: Avoid the Singleton pattern
//<Name>Avoid the Singleton pattern</Name>
warnif count > 0
from t in Application.Types
where !t.IsStatic && !t.IsAbstract && t.IsClass 

// All ctors of a singleton are private
where t.Constructors.Where(ctor => !ctor.IsPrivate).Count() == 0

// A singleton contains one static field of its parent type, to reference the unique instance
let staticFieldInstances = t.StaticFields.WithFieldType(t)
where staticFieldInstances.Count() == 1
select new { t, staticFieldInstance = staticFieldInstances.First() }

// The Singleton pattern consists in syntactically enforcing that a class 
// has just one unique instance.
// At first glance, this pattern looks appealing and it is widely used.
// However, we discourage you from using singleton classes because experience
// shows that singletons often result in less testable and less maintainable code.
// More details available in these discussions:
//  http://codebetter.com/patricksmacchia/2011/05/04/back-to-basics-usage-of-static-members/
//  http://adamschepis.com/blog/2011/05/02/im-adam-and-im-a-recovering-singleton-addict/

17 types matched

typesstaticFieldInstanceFull Name
StatusLoggerSTATUS_LOGGERorg.apache.logging.log4j.status.StatusLogger
CachedClockinstanceorg.apache.logging.log4j.core.helpers.CachedClock
CoarseCachedClockinstanceorg.apache.logging.log4j.core.helpers.CoarseCachedClock
FileLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.FileLocationPatternConverter
FullLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.FullLocationPatternConverter
IntegerPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.IntegerPatternConverter
LevelPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LevelPatternConverter
LineLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LineLocationPatternConverter
LineSeparatorPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter
LoggerPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LoggerPatternConverter
MethodLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.MethodLocationPatternConverter
NDCPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.NDCPatternConverter
SequenceNumberPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter
ThreadPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.ThreadPatternConverter
NullEnumerationINSTANCEorg.apache.log4j.helpers.NullEnumeration
StaticLoggerBinderSINGLETONorg.slf4j.impl.StaticLoggerBinder
StaticMDCBinderSINGLETONorg.slf4j.impl.StaticMDCBinder

Statistics

Stat   staticFieldInstance
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
warningCritical    Rule warning: Don't assign static fields from instance methods
// <Name>Don't assign static fields from instance methods</Name>
// Assigning static fields from instance methods leads to
// poorly maintainable and non thread-safe code.
// It is advised to assign static fields inline or from class constructor.
warnif count > 0
from f in Application.Fields where 
  
f.IsStatic &&
 
!f.IsLiteral &&
 
!f.IsInitOnly &&
 
!f.IsGeneratedByCompiler &&
  
// Contract API define such a insideContractEvaluation static field
  f.Name != "insideContractEvaluation"
let assignedBy = f.MethodsAssigningMe.Where(m => !m.IsStatic)
where assignedBy .Count() > 0
select new { f, assignedBy }

40 fields matched

fieldsassignedByFull Name
currentLevel12 methodsorg.apache.logging.log4j.AbstractLoggerTest.currentLevel
stringTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.stringTime
paramTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.paramTime
msgFormatTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.msgFormatTime
formattedTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.formattedTime
list11 methodorg.apache.logging.log4j.core.ExtendedLevelTest.list1
list21 methodorg.apache.logging.log4j.core.ExtendedLevelTest.list2
config1 methodorg.apache.logging.log4j.core.FileConfigTest.config
app1 methodorg.apache.logging.log4j.core.FileConfigTest.app
config1 methodorg.apache.logging.log4j.core.HostNameTest.config
app1 methodorg.apache.logging.log4j.core.HostNameTest.app
host1 methodorg.apache.logging.log4j.core.HostNameTest.host
hostFile1 methodorg.apache.logging.log4j.core.HostNameTest.hostFile
ctx1 methodorg.apache.logging.log4j.core.LateConfigTest.ctx
config1 methodorg.apache.logging.log4j.core.LoggerDateTest.config
fileApp1 methodorg.apache.logging.log4j.core.LoggerDateTest.fileApp
config1 methodorg.apache.logging.log4j.core.LoggerTest.config
app1 methodorg.apache.logging.log4j.core.LoggerTest.app
host1 methodorg.apache.logging.log4j.core.LoggerTest.host
noThrown1 methodorg.apache.logging.log4j.core.LoggerTest.noThrown
config1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.config
app1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.app
host1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.host
noThrown1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.noThrown
config1 methodorg.apache.logging.log4j.core.ShutdownDisabledTest.config
tcpCount1 methodorg.apache.logging.log4j.core.appender.SocketAppenderTest.tcpCount
udpCount1 methodorg.apache.logging.log4j.core.appender.SocketAppenderTest.udpCount
verbose1 methodorg.apache.logging.log4j.core.async.perftest.PerfTest.verbose
throughput5 methodsorg.apache.logging.log4j.core.async.perftest.PerfTest.throughput
pluginTypeMap1 methodorg.apache.logging.log4j.core.config.plugins.PluginManager .pluginTypeMap
receiver1 methodorg.apache.logging.log4j.core.net.JMSQueueFailoverTest.receiver
config1 methodorg.apache.logging.log4j.core.net.JMSQueueFailoverTest.config
app1 methodorg.apache.logging.log4j.core.net.JMSQueueFailoverTest.app
config1 methodorg.apache.logging.log4j.core.net.JMSTopicFailoverTest.config
app1 methodorg.apache.logging.log4j.core.net.JMSTopicFailoverTest.app
config1 methodorg.apache.log4j.LoggingTest.config
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumeEmbeddedAgentTest.ctx
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumeEmbeddedAppenderTest.ctx
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumePersistentAppenderTest .ctx
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumePersistentPerf.ctx

Statistics

Stat   assignedBy
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
warningCritical    Rule warning: Avoid empty interfaces
// <Name>Avoid empty interfaces</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.IsInterface && 
  
t.NbMethods == 0
select new { t, t.TypesThatImplementMe }

// Interfaces define members that provide a behavior 
// or usage contract. The functionality described by 
// the interface can be adopted by any type, 
// regardless of where the type appears in the 
// inheritance hierarchy. A type implements an 
// interface by providing implementations for the 
// interface's members. An empty interface does not 
// define any members, and as such, does not define 
// a contract that can be implemented.

// If your design includes empty interfaces that 
// types are expected to implement, you are probably 
// using an interface as a marker, or a way of 
// identifying a group of types. If this identification 
// will occur at runtime, the correct way to accomplish
// this is to use a custom attribute. Use the presence 
// or absence of the attribute, or the attribute's 
// properties, to identify the target types. If the 
// identification must occurs at compile time, then using 
// an empty interface is acceptable.

1 types matched

typeTypesThatImplementMeFull Name
AnsiConverter2 typesorg.apache.logging.log4j.core.pattern.AnsiConverter

Statistics

Stat   TypesThatImplementMe
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0

040
Design  

warningCritical    Rule warning: Avoid packages with few types
// <Name>Avoid packages with few types</Name>
warnif count > 0 from n in JustMyCode.Packages 
let types = n.ChildTypes.Where(t => !t.IsGeneratedByCompiler)
where 
  
types.Count() < 5 
  
orderby types.Count() ascending
select new { n, types } 

// Make sure that there is a logical organization 
// to each of your packages, and that there is a 
// valid reason for putting types in a sparsely 
// populated package. Packages should contain 
// types that are used together in most scenarios. 
// When their applications are mutually exclusive, 
// types should be located in separate packages

25 packages matched

packagestypesFull Name
org.apache.logging.log4j.core.appender.rolling.helper1 typeorg.apache.logging.log4j.core.appender.rolling.helper
org.apache.logging.log4j.core.osgi.equinox1 typeorg.apache.logging.log4j.core.osgi.equinox
org.apache.logging.log4j.core.osgi.felix1 typeorg.apache.logging.log4j.core.osgi.felix
org.apache.logging.log4j.test1 typeorg.apache.logging.log4j.test
org.apache.logging.log4j.test.layout1 typeorg.apache.logging.log4j.test.layout
org.apache.log4j.helpers1 typeorg.apache.log4j.helpers
org.apache.log4j.xml1 typeorg.apache.log4j.xml
org.apache.log4j.util1 typeorg.apache.log4j.util
org.apache.log4j.osgi.equinox1 typeorg.apache.log4j.osgi.equinox
org.apache.log4j.osgi.felix1 typeorg.apache.log4j.osgi.felix
org.apache.logging.log4j.flume.test1 typeorg.apache.logging.log4j.flume.test
org.apache.logging.log4j.samples.util1 typeorg.apache.logging.log4j.samples.util
org.apache.logging.log4j.osgi2 typesorg.apache.logging.log4j.osgi
org.apache.logging.log4j.osgi.equinox2 typesorg.apache.logging.log4j.osgi.equinox
org.apache.logging.log4j.osgi.felix2 typesorg.apache.logging.log4j.osgi.felix
org.apache.log4j.config2 typesorg.apache.log4j.config
org.apache.logging.log4j.simple3 typesorg.apache.logging.log4j.simple
org.apache.logging.log4j.core.util3 typesorg.apache.logging.log4j.core.util
org.apache.logging.log4j.core.appender.db.nosql.couchdb3 typesorg.apache.logging.log4j.core.appender.db.nosql.couchdb
org.apache.logging.log4j.samples.dto3 typesorg.apache.logging.log4j.samples.dto
org.apache.logging.log4j.util4 typesorg.apache.logging.log4j.util
org.apache.logging.log4j.core.appender.db.nosql.mongo4 typesorg.apache.logging.log4j.core.appender.db.nosql.mongo
org.apache.logging.slf4j4 typesorg.apache.logging.slf4j
org.slf4j.impl4 typesorg.slf4j.impl
org.apache.logging.log4j.jcl4 typesorg.apache.logging.log4j.jcl

Statistics

Stat   types
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
warningCritical    Rule warning: Nested types should not be visible
// <Name>Nested types should not be visible</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.IsNested && 
 
!t.IsGeneratedByCompiler &&
 
!t.IsPrivate 
select new { t, t.NbLinesOfCode, t.Visibility } 


// A nested type is a type declared within the 
// scope of another type. Nested types are useful 
// for encapsulating private implementation details 
// of the containing type. Used for this purpose, 
// nested types should not be externally visible. 
// Do not use externally visible nested types for 
// logical grouping or to avoid name collisions; 
// instead, use packages.

12 types matched

types# lines of code (LOC)VisibilityFull Name
MapMessage$MapFormatN/APublicorg.apache.logging.log4j.message.MapMessage$MapFormat
Logger$PrivateConfig59Publicorg.apache.logging.log4j.core.Logger$PrivateConfig
ThreadedTest$State6Internalorg.apache.logging.log4j.core.ThreadedTest$State
MapRewritePolicy$ModeN/APublicorg.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy$Mode
AsyncLogger$Info8Internalorg.apache.logging.log4j.core.async.AsyncLogger$Info
AsyncLogger$ThreadNameStrategyN/AInternalorg.apache.logging.log4j.core.async.AsyncLogger$ThreadNameStrategy
PerfTestDriver$Stats23Internalorg.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats
PerfTestDriver$WaitStrategyN/AInternalorg.apache.logging.log4j.core.async.perftest .PerfTestDriver$WaitStrategy
ConfigurationFactory$ConfigurationSource23Publicorg.apache.logging.log4j.core.config .ConfigurationFactory$ConfigurationSource
ResolverUtil$ClassTest4Publicorg.apache.logging.log4j.core.config.plugins.ResolverUtil$ClassTest
ResolverUtil$ResourceTest4Publicorg.apache.logging.log4j.core.config.plugins.ResolverUtil$ResourceTest
ResolverUtil$TestN/APublicorg.apache.logging.log4j.core.config.plugins.ResolverUtil$Test

Statistics

Stat   # lines of code (LOC)   Visibility
Sum:1270
Average:18.140
Minimum:40
Maximum:590
Standard deviation:18.390
Variance:338.120
warningCritical    Rule warning: Instances size shouldn't be too big
// <Name>Instances size shouldn't be too big</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.SizeOfInst > 64 
  
orderby t.SizeOfInst descending
select new { t, t.SizeOfInst, t.InstanceFields }

// Types where SizeOfInst > 64 might degrade performance 
// (depending on the number of instances created at runtime) 
// and might be hard to maintain. However it is not a rule 
// since sometime there is no alternative (the size of 
// instances of the System.Net.NetworkInformation.SystemIcmpV6Statistics 
// standard class is 2064 bytes).
// Notice that a class with a large SizeOfInst value
// doesn't necessarily have a lot of instance fields.
// It might derive from a class with a large SizeOfInst value.
// See the definition of the SizeOfInst metric here 
// http://www.jarchitect.com/Metrics#SizeOfInst

10 types matched

typesSize of instanceInstanceFieldsFull Name
RFC5424Layout10824 fieldsorg.apache.logging.log4j.core.layout.RFC5424Layout
XMLConfiguration965 fieldsorg.apache.logging.log4j.core.config.XMLConfiguration
JSONConfiguration883 fieldsorg.apache.logging.log4j.core.config.JSONConfiguration
BasicConfigurationFactory$BasicConfiguration801 fieldorg.apache.logging.log4j.core .BasicConfigurationFactory$BasicConfiguration
BasicConfigurationFactory$BasicConfiguration801 fieldorg.apache.log4j.BasicConfigurationFactory$BasicConfiguration
BaseConfiguration7618 fieldsorg.apache.logging.log4j.core.config.BaseConfiguration
DefaultConfiguration760 fieldorg.apache.logging.log4j.core.config.DefaultConfiguration
NullConfiguration760 fieldorg.apache.logging.log4j.core.config.NullConfiguration
RollingRandomAccessFileManager724 fieldsorg.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager
FlumePersistentManager729 fieldsorg.apache.logging.log4j.flume.appender.FlumePersistentManager

Statistics

Stat   Size of instance   InstanceFields
Sum:8240
Average:82.40
Minimum:720
Maximum:1080
Standard deviation:11.060
Variance:122.240
warningCritical    Rule warning: Don't use obsolete types, methods or fields
// <Name>Don't use obsolete types, methods or fields</Name>   
warnif count > 0
let obsoleteTypes = Types.Where(t => t.IsObsolete)
let obsoleteMethods = Methods.Where(m2 => m2.IsObsolete).ToHashSet()
let obsoleteFields = Fields.Where(f => f.IsObsolete)

from m in JustMyCode.Methods.UsingAny(obsoleteTypes).Union(
          
JustMyCode.Methods.UsingAny(obsoleteMethods)).Union(
          
JustMyCode.Methods.UsingAny(obsoleteFields))
let obsoleteTypesUsed = obsoleteTypes.UsedBy(m)

// Optimization: MethodsCalled + Intersect() is faster than using obsoleteMethods.UsedBy()
let obsoleteMethodsUsed = m.MethodsCalled.Intersect(obsoleteMethods)
let obsoleteFieldsUsed = obsoleteFields.UsedBy(m)
select new { m, obsoleteTypesUsed, obsoleteMethodsUsed, obsoleteFieldsUsed }

22 methods matched

methodsobsoleteTypesUsedobsoleteMethodsUsedobsoleteFieldsUsedFull Name
toPriority(int)0 type1 method1 fieldorg.apache.log4j.Priority.toPriority(int)
testGetAllPossiblePriorities()0 type1 method0 fieldorg.apache.log4j.PriorityTest.testGetAllPossiblePriorities()
testToPriorityString()0 type1 method0 fieldorg.apache.log4j.PriorityTest.testToPriorityString()
testToPriorityInt()0 type1 method0 fieldorg.apache.log4j.PriorityTest.testToPriorityInt()
testToPriorityStringPriority()0 type1 method1 fieldorg.apache.log4j.PriorityTest.testToPriorityStringPriority()
testToPriorityIntPriority()0 type1 method1 fieldorg.apache.log4j.PriorityTest.testToPriorityIntPriority()
testDotlessLowerI()0 type1 method0 fieldorg.apache.log4j.PriorityTest.testDotlessLowerI()
testDottedLowerI()0 type1 method0 fieldorg.apache.log4j.PriorityTest.testDottedLowerI()
getAllPossiblePriorities()0 type0 method4 fieldsorg.apache.log4j.Priority.getAllPossiblePriorities()
Priority()0 type0 method5 fieldsorg.apache.log4j.Priority.Priority()
testForcedLog()0 type0 method1 fieldorg.apache.log4j.CategoryTest.testForcedLog()
logInfo(String,Throwable)0 type0 method1 fieldorg.apache.log4j.LoggerTest$MyLogger.logInfo(String,Throwable)
testLog()0 type0 method1 fieldorg.apache.log4j.LoggerTest.testLog()
testFatal()0 type0 method1 fieldorg.apache.log4j.PriorityTest.testFatal()
testERROR()0 type0 method1 fieldorg.apache.log4j.PriorityTest.testERROR()
testWARN()0 type0 method1 fieldorg.apache.log4j.PriorityTest.testWARN()
testINFO()0 type0 method1 fieldorg.apache.log4j.PriorityTest.testINFO()
testDEBUG()0 type0 method1 fieldorg.apache.log4j.PriorityTest.testDEBUG()
testEqualsNull()0 type0 method1 fieldorg.apache.log4j.PriorityTest.testEqualsNull()
testEqualsLevel()0 type0 method1 fieldorg.apache.log4j.PriorityTest.testEqualsLevel()
setNext(Filter)0 type0 method1 fieldorg.apache.log4j.spi.Filter.setNext(Filter)
getNext()0 type0 method1 fieldorg.apache.log4j.spi.Filter.getNext()

Statistics

Stat   obsoleteTypesUsed   obsoleteMethodsUsed   obsoleteFieldsUsed
Sum:000
Average:000
Minimum:000
Maximum:000
Standard deviation:000
Variance:000

320
Architecture and Layering  

warningCritical    Rule warning: Avoid packages mutually dependent
// <Name>Avoid packages mutually dependent</Name>
warnif count > 0
// Foreach pair of package mutually dependent, this rule lists pairs.
// The pair { first, second } is formatted to show that first package shouldn't use the second package.
// The first/second order is inferred from the number of types used by each other.
// The first package is using less types of the second.
// It means that the first package is certainly at a lower level in the architecture, than the second.
//
// To explore the coupling between two packages mutually dependent:
//  1) export the first package to the vertical header of the dependency matrix
//  2) export the second package to the horizontal header of the dependency matrix
//  3) double-click the black cell
//  4) in the matrix command bar, click the button: Remove empty Row(s) en Column(s)
// At this point, the dependency matrix shows types involved into the coupling.
//
// Following this rule is useful to avoid packages dependency cycles.
// More on this in our white books relative to partitionning code.
// http://www.jarchitect.com/WhiteBooks


// Optimization: restreint application projects set
// If some packages are mutually dependent
//  - They must be declared in the same project
//  - The parent project must ContainsPackageDependencyCycle
from project in Application.Projects.Where(a => a.ContainsPackageDependencyCycle != null && a.ContainsPackageDependencyCycle.Value)

// hashset is used to avoid reporting both A <-> B and B <-> A
let hashset = new HashSet<IPackage>()

// Optimization: restreint packages set
// If a package doesn't have a Level value, it must be in a dependency cycle
// or it must be using directly or indirectly a dependency cycle.
let packagesSuspect = project.ChildPackages.Where(n => n.Level == null)

from nA in packagesSuspect

// Select PACKAGES mutually dependent with nA
let unused = hashset.Add(nA) // Populate hashset
let packagesMutuallyDependentWith_nA = nA.PackagesUsed.Using(nA)
          
.Except(hashset) // <-- avoid reporting both A <-> B and B <-> A 
where packagesMutuallyDependentWith_nA.Count() > 0

from nB in packagesMutuallyDependentWith_nA

// nA and nB are mutually dependent
// Select first the one that shouldn't use the other.
// The first package is inferred from the fact that it is using less types of the second.
let typesOfBUsedByA = nB.ChildTypes.UsedBy(nA)
let typesOfAUsedByB = nA.ChildTypes.UsedBy(nB)
let first = (typesOfBUsedByA.Count() > typesOfAUsedByB.Count()) ? nB : nA
let second = (first == nA) ? nB : nA
let typesOfFirstUsedBySecond = (first == nA) ? typesOfAUsedByB : typesOfBUsedByA
let typesOfSecondUsedByFirst = (first == nA) ? typesOfBUsedByA : typesOfAUsedByB
select new { first, shouldntUse = second, typesOfFirstUsedBySecond, typesOfSecondUsedByFirst }

37 packages matched

packagesshouldntUsetypesOfFirstUsedBySecondtypesOfSecondUsedByFirstFull Name
org.apache.logging.log4j.messageorg.apache.logging.log4j9 types2 typesorg.apache.logging.log4j.message
org.apache.logging.log4j.spiorg.apache.logging.log4j12 types7 typesorg.apache.logging.log4j.spi
org.apache.logging.log4jorg.apache.logging.log4j.status2 types1 typeorg.apache.logging.log4j
org.apache.logging.log4j.utilorg.apache.logging.log4j2 types1 typeorg.apache.logging.log4j.util
org.apache.logging.log4jorg.apache.logging.log4j.simple4 types1 typeorg.apache.logging.log4j
org.apache.logging.log4j.messageorg.apache.logging.log4j.status1 type1 typeorg.apache.logging.log4j.message
org.apache.logging.log4j.messageorg.apache.logging.log4j.spi3 types1 typeorg.apache.logging.log4j.message
org.apache.logging.log4j.spiorg.apache.logging.log4j.status2 types1 typeorg.apache.logging.log4j.spi
org.apache.logging.log4j.spiorg.apache.logging.log4j.util2 types1 typeorg.apache.logging.log4j.spi
org.apache.logging.log4j.statusorg.apache.logging.log4j.util1 type1 typeorg.apache.logging.log4j.status
org.apache.logging.log4j.core.configorg.apache.logging.log4j.core11 types8 typesorg.apache.logging.log4j.core.config
org.apache.logging.log4j.coreorg.apache.logging.log4j.core.filter6 types1 typeorg.apache.logging.log4j.core
org.apache.logging.log4j.coreorg.apache.logging.log4j.core.jmx3 types1 typeorg.apache.logging.log4j.core
org.apache.logging.log4j.coreorg.apache.logging.log4j.test.appender3 types1 typeorg.apache.logging.log4j.core
org.apache.logging.log4j.coreorg.apache.logging.log4j.core.appender8 types2 typesorg.apache.logging.log4j.core
org.apache.logging.log4j.coreorg.apache.logging.log4j.core.impl4 types2 typesorg.apache.logging.log4j.core
org.apache.logging.log4j.core.filterorg.apache.logging.log4j.core.config3 types2 typesorg.apache.logging.log4j.core.filter
org.apache.logging.log4j.core.filterorg.apache.logging.log4j.test.appender2 types1 typeorg.apache.logging.log4j.core.filter
org.apache.logging.log4j.core.helpersorg.apache.logging.log4j.core.config.plugins3 types2 typesorg.apache.logging.log4j.core.helpers
org.apache.logging.log4j.core.implorg.apache.logging.log4j.core.config3 types3 typesorg.apache.logging.log4j.core.impl
org.apache.logging.log4j.core.implorg.apache.logging.log4j.core.selector2 types2 typesorg.apache.logging.log4j.core.impl
org.apache.logging.log4j.core.asyncorg.apache.logging.log4j.core.jmx2 types1 typeorg.apache.logging.log4j.core.async
org.apache.logging.log4j.core.patternorg.apache.logging.log4j.core.layout4 types1 typeorg.apache.logging.log4j.core.pattern
org.apache.logging.log4j.core.configorg.apache.logging.log4j.core.layout2 types1 typeorg.apache.logging.log4j.core.config
org.apache.logging.log4j.core.netorg.apache.logging.log4j.core.layout2 types1 typeorg.apache.logging.log4j.core.net
org.apache.logging.log4j.core.layoutorg.apache.logging.log4j.core.appender6 types4 typesorg.apache.logging.log4j.core.layout
org.apache.logging.log4j.core.lookuporg.apache.logging.log4j.core.config.plugins3 types3 typesorg.apache.logging.log4j.core.lookup
org.apache.logging.log4j.core.configorg.apache.logging.log4j.core.appender5 types2 typesorg.apache.logging.log4j.core.config
org.apache.logging.log4j.core.appenderorg.apache.logging.log4j.core.net10 types10 typesorg.apache.logging.log4j.core.appender
org.apache.logging.log4j.core.appenderorg.apache.logging.log4j.core.appender.rolling7 types5 typesorg.apache.logging.log4j.core.appender
org.apache.logging.log4j.core.appenderorg.apache.logging.log4j.test.appender3 types3 typesorg.apache.logging.log4j.core.appender
org.apache.logging.log4j.core.appender.db.nosqlorg.apache.logging.log4j.core.appender.db.nosql.couchdb3 types1 typeorg.apache.logging.log4j.core.appender.db.nosql
org.apache.logging.log4j.core.config.pluginsorg.apache.logging.log4j.core.config8 types4 typesorg.apache.logging.log4j.core.config.plugins
org.apache.logging.log4j.core.configorg.apache.logging.log4j.core.net5 types1 typeorg.apache.logging.log4j.core.config
org.apache.log4j.spiorg.apache.log4j7 types4 typesorg.apache.log4j.spi
org.apache.logging.slf4jorg.slf4j.helpers1 type1 typeorg.apache.logging.slf4j
org.slf4j.helpersorg.slf4j.impl4 types1 typeorg.slf4j.helpers

Statistics

Stat   shouldntUse   typesOfFirstUsedBySecond   typesOfSecondUsedByFirst
Sum:000
Average:000
Minimum:000
Maximum:000
Standard deviation:000
Variance:000
warningCritical    Rule warning: Avoid packages dependency cycles
// <Name>Avoid packages dependency cycles</Name>
warnif count > 0
// This query lists all application packages dependency cyles.
// Each row shows a different cycle, prefixed with a package entangled in the cycle.
//
// To browse a cycle on the dependency graph or the dependency matrix, just right click
// a cycle cell and export packages matched to the dependency graph or matrix!
//
// In the matrix, dependency cycles are represented with red squares and black cells.
// To browse easily dependency cycles, the Matrix comes with the option:
//   --> Display Direct and Indirect Dependencies
//
// Read our white books relative to partitionning code, 
// to know more about packages dependency cycles, and why avoiding them 
// is a simple but efficient solution to architecture well your code base.
// http://www.jarchitect.com/WhiteBooks


// Optimization: restreint application projects set
// If some packages are mutually dependent
//  - They must be declared in the same project
//  - The parent project must ContainsPackageDependencyCycle
from project in Application.Projects
                 
.Where(a => a.ContainsPackageDependencyCycle != null && 
                             
a.ContainsPackageDependencyCycle.Value)

// Optimization: restreint packages set
// A package involved in a cycle necessarily have a null Level.
let packagesSuspect = project.ChildPackages.Where(n => n.Level == null)

// hashset is used to avoid iterating again on packages already caught in a cycle.
let hashset = new HashSet<IPackage>()


from suspect in packagesSuspect
   
// By commenting this line, the query matches all packages involved in a cycle.
   where !hashset.Contains(suspect)

   
// Define 2 code metrics
   // - Packages depth of is using indirectly the suspect package.
   // - Packages depth of is used by the suspect package indirectly.
   // Note: for direct usage the depth is equal to 1.
   let packagesUserDepth = packagesSuspect.DepthOfIsUsing(suspect)
   
let packagesUsedDepth = packagesSuspect.DepthOfIsUsedBy(suspect)

   
// Select PACKAGES that are both using and used by packageSuspect
   let usersAndUsed = from n in packagesSuspect where 
                         
packagesUserDepth[n] > 0 && 
                         
packagesUsedDepth[n] > 0 
                      
select n

   
where usersAndUsed.Count() > 0

   
// Here we've found package(s) both using and used by the suspect package.
   // A cycle involving the suspect package is found!
   let cycle = usersAndUsed.Append(suspect)

   
// Fill hashset with packages in the cycle.
   // .ToArray() is needed to force the iterating process.
   let unused1 = (from n in cycle let unused2 = hashset.Add(n) select n).ToArray()

select new { suspect, cycle }

5 packages matched

packagescycleFull Name
org.apache.logging.log4j6 packagesorg.apache.logging.log4j
org.apache.logging.log4j.core19 packagesorg.apache.logging.log4j.core
org.apache.logging.log4j.core.appender.db.nosql2 packagesorg.apache.logging.log4j.core.appender.db.nosql
org.apache.log4j2 packagesorg.apache.log4j
org.apache.logging.slf4j3 packagesorg.apache.logging.slf4j

Statistics

Stat   cycle
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0

280
Best Practices  

warningCritical    Critical Rule warning: Prefer primitive types to boxed primitives
// <Name>Prefer primitive types to boxed primitives</Name>
warnif count > 0 

let BoxedTypes = ThirdParty.Types.WithFullNameIn(
   
"java.lang.Integer",
   
"java.lang.Double",
   
"java.lang.Boolean")

from m in Application.Methods.UsingAny(BoxedTypes)
select m

//Use primitives in preference to boxed primitives whenever you
//have the choice. Primitive types are simpler and faster. If you must use boxed
//primitives, be careful! Autoboxing reduces the verbosity, but not the danger, of
//using boxed primitives. When your program compares two boxed primitives
//with the == operator, it does an identity comparison, which is almost certainly not
//what you want.

188 methods matched

methodsFull Name
getFormatterLogger_Class()org.apache.logging.log4j.LoggerTest.getFormatterLogger_Class()
getFormatterLogger_Object()org.apache.logging.log4j.LoggerTest.getFormatterLogger_Object()
getFormatterLogger_String()org.apache.logging.log4j.LoggerTest.getFormatterLogger_String()
getLogger_Class_ParameterizedMessageFactory()org.apache.logging.log4j.LoggerTest .getLogger_Class_ParameterizedMessageFactory()
getLogger_Class_StringFormatterMessageFactory()org.apache.logging.log4j.LoggerTest .getLogger_Class_StringFormatterMessageFactory()
getLogger_Object_ParameterizedMessageFactory()org.apache.logging.log4j.LoggerTest .getLogger_Object_ParameterizedMessageFactory()
getLogger_Object_StringFormatterMessageFactory()org.apache.logging.log4j.LoggerTest .getLogger_Object_StringFormatterMessageFactory()
getLogger_String_MessageFactoryMismatch()org.apache.logging.log4j.LoggerTest .getLogger_String_MessageFactoryMismatch()
getLogger_String_ParameterizedMessageFactory()org.apache.logging.log4j.LoggerTest .getLogger_String_ParameterizedMessageFactory()
getLogger_String_StringFormatterMessageFactory()org.apache.logging.log4j.LoggerTest .getLogger_String_StringFormatterMessageFactory()
mdc()org.apache.logging.log4j.LoggerTest.mdc()
printf()org.apache.logging.log4j.LoggerTest.printf()
identityToString(Object)org.apache.logging.log4j.message.ParameterizedMessage.identityToString (Object)
StructuredDataId(String,String[],String[])org.apache.logging.log4j.message.StructuredDataId.StructuredDataId (String,String[],String[])
Provider(Properties,URL)org.apache.logging.log4j.spi.Provider.Provider(Properties,URL)
Provider()org.apache.logging.log4j.spi.Provider.Provider()
getIntegerProperty(String,int)org.apache.logging.log4j.util.PropertiesUtil.getIntegerProperty(String ,int)
log4jIsDebug(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison .log4jIsDebug(int)
logbackIsDebug(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison .logbackIsDebug(int)
log4j2IsDebug(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison .log4j2IsDebug(int)
log4j(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison.log4j(int)
logback(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison.logback (int)
logbackDebug(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison .logbackDebug(int)
log4j2(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison.log4j2(int )
log4j2Debug(int)org.apache.logging.log4j.DebugDisabledPerformanceComparison .log4j2Debug(int)
writeToWriter(int,Writer)org.apache.logging.log4j.DebugDisabledPerformanceComparison .writeToWriter(int,Writer)
writeToStream(int,OutputStream)org.apache.logging.log4j.DebugDisabledPerformanceComparison .writeToStream(int,OutputStream)
writeToChannel(int,FileChannel)org.apache.logging.log4j.DebugDisabledPerformanceComparison .writeToChannel(int,FileChannel)
logback(int)org.apache.logging.log4j.FilterPerformanceComparison.logback(int)
log4j2(int)org.apache.logging.log4j.FilterPerformanceComparison.log4j2(int)
main(String[])org.apache.logging.log4j.FormatterLoggerManualExample.main(String[])
log4j(int)org.apache.logging.log4j.PerformanceComparison.log4j(int)
logback(int)org.apache.logging.log4j.PerformanceComparison.logback(int)
log4j2(int)org.apache.logging.log4j.PerformanceComparison.log4j2(int)
writeToWriter(int,Writer)org.apache.logging.log4j.PerformanceComparison.writeToWriter(int ,Writer)
writeToStream(int,OutputStream)org.apache.logging.log4j.PerformanceComparison.writeToStream(int ,OutputStream)
writeToChannel(int,FileChannel)org.apache.logging.log4j.PerformanceComparison.writeToChannel(int ,FileChannel)
writeToWriter(int,Writer)org.apache.logging.log4j.PerformanceRun.writeToWriter(int,Writer)
writeToStream(int,OutputStream)org.apache.logging.log4j.PerformanceRun.writeToStream(int,OutputStream )
writeToChannel(int,FileChannel)org.apache.logging.log4j.PerformanceRun.writeToChannel(int,FileChannel )
testFileName()org.apache.logging.log4j.core.LoggerDateTest.testFileName()
simpleFlow()org.apache.logging.log4j.core.LoggerTest.simpleFlow()
getLogger_String_MessageFactoryMismatch()org.apache.logging.log4j.core.LoggerTest .getLogger_String_MessageFactoryMismatch()
getLogger_String_MessageFactoryMismatchNull()org.apache.logging.log4j.core.LoggerTest .getLogger_String_MessageFactoryMismatchNull()
simpleFlow()org.apache.logging.log4j.core.StrictXMLConfigTest.simpleFlow()
getState()org.apache.logging.log4j.core.ThreadedTest$State.getState()
createFilter(String,String,String,String)org.apache.logging.log4j.core.filter.RegexFilter.createFilter(String ,String,String,String)
parseInt(String,int)org.apache.logging.log4j.core.helpers.Integers.parseInt(String,int)
md5(String)org.apache.logging.log4j.core.helpers.NameUtil.md5(String)
toInt(String,int)org.apache.logging.log4j.core.helpers.OptionConverter.toInt(String,int )
getCaller(int)org.apache.logging.log4j.core.impl.ReflectiveCallerClassUtility .getCaller(int)
ReflectiveCallerClassUtility()org.apache.logging.log4j.core.impl.ReflectiveCallerClassUtility .ReflectiveCallerClassUtility()
newInstance(String[])org.apache.logging.log4j.core.impl.ThrowableFormatOptions.newInstance (String[])
testJavaIoSerializable()org.apache.logging.log4j.core.impl.Log4jLogEventTest .testJavaIoSerializable()
testCreateObjects()org.apache.logging.log4j.core.impl.ReflectionComparison .testCreateObjects()
test(String[],int,String,List)org.apache.logging.log4j.core.impl.ThrowableFormatOptionsTest.test (String[],int,String,List)
reregisterMBeansAfterReconfigure()org.apache.logging.log4j.core.jmx.Server .reregisterMBeansAfterReconfigure()
reregisterMBeansAfterReconfigure(MBeanServer)org.apache.logging.log4j.core.jmx.Server .reregisterMBeansAfterReconfigure(MBeanServer)
createLayout(String,String,String,String,String,String)org.apache.logging.log4j.core.layout.HTMLLayout.createLayout(String ,String,String,String,String,String)
createLayout(String,String,String,String,String)org.apache.logging.log4j.core.layout.JSONLayout.createLayout(String ,String,String,String,String)
getSdId()org.apache.logging.log4j.core.layout.LoggerFields.getSdId()
computeTimeStampString(long)org.apache.logging.log4j.core.layout.RFC5424Layout .computeTimeStampString(long)
pad(int,int,StringBuilder)org.apache.logging.log4j.core.layout.RFC5424Layout.pad(int,int ,StringBuilder)
createLayout(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String ,LoggerFields[],Configuration)org.apache.logging.log4j.core.layout.RFC5424Layout.createLayout(String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,LoggerFields[],Configuration)
createLayout(String,String,String,String)org.apache.logging.log4j.core.layout.SyslogLayout.createLayout(String ,String,String,String)
createLayout(String,String,String,String,String,String)org.apache.logging.log4j.core.layout.XMLLayout.createLayout(String ,String,String,String,String,String)
testLayout()org.apache.logging.log4j.core.layout.RFC5424LayoutTest.testLayout()
newInstance(String[])org.apache.logging.log4j.core.pattern.LevelPatternConverter .newInstance(String[])
getAbbreviator(String)org.apache.logging.log4j.core.pattern.NameAbbreviator.getAbbreviator (String)
finalizeConverter(char,String,int,StringBuilder,FormattingInfo,Map ,List,List,boolean)org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter (char,String,int,StringBuilder,FormattingInfo,Map,List,List,boolean)
testShortLineNumber()org.apache.logging.log4j.core.pattern.ThrowablePatternConverterTest .testShortLineNumber()
doFilter(ServletRequest,ServletResponse,FilterChain)org.apache.logging.log4j.core.web.Log4jServletFilter.doFilter (ServletRequest,ServletResponse,FilterChain)
testOnStartupWithServletVersion2_x()org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion2_x()
testOnStartupWithServletVersion3_xEffectiveVersion2_x()org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion2_x()
testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTrue()org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTrue()
testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTRUE()org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTRUE()
testOnStartupWithServletVersion3_xEffectiveVersion3_x()org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion3_x()
testOnStartupCanceledDueToPreExistingFilter()org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupCanceledDueToPreExistingFilter()
testOnStartupFailedDueToInitializerFailure()org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupFailedDueToInitializerFailure()
testDoFilterFirstTime()org.apache.logging.log4j.core.web.Log4jServletFilterTest .testDoFilterFirstTime()
testDoFilterSecondTime()org.apache.logging.log4j.core.web.Log4jServletFilterTest .testDoFilterSecondTime()
parseInt(String,int)org.apache.logging.log4j.core.appender.AbstractAppender.parseInt (String,int)
run()org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run()
append(LogEvent)org.apache.logging.log4j.core.appender.AsyncAppender.append(LogEvent)
createAppender(AppenderRef[],String,String,String,String,String,Filter ,Configuration,String)org.apache.logging.log4j.core.appender.AsyncAppender.createAppender (AppenderRef[],String,String,String,String,String,Filter,Configuration ,String)
createAppender(Layout,Filter,String,String,String,String)org.apache.logging.log4j.core.appender.ConsoleAppender.createAppender (Layout,Filter,String,String,String,String)
createAppender(String,String,String,String,String,String,String,String ,Layout,Filter,String,String,Configuration)org.apache.logging.log4j.core.appender.FileAppender.createAppender (String,String,String,String,String,String,String,String,Layout,Filter ,String,String,Configuration)
createAppender(String,String,String,String,String,String,Layout,Filter ,String,String,Configuration)org.apache.logging.log4j.core.appender.RandomAccessFileAppender .createAppender(String,String,String,String,String,String,Layout ,Filter,String,String,Configuration)
RandomAccessFileManager(RandomAccessFile,String,OutputStream,boolean ,int,String,Layout)org.apache.logging.log4j.core.appender.RandomAccessFileManager .RandomAccessFileManager(RandomAccessFile,String,OutputStream,boolean ,int,String,Layout)
setEndOfBatch(boolean)org.apache.logging.log4j.core.appender.RandomAccessFileManager .setEndOfBatch(boolean)
write(byte[],int,int)org.apache.logging.log4j.core.appender.RandomAccessFileManager.write (byte[],int,int)
createAppender(String,String,String,String,String,String ,TriggeringPolicy,RolloverStrategy,Layout,Filter,String,String,String ,Configuration)org.apache.logging.log4j.core.appender.RollingFileAppender .createAppender(String,String,String,String,String,String ,TriggeringPolicy,RolloverStrategy,Layout,Filter,String,String,String ,Configuration)
createAppender(String,String,String,String,String,TriggeringPolicy ,RolloverStrategy,Layout,Filter,String,String,String,Configuration)org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender .createAppender(String,String,String,String,String,TriggeringPolicy ,RolloverStrategy,Layout,Filter,String,String,String,Configuration)
createAppender(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,Layout,Filter,String)org.apache.logging.log4j.core.appender.SMTPAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,String,String,String,String,Layout,Filter,String)
createAppender(String,String,String,String,String,String,String,String ,Layout,Filter,String,Configuration)org.apache.logging.log4j.core.appender.SocketAppender.createAppender (String,String,String,String,String,String,String,String,Layout,Filter ,String,Configuration)
createAppender(String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,Filter,Configuration,String,String ,LoggerFields[],String)org.apache.logging.log4j.core.appender.SyslogAppender.createAppender (String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,Filter,Configuration,String,String ,LoggerFields[],String)
createAppender(String,String,SSLConfiguration,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,Filter,Configuration ,String,String,LoggerFields[],String)org.apache.logging.log4j.core.appender.TLSSyslogAppender .createAppender(String,String,SSLConfiguration,String,String,String ,String,String,String,String,String,String,String,String,String,String ,String,String,String,String,String,String,String,Filter,Configuration ,String,String,LoggerFields[],String)
toString()org.apache.logging.log4j.core.appender.TLSSyslogFrame.toString()
main(String[])org.apache.logging.log4j.core.appender.FileAppenderTest$ProcessTest .main(String[])
testMultipleVMs()org.apache.logging.log4j.core.appender.FileAppenderTest .testMultipleVMs()

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:
warningCritical    Critical Rule warning: Always override hashcode when you override equals
// <Name>Always override hashcode when you override equals</Name>
warnif count > 0 
from t in Types where !t.IsThirdParty && t.Methods.Where(a=>a.Name=="equals(Object)").Count()>0
&& t.Methods.Where(a=>a.Name=="hashCode()").Count()==0
select t


1 types matched

typeFull Name
TLSSyslogFrameorg.apache.logging.log4j.core.appender.TLSSyslogFrame

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:
warningCritical    Critical Rule warning: Always override toString
// <Name>Always override toString</Name>
warnif count > 0 
from t in Types where !t.IsThirdParty &&  t.IsClass && t.Methods.Where(a=>a.Name=="toString()").Count()==0
select t

//While java.lang.Object provides an implementation of the toString method,
//the string that it returns is generally not what the user of your class wants to see. I

857 types matched

typesFull Name
EventLoggerorg.apache.logging.log4j.EventLogger
LogManagerorg.apache.logging.log4j.LogManager
LoggingExceptionorg.apache.logging.log4j.LoggingException
MarkerManagerorg.apache.logging.log4j.MarkerManager
ThreadContextorg.apache.logging.log4j.ThreadContext
AbstractLoggerTest$LogEventorg.apache.logging.log4j.AbstractLoggerTest$LogEvent
AbstractLoggerTestorg.apache.logging.log4j.AbstractLoggerTest
EventLoggerTestorg.apache.logging.log4j.EventLoggerTest
LevelTestorg.apache.logging.log4j.LevelTest
LogManagerTestorg.apache.logging.log4j.LogManagerTest
LoggerTest$1org.apache.logging.log4j.LoggerTest$1
LoggerTest$TestParameterizedMessageFactoryorg.apache.logging.log4j.LoggerTest$TestParameterizedMessageFactory
LoggerTest$TestStringFormatterMessageFactoryorg.apache.logging.log4j.LoggerTest$TestStringFormatterMessageFactory
LoggerTestorg.apache.logging.log4j.LoggerTest
NoopThreadContextTestorg.apache.logging.log4j.NoopThreadContextTest
TestLoggerorg.apache.logging.log4j.TestLogger
TestLoggerContextorg.apache.logging.log4j.TestLoggerContext
TestLoggerContextFactoryorg.apache.logging.log4j.TestLoggerContextFactory
ThreadContextInheritanceTest$TestThreadorg.apache.logging.log4j.ThreadContextInheritanceTest$TestThread
ThreadContextInheritanceTestorg.apache.logging.log4j.ThreadContextInheritanceTest
ThreadContextTest$TestThreadorg.apache.logging.log4j.ThreadContextTest$TestThread
ThreadContextTestorg.apache.logging.log4j.ThreadContextTest
AbstractMessageFactoryorg.apache.logging.log4j.message.AbstractMessageFactory
BasicThreadInformationorg.apache.logging.log4j.message.BasicThreadInformation
ExtendedThreadInformation$1org.apache.logging.log4j.message.ExtendedThreadInformation$1
ExtendedThreadInformationorg.apache.logging.log4j.message.ExtendedThreadInformation
FormattedMessageFactoryorg.apache.logging.log4j.message.FormattedMessageFactory
LocalizedMessageorg.apache.logging.log4j.message.LocalizedMessage
LocalizedMessageFactoryorg.apache.logging.log4j.message.LocalizedMessageFactory
MapMessage$1org.apache.logging.log4j.message.MapMessage$1
MessageFormatMessageFactoryorg.apache.logging.log4j.message.MessageFormatMessageFactory
ParameterizedMessageFactoryorg.apache.logging.log4j.message.ParameterizedMessageFactory
StringFormatterMessageFactoryorg.apache.logging.log4j.message.StringFormatterMessageFactory
ThreadDumpMessage$1org.apache.logging.log4j.message.ThreadDumpMessage$1
ThreadDumpMessage$BasicThreadInfoFactoryorg.apache.logging.log4j.message .ThreadDumpMessage$BasicThreadInfoFactory
ThreadDumpMessage$ExtendedThreadInfoFactoryorg.apache.logging.log4j.message .ThreadDumpMessage$ExtendedThreadInfoFactory
ThreadDumpMessage$ThreadDumpMessageProxyorg.apache.logging.log4j.message .ThreadDumpMessage$ThreadDumpMessageProxy
FormattedMessageTestorg.apache.logging.log4j.message.FormattedMessageTest
LocalizedMessageTestorg.apache.logging.log4j.message.LocalizedMessageTest
MapMessageTestorg.apache.logging.log4j.message.MapMessageTest
MessageFormatMessageTestorg.apache.logging.log4j.message.MessageFormatMessageTest
MessageFormatsPerfTestorg.apache.logging.log4j.message.MessageFormatsPerfTest
ObjectMessageTestorg.apache.logging.log4j.message.ObjectMessageTest
ParameterizedMessageTestorg.apache.logging.log4j.message.ParameterizedMessageTest
StringFormattedMessageTestorg.apache.logging.log4j.message.StringFormattedMessageTest
StructuredDataMessageTestorg.apache.logging.log4j.message.StructuredDataMessageTest
ThreadDumpMessageTest$Thread1org.apache.logging.log4j.message.ThreadDumpMessageTest$Thread1
ThreadDumpMessageTest$Thread2org.apache.logging.log4j.message.ThreadDumpMessageTest$Thread2
ThreadDumpMessageTestorg.apache.logging.log4j.message.ThreadDumpMessageTest
SimpleLoggerorg.apache.logging.log4j.simple.SimpleLogger
SimpleLoggerContextorg.apache.logging.log4j.simple.SimpleLoggerContext
SimpleLoggerContextFactoryorg.apache.logging.log4j.simple.SimpleLoggerContextFactory
AbstractLoggerWrapperorg.apache.logging.log4j.spi.AbstractLoggerWrapper
DefaultThreadContextMap$1org.apache.logging.log4j.spi.DefaultThreadContextMap$1
LoggerStream$1org.apache.logging.log4j.spi.LoggerStream$1
LoggerStream$HelperStreamorg.apache.logging.log4j.spi.LoggerStream$HelperStream
Providerorg.apache.logging.log4j.spi.Provider
DefaultThreadContextMapTestorg.apache.logging.log4j.spi.DefaultThreadContextMapTest
DefaultThreadContextStackTestorg.apache.logging.log4j.spi.DefaultThreadContextStackTest
LoggerStreamTestorg.apache.logging.log4j.spi.LoggerStreamTest
MutableThreadContextStackTestorg.apache.logging.log4j.spi.MutableThreadContextStackTest
StatusConsoleListenerorg.apache.logging.log4j.status.StatusConsoleListener
StatusDataorg.apache.logging.log4j.status.StatusData
StatusLogger$1org.apache.logging.log4j.status.StatusLogger$1
StatusLogger$BoundedQueue<E>org.apache.logging.log4j.status.StatusLogger$BoundedQueue
StatusLoggerorg.apache.logging.log4j.status.StatusLogger
EnglishEnumsorg.apache.logging.log4j.util.EnglishEnums
PropertiesUtilorg.apache.logging.log4j.util.PropertiesUtil
ProviderUtil$1org.apache.logging.log4j.util.ProviderUtil$1
ProviderUtilorg.apache.logging.log4j.util.ProviderUtil
AbstractLoadBundleTestorg.apache.logging.log4j.osgi.AbstractLoadBundleTest
BundleTestInfoorg.apache.logging.log4j.osgi.BundleTestInfo
AbstractEquinoxLoadBundleTestorg.apache.logging.log4j.osgi.equinox.AbstractEquinoxLoadBundleTest
EquinoxLoadApiBundleTestorg.apache.logging.log4j.osgi.equinox.EquinoxLoadApiBundleTest
AbstractFelixLoadBundleTestorg.apache.logging.log4j.osgi.felix.AbstractFelixLoadBundleTest
FelixLoadApiBundleTestorg.apache.logging.log4j.osgi.felix.FelixLoadApiBundleTest
DebugDisabledPerformanceComparisonorg.apache.logging.log4j.DebugDisabledPerformanceComparison
FilterPerformanceComparison$Workerorg.apache.logging.log4j.FilterPerformanceComparison$Worker
FilterPerformanceComparisonorg.apache.logging.log4j.FilterPerformanceComparison
FormatterLoggerManualExample$1org.apache.logging.log4j.FormatterLoggerManualExample$1
FormatterLoggerManualExample$Userorg.apache.logging.log4j.FormatterLoggerManualExample$User
FormatterLoggerManualExampleorg.apache.logging.log4j.FormatterLoggerManualExample
LocationPerfCheckorg.apache.logging.log4j.LocationPerfCheck
Log4jInitPerformanceorg.apache.logging.log4j.Log4jInitPerformance
LogbackSubstitutionorg.apache.logging.log4j.LogbackSubstitution
PerformanceComparisonorg.apache.logging.log4j.PerformanceComparison
PerformanceRunorg.apache.logging.log4j.PerformanceRun
AbstractServerorg.apache.logging.log4j.core.AbstractServer
Logger$PrivateConfigorg.apache.logging.log4j.core.Logger$PrivateConfig
LoggerContext$ShutdownThreadorg.apache.logging.log4j.core.LoggerContext$ShutdownThread
LoggerContextorg.apache.logging.log4j.core.LoggerContext
AppenderRefLevelJsonTestorg.apache.logging.log4j.core.AppenderRefLevelJsonTest
AppenderRefLevelTestorg.apache.logging.log4j.core.AppenderRefLevelTest
BasicConfigurationFactory$BasicConfigurationorg.apache.logging.log4j.core .BasicConfigurationFactory$BasicConfiguration
BasicConfigurationFactoryorg.apache.logging.log4j.core.BasicConfigurationFactory
BasicLoggingTestorg.apache.logging.log4j.core.BasicLoggingTest
CollectionLoggingTestorg.apache.logging.log4j.core.CollectionLoggingTest
ExtendedLevelTestorg.apache.logging.log4j.core.ExtendedLevelTest
FileConfigTestorg.apache.logging.log4j.core.FileConfigTest
HostNameTestorg.apache.logging.log4j.core.HostNameTest

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:
warningCritical    Critical Rule warning: Prefer interfaces to abstract classes
// <Name>Prefer interfaces to abstract classes</Name>
warnif count > 0 
from t in Types where !t.IsThirdParty &&  t.IsAbstract
select t


45 types matched

typesFull Name
AbstractMessageFactoryorg.apache.logging.log4j.message.AbstractMessageFactory
AbstractLoggerorg.apache.logging.log4j.spi.AbstractLogger
AbstractLoadBundleTestorg.apache.logging.log4j.osgi.AbstractLoadBundleTest
AbstractEquinoxLoadBundleTestorg.apache.logging.log4j.osgi.equinox.AbstractEquinoxLoadBundleTest
AbstractFelixLoadBundleTestorg.apache.logging.log4j.osgi.felix.AbstractFelixLoadBundleTest
AbstractFilterorg.apache.logging.log4j.core.filter.AbstractFilter
AbstractFilterableorg.apache.logging.log4j.core.filter.AbstractFilterable
AbstractLayout<T>org.apache.logging.log4j.core.layout.AbstractLayout
AbstractStringLayoutorg.apache.logging.log4j.core.layout.AbstractStringLayout
StrMatcherorg.apache.logging.log4j.core.lookup.StrMatcher
AbstractPatternConverterorg.apache.logging.log4j.core.pattern.AbstractPatternConverter
AbstractStyleNameConverterorg.apache.logging.log4j.core.pattern.AbstractStyleNameConverter
DatePatternConverter$Formatterorg.apache.logging.log4j.core.pattern.DatePatternConverter$Formatter
LogEventPatternConverterorg.apache.logging.log4j.core.pattern.LogEventPatternConverter
NameAbbreviatororg.apache.logging.log4j.core.pattern.NameAbbreviator
NamePatternConverterorg.apache.logging.log4j.core.pattern.NamePatternConverter
AbstractAppenderorg.apache.logging.log4j.core.appender.AbstractAppender
AbstractManagerorg.apache.logging.log4j.core.appender.AbstractManager
AbstractOutputStreamAppender<M>org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender
AbstractDatabaseAppender<T>org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender
AbstractDatabaseManager$AbstractFactoryDataorg.apache.logging.log4j.core.appender.db .AbstractDatabaseManager$AbstractFactoryData
AbstractDatabaseManagerorg.apache.logging.log4j.core.appender.db.AbstractDatabaseManager
AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppenderorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender
AbstractDatabaseAppenderTest$LocalAbstractDatabaseManagerorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager
AbstractJdbcAppenderTestorg.apache.logging.log4j.core.appender.db.jdbc .AbstractJdbcAppenderTest
AbstractLogEventWrapperEntityorg.apache.logging.log4j.core.appender.db.jpa .AbstractLogEventWrapperEntity
BasicLogEventEntityorg.apache.logging.log4j.core.appender.db.jpa.BasicLogEventEntity
AbstractJpaAppenderTestorg.apache.logging.log4j.core.appender.db.jpa.AbstractJpaAppenderTest
AbstractRolloverStrategyorg.apache.logging.log4j.core.appender.rolling .AbstractRolloverStrategy
AbstractRollingAppenderSizeTestorg.apache.logging.log4j.core.appender.rolling .AbstractRollingAppenderSizeTest
AbstractActionorg.apache.logging.log4j.core.appender.rolling.action.AbstractAction
ConfigurationFactoryorg.apache.logging.log4j.core.config.ConfigurationFactory
ResolverUtil$ClassTestorg.apache.logging.log4j.core.config.plugins.ResolverUtil$ClassTest
ResolverUtil$ResourceTestorg.apache.logging.log4j.core.config.plugins.ResolverUtil$ResourceTest
AbstractJMSManagerorg.apache.logging.log4j.core.net.AbstractJMSManager
AbstractJMSReceiverorg.apache.logging.log4j.core.net.AbstractJMSReceiver
AbstractSocketManagerorg.apache.logging.log4j.core.net.AbstractSocketManager
AbstractSocketServerTestorg.apache.logging.log4j.core.net.AbstractSocketServerTest
TLSSyslogInputStreamReaderBaseorg.apache.logging.log4j.core.net.ssl.TLSSyslogInputStreamReaderBase
Layoutorg.apache.log4j.Layout
Filterorg.apache.log4j.spi.Filter
AbstractFlumeManagerorg.apache.logging.log4j.flume.appender.AbstractFlumeManager
ExceptionAwareTagSupportorg.apache.logging.log4j.taglib.ExceptionAwareTagSupport
LoggerAwareTagSupportorg.apache.logging.log4j.taglib.LoggerAwareTagSupport
LoggingMessageTagSupportorg.apache.logging.log4j.taglib.LoggingMessageTagSupport

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:
warningCritical    Critical Rule warning: Use interfaces only to define types
// <Name>Use interfaces only to define types</Name>
warnif count > 0 
from t in Types where !t.IsThirdParty &&  t.IsInterface && t.NbMethods==0
select t


1 types matched

typeFull Name
AnsiConverterorg.apache.logging.log4j.core.pattern.AnsiConverter

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:
warningCritical    Critical Rule warning: Avoid using raw types
// <Name>Avoid using raw types</Name>
warnif count > 0 

let rawTypes = ThirdParty.Types.WithFullNameIn(
  
"java.util.Collection")

from m in Application.Methods.UsingAny(rawTypes)
select m



31 methods matched

methodsFull Name
values()org.apache.logging.log4j.Level.values()
setStack(Collection)org.apache.logging.log4j.ThreadContext.setStack(Collection)
getParameters()org.apache.logging.log4j.message.MapMessage.getParameters()
recursiveDeepToString(Object,StringBuilder,Set)org.apache.logging.log4j.message.ParameterizedMessage .recursiveDeepToString(Object,StringBuilder,Set)
containsAll(Collection)org.apache.logging.log4j.spi.DefaultThreadContextStack.containsAll (Collection)
addAll(Collection)org.apache.logging.log4j.spi.DefaultThreadContextStack.addAll (Collection)
removeAll(Collection)org.apache.logging.log4j.spi.DefaultThreadContextStack.removeAll (Collection)
retainAll(Collection)org.apache.logging.log4j.spi.DefaultThreadContextStack.retainAll (Collection)
updateLoggers(Configuration)org.apache.logging.log4j.core.LoggerContext.updateLoggers (Configuration)
testLayout()org.apache.logging.log4j.core.layout.RFC5424LayoutTest.testLayout()
testEscape()org.apache.logging.log4j.core.layout.RFC5424LayoutTest.testEscape()
testException()org.apache.logging.log4j.core.layout.RFC5424LayoutTest.testException()
testMDCLoggerFields()org.apache.logging.log4j.core.layout.RFC5424LayoutTest .testMDCLoggerFields()
testLoggerFields()org.apache.logging.log4j.core.layout.RFC5424LayoutTest .testLoggerFields()
testDiscardEmptyLoggerFields()org.apache.logging.log4j.core.layout.RFC5424LayoutTest .testDiscardEmptyLoggerFields()
testSubstituteStructuredData()org.apache.logging.log4j.core.layout.RFC5424LayoutTest .testSubstituteStructuredData()
testParameterizedMessage()org.apache.logging.log4j.core.layout.RFC5424LayoutTest .testParameterizedMessage()
testLayout()org.apache.logging.log4j.core.layout.SyslogLayoutTest.testLayout()
PatternParser(Configuration,String,Class,Class)org.apache.logging.log4j.core.pattern.PatternParser.PatternParser (Configuration,String,Class,Class)
getLoggerContexts()org.apache.logging.log4j.core.selector.ClassLoaderContextSelector .getLoggerContexts()
append(LogEvent)org.apache.logging.log4j.core.appender.rewrite.RewriteAppender.append (LogEvent)
latencyTable()org.apache.logging.log4j.core.async.perftest.PerfTestResultFormatter .latencyTable()
throughputTable()org.apache.logging.log4j.core.async.perftest.PerfTestResultFormatter .throughputTable()
start()org.apache.logging.log4j.core.config.BaseConfiguration.start()
stop()org.apache.logging.log4j.core.config.BaseConfiguration.stop()
removeAppender(String)org.apache.logging.log4j.core.config.BaseConfiguration.removeAppender (String)
getInstance()org.apache.logging.log4j.core.config.ConfigurationFactory.getInstance( )
clearAppenders()org.apache.logging.log4j.core.config.LoggerConfig.clearAppenders()
callAppenders(LogEvent)org.apache.logging.log4j.core.config.LoggerConfig.callAppenders (LogEvent)
verifyExpectedEntriesAdvertised(Map)org.apache.logging.log4j.core.config.AdvertiserTest .verifyExpectedEntriesAdvertised(Map)
loadImplementationsInBundle(ResolverUtil$Test,String)org.apache.logging.log4j.core.config.plugins.ResolverUtil .loadImplementationsInBundle(ResolverUtil$Test,String)

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:
warningCritical    Critical Rule warning: Don't force gabrage collector
// <Name>Don't force gabrage collector</Name>
warnif count > 0 from m in Methods where m.IsUsing ("java.lang.System.gc()".AllowNoMatch())
select new { m, m.NbBCInstructions }



4 methods matched

methods# ByteCode instructionsFull Name
setupClass()62org.apache.logging.log4j.core.SimplePerfTest.setupClass()
debugDisabled()43org.apache.logging.log4j.core.SimplePerfTest.debugDisabled()
debugDisabledByLevel()44org.apache.logging.log4j.core.SimplePerfTest.debugDisabledByLevel()
debugLogger()45org.apache.logging.log4j.core.SimplePerfTest.debugLogger()

Statistics

Stat   # ByteCode instructions
Sum:194
Average:48.5
Minimum:43
Maximum:62
Standard deviation:7.83
Variance:61.25
warningCritical    Critical Rule warning: Do not raise generic exception
// <Name>Do not raise generic exception</Name>
warnif count > 0  from m in Methods 
let depth0 = m.DepthOfCreateA("java.lang.Exception".AllowNoMatch())
where depth0  == 1
select new { m, depth0 }



14 methods matched

methodsdepth0Full Name
ThrowablePatternConverterTest$LocalizedException()1org.apache.logging.log4j.core.pattern .ThrowablePatternConverterTest$LocalizedException .ThrowablePatternConverterTest$LocalizedException()
UnexpectedFormatException(String)1org.apache.logging.log4j.core.util.UnexpectedFormatException .UnexpectedFormatException(String)
TLSSocketManager$TLSSocketManagerFactory$TLSSocketManagerFactoryExcept ion(TLSSocketManager$TLSSocketManagerFactory)1org.apache.logging.log4j.core.net .TLSSocketManager$TLSSocketManagerFactory$TLSSocketManagerFactoryExcep tion .TLSSocketManager$TLSSocketManagerFactory$TLSSocketManagerFactoryExcep tion(TLSSocketManager$TLSSocketManagerFactory)
loadTrustManagerFactory()1org.apache.logging.log4j.core.net.ssl.SSLConfiguration .loadTrustManagerFactory()
loadKeyManagerFactory()1org.apache.logging.log4j.core.net.ssl.SSLConfiguration .loadKeyManagerFactory()
SSLConfigurationException(Exception)1org.apache.logging.log4j.core.net.ssl.SSLConfigurationException .SSLConfigurationException(Exception)
StoreConfigurationException(Exception)1org.apache.logging.log4j.core.net.ssl.StoreConfigurationException .StoreConfigurationException(Exception)
PropertySetterException(String)1org.apache.log4j.config.PropertySetterException .PropertySetterException(String)
PropertySetterException(Throwable)1org.apache.log4j.config.PropertySetterException .PropertySetterException(Throwable)
testDoEndTag()1org.apache.logging.log4j.taglib.CatchingTagTest.testDoEndTag()
testException()1org.apache.logging.log4j.taglib.ExceptionAwareTagSupportTest .testException()
testDoEndTagStringMessageNoMarkerException()1org.apache.logging.log4j.taglib.LoggingMessageTagSupportTest .testDoEndTagStringMessageNoMarkerException()
testDoEndTagMessageNoMarkerException()1org.apache.logging.log4j.taglib.LoggingMessageTagSupportTest .testDoEndTagMessageNoMarkerException()
testDoEndTagObjectNoMarkerException()1org.apache.logging.log4j.taglib.LoggingMessageTagSupportTest .testDoEndTagObjectNoMarkerException()

Statistics

Stat   depth0
Sum:14
Average:1
Minimum:1
Maximum:1
Standard deviation:0
Variance:0

030
Dead Code  

warningCritical    Rule warning: Potentially dead Types
// <Name>Potentially dead Types</Name>
warnif count > 0
// Filter procedure for types that should'nt be considered as dead
let canTypeBeConsideredAsDeadProc = new Func<IType, bool>(
   
t2 => !t2.IsPublic && //   Public types might be used by client applications of your projects.
         t2.Name != "Program" && 
        
!t2.IsGeneratedByCompiler 
        
)

// Select types unused
let typesUnused = 
   
from t4 in JustMyCode.Types where
   
t4.NbTypesUsingMe == 0 && canTypeBeConsideredAsDeadProc(t4)
   
select t4

// Dead types = types used only by unused types (recursive)
let deadTypesMetric = typesUnused.FillIterative(
types => from t3 in codeBase.Application.Types.UsedByAny(types).Except(types)
         
where canTypeBeConsideredAsDeadProc(t3) &&
               
t3.TypesUsingMe.Intersect(types).Count() == t3.NbTypesUsingMe
         
select t3)

from t in deadTypesMetric.DefinitionDomain
select new { t, t.TypesUsingMe, depth = deadTypesMetric[t] }

2 types matched

typesTypesUsingMedepthFull Name
ClockFactoryTest$MyClock0 type0org.apache.logging.log4j.core.helpers.ClockFactoryTest$MyClock
CachedDateFormat0 type0org.apache.logging.log4j.core.pattern.CachedDateFormat

Statistics

Stat   TypesUsingMe   depth
Sum:00
Average:00
Minimum:00
Maximum:00
Standard deviation:00
Variance:00
warningCritical    Rule warning: Potentially dead Methods
// <Name>Potentially dead Methods</Name>
warnif count > 0
// Filter procedure for methods that should'nt be considered as dead
let canMethodBeConsideredAsDeadProc = new Func<IMethod, bool>(
    
m => !m.IsPubliclyVisible &&       // Public methods might be used by client applications of your projects.
         !m.IsEntryPoint &&            // Main() method is not used by-design.
         !m.IsClassConstructor &&      // The BC code never explicitely calls class constructors.
         !(m.IsConstructor &&          // Don't take account of protected ctor that might be call by a derived ctors.
           m.IsProtected) &&
         
!m.IsGeneratedByCompiler)

// Get methods unused
let methodsUnused = 
   
from m2 in JustMyCode.Methods where 
   
m2.NbMethodsCallingMe == 0 && 
   
canMethodBeConsideredAsDeadProc(m2)
   
select m2

// Dead methods = methods used only by unused methods (recursive)
let deadMethodsMetric = methodsUnused.FillIterative(
   
methods => // Unique loop, just to let a chance to build the hashset.
              from o in (new object()).ToEnumerable()
              
// Use a hashet to make Intersect calls much faster!
              let hashset = methods.ToHashSet()
              
from m3 in codeBase.Application.Methods.UsedByAny(methods).Except(methods)
              
where canMethodBeConsideredAsDeadProc(m3) &&
                    
// Select methods called only by methods already considered as dead
                    hashset.Intersect(m3.MethodsCallingMe).Count() == m3.NbMethodsCallingMe
              
select m3)

from m4 in JustMyCode.Methods.Intersect(deadMethodsMetric.DefinitionDomain)
select new { m4, m4.MethodsCallingMe, depth = deadMethodsMetric[m4] }

313 methods matched

methodsMethodsCallingMedepthFull Name
EventLogger()0 method0org.apache.logging.log4j.EventLogger.EventLogger()
getName()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.getName()
getParent()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.getParent()
isInstanceOf(Marker)0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.isInstanceOf(Marker )
isInstanceOf(String)0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.isInstanceOf(String )
equals(Object)0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.equals(Object)
hashCode()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.hashCode()
toString()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.toString()
MarkerManager()0 method0org.apache.logging.log4j.MarkerManager.MarkerManager()
ThreadContext()0 method0org.apache.logging.log4j.ThreadContext.ThreadContext()
run()0 method0org.apache.logging.log4j.ThreadContextInheritanceTest$TestThread.run()
run()0 method0org.apache.logging.log4j.ThreadContextTest$TestThread.run()
BasicThreadInformation(Thread)1 method1org.apache.logging.log4j.message.BasicThreadInformation .BasicThreadInformation(Thread)
equals(Object)0 method0org.apache.logging.log4j.message.BasicThreadInformation.equals(Object)
hashCode()0 method0org.apache.logging.log4j.message.BasicThreadInformation.hashCode()
printThreadInfo(StringBuilder)0 method0org.apache.logging.log4j.message.BasicThreadInformation .printThreadInfo(StringBuilder)
printStack(StringBuilder,StackTraceElement[])0 method0org.apache.logging.log4j.message.BasicThreadInformation.printStack (StringBuilder,StackTraceElement[])
ExtendedThreadInformation(ThreadInfo)1 method1org.apache.logging.log4j.message.ExtendedThreadInformation .ExtendedThreadInformation(ThreadInfo)
printThreadInfo(StringBuilder)0 method0org.apache.logging.log4j.message.ExtendedThreadInformation .printThreadInfo(StringBuilder)
printStack(StringBuilder,StackTraceElement[])0 method0org.apache.logging.log4j.message.ExtendedThreadInformation.printStack (StringBuilder,StackTraceElement[])
formatLock(StringBuilder,LockInfo)1 method1org.apache.logging.log4j.message.ExtendedThreadInformation.formatLock (StringBuilder,LockInfo)
formatState(StringBuilder,ThreadInfo)1 method1org.apache.logging.log4j.message.ExtendedThreadInformation.formatState (StringBuilder,ThreadInfo)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.FormattedMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.FormattedMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.LocalizedMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.LocalizedMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.MessageFormatMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.MessageFormatMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.ObjectMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.ObjectMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.StringFormattedMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.StringFormattedMessage.readObject (ObjectInputStream)
createThreadInfo()0 method0org.apache.logging.log4j.message .ThreadDumpMessage$BasicThreadInfoFactory.createThreadInfo()
createThreadInfo()0 method0org.apache.logging.log4j.message .ThreadDumpMessage$ExtendedThreadInfoFactory.createThreadInfo()
readResolve()0 method0org.apache.logging.log4j.message .ThreadDumpMessage$ThreadDumpMessageProxy.readResolve()
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.ThreadDumpMessage.readObject (ObjectInputStream)
run()0 method0org.apache.logging.log4j.message.ThreadDumpMessageTest$Thread1.run()
run()0 method0org.apache.logging.log4j.message.ThreadDumpMessageTest$Thread2.run()
log(int)1 method2org.apache.logging.log4j.spi.LoggerStream$HelperStream.log(int)
extractLine(int)1 method3org.apache.logging.log4j.spi.LoggerStream$HelperStream.extractLine(int )
leftShiftBuffer(int)1 method4org.apache.logging.log4j.spi.LoggerStream$HelperStream.leftShiftBuffer (int)
write(int)1 method1org.apache.logging.log4j.spi.LoggerStream$HelperStream.write(int)
write(byte[],int,int)0 method0org.apache.logging.log4j.spi.LoggerStream$HelperStream.write(byte[] ,int,int)
StatusLogger$BoundedQueue<E>(StatusLogger,int)1 method1org.apache.logging.log4j.status.StatusLogger$BoundedQueue .StatusLogger$BoundedQueue<E>(StatusLogger,int)
add(Object)0 method0org.apache.logging.log4j.status.StatusLogger$BoundedQueue.add(Object)
StatusLogger()0 method0org.apache.logging.log4j.status.StatusLogger.StatusLogger()
EnglishEnums()0 method0org.apache.logging.log4j.util.EnglishEnums.EnglishEnums()
ProviderUtil()0 method0org.apache.logging.log4j.util.ProviderUtil.ProviderUtil()
log4jIsDebug(int)0 method0org.apache.logging.log4j.DebugDisabledPerformanceComparison .log4jIsDebug(int)
run()0 method0org.apache.logging.log4j.FilterPerformanceComparison$Worker.run()
run()0 method0org.apache.logging.log4j.core.LoggerContext$ShutdownThread.run()
nextInt()0 method0org.apache.logging.log4j.core.SimplePerfTest$SimpleRandom.nextInt()
getState()1 method1org.apache.logging.log4j.core.ThreadedTest$State.getState()
toString()0 method0org.apache.logging.log4j.core.ThreadedTest$State.toString()
getDelay(TimeUnit)0 method0org.apache.logging.log4j.core.filter.BurstFilter$LogDelay.getDelay (TimeUnit)
equals(Object)0 method0org.apache.logging.log4j.core.filter.BurstFilter$LogDelay.equals (Object)
hashCode()0 method0org.apache.logging.log4j.core.filter.BurstFilter$LogDelay.hashCode()
CompositeFilter()0 method0org.apache.logging.log4j.core.filter.CompositeFilter.CompositeFilter()
Assert()0 method0org.apache.logging.log4j.core.helpers.Assert.Assert()
CachedClock$1(CachedClock,String)1 method1org.apache.logging.log4j.core.helpers.CachedClock$1.CachedClock$1 (CachedClock,String)
run()0 method0org.apache.logging.log4j.core.helpers.CachedClock$1.run()
CachedClock()0 method0org.apache.logging.log4j.core.helpers.CachedClock.CachedClock()
Charsets()0 method0org.apache.logging.log4j.core.helpers.Charsets.Charsets()
ClockFactory()0 method0org.apache.logging.log4j.core.helpers.ClockFactory.ClockFactory()
CoarseCachedClock$1(CoarseCachedClock,String)1 method1org.apache.logging.log4j.core.helpers.CoarseCachedClock$1 .CoarseCachedClock$1(CoarseCachedClock,String)
run()0 method0org.apache.logging.log4j.core.helpers.CoarseCachedClock$1.run()
CoarseCachedClock()0 method0org.apache.logging.log4j.core.helpers.CoarseCachedClock .CoarseCachedClock()
Constants()0 method0org.apache.logging.log4j.core.helpers.Constants.Constants()
FileUtils()0 method0org.apache.logging.log4j.core.helpers.FileUtils.FileUtils()
Loader()0 method0org.apache.logging.log4j.core.helpers.Loader.Loader()
NameUtil()0 method0org.apache.logging.log4j.core.helpers.NameUtil.NameUtil()
NetUtils()0 method0org.apache.logging.log4j.core.helpers.NetUtils.NetUtils()
OptionConverter()0 method0org.apache.logging.log4j.core.helpers.OptionConverter.OptionConverter( )
Transform()0 method0org.apache.logging.log4j.core.helpers.Transform.Transform()
UUIDUtil()0 method0org.apache.logging.log4j.core.helpers.UUIDUtil.UUIDUtil()
ClockFactoryTest$MyClock()0 method0org.apache.logging.log4j.core.helpers.ClockFactoryTest$MyClock .ClockFactoryTest$MyClock()
currentTimeMillis()0 method0org.apache.logging.log4j.core.helpers.ClockFactoryTest$MyClock .currentTimeMillis()
run()0 method0org.apache.logging.log4j.core.helpers.UUIDTest$Worker.run()
ContextAnchor()0 method0org.apache.logging.log4j.core.impl.ContextAnchor.ContextAnchor()
readResolve()0 method0org.apache.logging.log4j.core.impl.Log4jLogEvent$LogEventProxy .readResolve()
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.core.impl.Log4jLogEvent.readObject (ObjectInputStream)
ReflectiveCallerClassUtility()0 method0org.apache.logging.log4j.core.impl.ReflectiveCallerClassUtility .ReflectiveCallerClassUtility()
Server()0 method0org.apache.logging.log4j.core.jmx.Server.Server()
valueOf(String)0 method0org.apache.logging.log4j.core.layout.HTMLLayout$FontSize.valueOf (String)
check(String)0 method0org.apache.logging.log4j.core.layout.RFC5424Layout$ExcludeChecker .check(String)
check(String)0 method0org.apache.logging.log4j.core.layout.RFC5424Layout$IncludeChecker .check(String)
check(String)0 method0org.apache.logging.log4j.core.layout.RFC5424Layout$NoopChecker.check (String)
writeStreamHeader()0 method0org.apache.logging.log4j.core.layout .SerializedLayout$PrivateObjectOutputStream.writeStreamHeader()
SerializedLayout()0 method0org.apache.logging.log4j.core.layout.SerializedLayout.SerializedLayout ()
testUnixTime(String)0 method0org.apache.logging.log4j.core.layout.PatternLayoutTest.testUnixTime (String)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$CharMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$CharSetMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$NoMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$StringMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$TrimMatcher.isMatch (char[],int,int,int)
getLevel()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getLevel()
getLoggerName()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getLoggerName()
getSource()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getSource()
getMessage()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getMessage()
getMarker()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getMarker()

Statistics

Stat   MethodsCallingMe   depth
Sum:041
Average:00.13
Minimum:00
Maximum:04
Standard deviation:00.48
Variance:00.23
warningCritical    Rule warning: Potentially dead Fields
// <Name>Potentially dead Fields</Name>
warnif count > 0
from f in JustMyCode.Fields where
   
f.NbMethodsUsingMe == 0 && 
   
!f.IsPublic &&     // Although not recommended, public fields might be used by client applications of your projects.
   !f.IsLiteral &&    // The BC code never explicitely uses literal fields.
   !f.IsEnumValue  && // The BC code never explicitely uses enumeration value.
   f.Name!= "serialVersionUID" &&
   
!f.IsInitOnly
    
   
select f

11 fields matched

fieldsFull Name
configorg.apache.logging.log4j.core.LateConfigTest.config
apporg.apache.logging.log4j.core.LateConfigTest.app
apporg.apache.logging.log4j.core.ShutdownDisabledTest.app
advertisedConfigurationorg.apache.logging.log4j.core.config.BaseConfiguration .advertisedConfiguration
apporg.apache.log4j.LoggingTest.app
loggerorg.apache.logging.slf4j.LoggerTest.logger
slf4jLoggerorg.apache.logging.slf4j.LoggerTest.slf4jLogger
contextorg.apache.logging.slf4j.LoggerTest.context
rootorg.apache.logging.slf4j.LoggerTest.root
rootLoggerorg.apache.logging.slf4j.LoggerTest.rootLogger
listorg.apache.logging.slf4j.LoggerTest.list

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:

040
Visibility  

warningCritical    Rule warning: Methods that could have a lower visibility
// <Name>Methods that could have a lower visibility</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
m.Visibility != m.OptimalVisibility &&
  
// Eliminate default constructor from the result.
  // Whatever the visibility of the declaring class,
  // default constructors are public and introduce noise
  // in the current rule.
  !( m.IsConstructor && m.IsPublic && m.NbParameters == 0) &&

  
// Don't decrease the visibility of Main() methods.
  !m.IsEntryPoint

select new { m, 
             
m.Visibility , 
             
CouldBeDeclared = m.OptimalVisibility,
             
m.MethodsCallingMe }

3,747 methods matched

methodsVisibilityCouldBeDeclaredMethodsCallingMeFull Name
logEvent(StructuredDataMessage,Level)PublicPrivate0 methodorg.apache.logging.log4j.EventLogger.logEvent(StructuredDataMessage ,Level)
isAtLeastAsSpecificAs(int)PublicPrivate0 methodorg.apache.logging.log4j.Level.isAtLeastAsSpecificAs(int)
lessOrEqual(Level)PublicPrivate0 methodorg.apache.logging.log4j.Level.lessOrEqual(Level)
lessOrEqual(int)PublicPrivate0 methodorg.apache.logging.log4j.Level.lessOrEqual(int)
compareTo(Level)PublicPrivate1 methodorg.apache.logging.log4j.Level.compareTo(Level)
getDeclaringClass()PublicPrivate0 methodorg.apache.logging.log4j.Level.getDeclaringClass()
hashCode()PublicPrivate0 methodorg.apache.logging.log4j.Level.hashCode()
valueOf(Class,String)<T>PublicPrivate0 methodorg.apache.logging.log4j.Level.valueOf(Class,String)<T>
readResolve()ProtectedPrivate0 methodorg.apache.logging.log4j.Level.readResolve()
getContext(ClassLoader,boolean)PublicPrivate0 methodorg.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean)
getContext(ClassLoader,boolean,Object)PublicPrivate0 methodorg.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean ,Object)
getContext(ClassLoader,boolean,Object,URI)PublicPrivate0 methodorg.apache.logging.log4j.LogManager.getContext(ClassLoader,boolean ,Object,URI)
getContext(String,ClassLoader,boolean)ProtectedPrivate0 methodorg.apache.logging.log4j.LogManager.getContext(String,ClassLoader ,boolean)
getFormatterLogger(Class)PublicInternal1 methodorg.apache.logging.log4j.LogManager.getFormatterLogger(Class)
getFormatterLogger(Object)PublicInternal1 methodorg.apache.logging.log4j.LogManager.getFormatterLogger(Object)
getLogger()PublicInternal2 methodsorg.apache.logging.log4j.LogManager.getLogger()
getLogger(Class,MessageFactory)PublicInternal3 methodsorg.apache.logging.log4j.LogManager.getLogger(Class,MessageFactory)
getLogger(MessageFactory)PublicInternal1 methodorg.apache.logging.log4j.LogManager.getLogger(MessageFactory)
getLogger(Object)PublicInternal3 methodsorg.apache.logging.log4j.LogManager.getLogger(Object)
getLogger(Object,MessageFactory)PublicInternal3 methodsorg.apache.logging.log4j.LogManager.getLogger(Object,MessageFactory)
getRootLogger()PublicInternal1 methodorg.apache.logging.log4j.LogManager.getRootLogger()
LogManager()ProtectedPrivate0 methodorg.apache.logging.log4j.LogManager.LogManager()
MarkerManager$Log4jMarker(String)PublicInternal1 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker .MarkerManager$Log4jMarker(String)
MarkerManager$Log4jMarker(String,Marker)PublicInternal1 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker .MarkerManager$Log4jMarker(String,Marker)
getName()PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker.getName()
getParent()PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker.getParent()
isInstanceOf(Marker)PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker.isInstanceOf(Marker )
isInstanceOf(String)PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker.isInstanceOf(String )
equals(Object)PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker.equals(Object)
hashCode()PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker.hashCode()
toString()PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager$Log4jMarker.toString()
getMarker(String,String)PublicPrivate0 methodorg.apache.logging.log4j.MarkerManager.getMarker(String,String)
containsKey(String)PublicInternal2 methodsorg.apache.logging.log4j.ThreadContext.containsKey(String)
isEmpty()PublicInternal2 methodsorg.apache.logging.log4j.ThreadContext.isEmpty()
push(String,Object[])PublicInternal2 methodsorg.apache.logging.log4j.ThreadContext.push(String,Object[])
AbstractLoggerTest$LogEvent(String,Message,Throwable)PublicInternal1 methodorg.apache.logging.log4j.AbstractLoggerTest$LogEvent .AbstractLoggerTest$LogEvent(String,Message,Throwable)
isEnabled(Level,Marker,Message,Throwable)ProtectedPrivate4 methodsorg.apache.logging.log4j.AbstractLoggerTest.isEnabled(Level,Marker ,Message,Throwable)
isEnabled(Level,Marker,Object,Throwable)ProtectedPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.isEnabled(Level,Marker ,Object,Throwable)
isEnabled(Level,Marker,String)ProtectedPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.isEnabled(Level,Marker ,String)
isEnabled(Level,Marker,String,Object[])ProtectedPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.isEnabled(Level,Marker ,String,Object[])
isEnabled(Level,Marker,String,Throwable)ProtectedPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.isEnabled(Level,Marker ,String,Throwable)
log(Marker,String,Level,Message,Throwable)PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.log(Marker,String,Level ,Message,Throwable)
testDebug()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testDebug()
testError()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testError()
testFatal()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testFatal()
testInfo()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testInfo()
testLogDebug()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testLogDebug()
testLogError()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testLogError()
testLogFatal()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testLogFatal()
testLogInfo()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testLogInfo()
testLogTrace()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testLogTrace()
testLogWarn()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testLogWarn()
testTrace()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testTrace()
testWarn()PublicPrivate0 methodorg.apache.logging.log4j.AbstractLoggerTest.testWarn()
setup()PublicPrivate0 methodorg.apache.logging.log4j.EventLoggerTest.setup()
structuredData()PublicPrivate0 methodorg.apache.logging.log4j.EventLoggerTest.structuredData()
testGoodLevels()PublicPrivate0 methodorg.apache.logging.log4j.LevelTest.testGoodLevels()
testDefault()PublicPrivate0 methodorg.apache.logging.log4j.LevelTest.testDefault()
testGetLogger()PublicPrivate0 methodorg.apache.logging.log4j.LogManagerTest.testGetLogger()
basicFlow()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.basicFlow()
catching()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.catching()
debug()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.debug()
debugObject()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.debugObject()
debugWithParms()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.debugWithParms()
debugWithParmsAndThrowable()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.debugWithParmsAndThrowable()
getFormatterLogger_Class()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getFormatterLogger_Class()
getFormatterLogger_Object()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getFormatterLogger_Object()
getFormatterLogger_String()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getFormatterLogger_String()
getLogger_Class_ParameterizedMessageFactory()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest .getLogger_Class_ParameterizedMessageFactory()
getLogger_Class_StringFormatterMessageFactory()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest .getLogger_Class_StringFormatterMessageFactory()
getLogger_Object_ParameterizedMessageFactory()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest .getLogger_Object_ParameterizedMessageFactory()
getLogger_Object_StringFormatterMessageFactory()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest .getLogger_Object_StringFormatterMessageFactory()
getLogger_String_MessageFactoryMismatch()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest .getLogger_String_MessageFactoryMismatch()
getLogger_String_ParameterizedMessageFactory()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest .getLogger_String_ParameterizedMessageFactory()
getLogger_String_StringFormatterMessageFactory()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest .getLogger_String_StringFormatterMessageFactory()
getLoggerByClass()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getLoggerByClass()
getLoggerByNullClass()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getLoggerByNullClass()
getLoggerByNullObject()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getLoggerByNullObject()
getLoggerByNullString()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getLoggerByNullString()
getLoggerByObject()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getLoggerByObject()
getRootLogger()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getRootLogger()
getStream()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getStream()
getStream_Marker()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.getStream_Marker()
isAllEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isAllEnabled()
isDebugEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isDebugEnabled()
isErrorEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isErrorEnabled()
isFatalEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isFatalEnabled()
isInfoEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isInfoEnabled()
isOffEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isOffEnabled()
isTraceEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isTraceEnabled()
isWarnEnabled()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.isWarnEnabled()
mdc()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.mdc()
printf()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.printf()
setup()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.setup()
structuredData()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.structuredData()
throwing()PublicPrivate0 methodorg.apache.logging.log4j.LoggerTest.throwing()
before()PublicPrivate0 methodorg.apache.logging.log4j.NoopThreadContextTest.before()
after()PublicPrivate0 methodorg.apache.logging.log4j.NoopThreadContextTest.after()
testNoop()PublicPrivate0 methodorg.apache.logging.log4j.NoopThreadContextTest.testNoop()
TestLogger(String,MessageFactory)PublicInternal1 methodorg.apache.logging.log4j.TestLogger.TestLogger(String,MessageFactory)

Statistics

Stat   Visibility   CouldBeDeclared   MethodsCallingMe
Sum:000
Average:000
Minimum:000
Maximum:000
Standard deviation:000
Variance:000
warningCritical    Rule warning: Fields that could have a lower visibility
// <Name>Fields that could have a lower visibility</Name>
warnif count > 0 from f in JustMyCode.Fields where 
  
f.Visibility != f.OptimalVisibility
  
  
select new { f, 
             
f.Visibility , 
             
CouldBeDeclared = f.OptimalVisibility,
             
f.MethodsUsingMe }

320 fields matched

fieldsVisibilityCouldBeDeclaredMethodsUsingMeFull Name
EVENT_MARKERPublicPrivate3 methodsorg.apache.logging.log4j.EventLogger.EVENT_MARKER
ROOT_LOGGER_NAMEPublicPrivate0 methodorg.apache.logging.log4j.LogManager.ROOT_LOGGER_NAME
markerNamePublicInternal3 methodsorg.apache.logging.log4j.AbstractLoggerTest$LogEvent.markerName
dataPublicInternal3 methodsorg.apache.logging.log4j.AbstractLoggerTest$LogEvent.data
tPublicInternal3 methodsorg.apache.logging.log4j.AbstractLoggerTest$LogEvent.t
loggerPublicPrivate1 methodorg.apache.logging.log4j.EventLoggerTest.logger
resultsPublicPrivate3 methodsorg.apache.logging.log4j.EventLoggerTest.results
loggerPublicPrivate21 methodsorg.apache.logging.log4j.LoggerTest.logger
resultsPublicPrivate14 methodsorg.apache.logging.log4j.LoggerTest.results
RECURSION_PREFIXPublicPrivate0 methodorg.apache.logging.log4j.message.ParameterizedMessage.RECURSION_PREFIX
RECURSION_SUFFIXPublicPrivate0 methodorg.apache.logging.log4j.message.ParameterizedMessage.RECURSION_SUFFIX
ERROR_PREFIXPublicPrivate0 methodorg.apache.logging.log4j.message.ParameterizedMessage.ERROR_PREFIX
ERROR_SEPARATORPublicPrivate0 methodorg.apache.logging.log4j.message.ParameterizedMessage.ERROR_SEPARATOR
ERROR_MSG_SEPARATORPublicPrivate0 methodorg.apache.logging.log4j.message.ParameterizedMessage .ERROR_MSG_SEPARATOR
ERROR_SUFFIXPublicPrivate0 methodorg.apache.logging.log4j.message.ParameterizedMessage.ERROR_SUFFIX
TIME_QUALITYPublicPrivate1 methodorg.apache.logging.log4j.message.StructuredDataId.TIME_QUALITY
ORIGINPublicPrivate1 methodorg.apache.logging.log4j.message.StructuredDataId.ORIGIN
METAPublicPrivate1 methodorg.apache.logging.log4j.message.StructuredDataId.META
RESERVEDPublicPrivate0 methodorg.apache.logging.log4j.message.StructuredDataId.RESERVED
arrayPublicPrivate1 methodorg.apache.logging.log4j.message.FormattedMessageTest.array
arrayPublicPrivate1 methodorg.apache.logging.log4j.message.MessageFormatMessageTest.array
arrayPublicPrivate5 methodsorg.apache.logging.log4j.message.MessageFormatsPerfTest.array
arrayPublicPrivate1 methodorg.apache.logging.log4j.message.StringFormattedMessageTest.array
DEFAULT_DATE_TIME_FORMATProtectedPrivate0 methodorg.apache.logging.log4j.simple.SimpleLoggerContext .DEFAULT_DATE_TIME_FORMAT
SYSTEM_PREFIXProtectedPrivate0 methodorg.apache.logging.log4j.simple.SimpleLoggerContext.SYSTEM_PREFIX
FLOW_MARKERPublicPrivate1 methodorg.apache.logging.log4j.spi.AbstractLogger.FLOW_MARKER
ENTRY_MARKERPublicPrivate2 methodsorg.apache.logging.log4j.spi.AbstractLogger.ENTRY_MARKER
EXIT_MARKERPublicPrivate2 methodsorg.apache.logging.log4j.spi.AbstractLogger.EXIT_MARKER
EXCEPTION_MARKERPublicPrivate1 methodorg.apache.logging.log4j.spi.AbstractLogger.EXCEPTION_MARKER
THROWING_MARKERPublicPrivate2 methodsorg.apache.logging.log4j.spi.AbstractLogger.THROWING_MARKER
CATCHING_MARKERPublicPrivate2 methodsorg.apache.logging.log4j.spi.AbstractLogger.CATCHING_MARKER
DEFAULT_MESSAGE_FACTORY_CLASSPublicPrivate3 methodsorg.apache.logging.log4j.spi.AbstractLogger .DEFAULT_MESSAGE_FACTORY_CLASS
loggerProtectedPrivate7 methodsorg.apache.logging.log4j.spi.AbstractLoggerWrapper.logger
INHERITABLE_MAPPublicPrivate0 methodorg.apache.logging.log4j.spi.DefaultThreadContextMap.INHERITABLE_MAP
streamPublicPrivate37 methodsorg.apache.logging.log4j.spi.LoggerStream.stream
MAX_STATUS_ENTRIESPublicPrivate0 methodorg.apache.logging.log4j.status.StatusLogger.MAX_STATUS_ENTRIES
loggerPublicPrivate2 methodsorg.apache.logging.log4j.FormatterLoggerManualExample.logger
loggerConfigPublicInternal13 methodsorg.apache.logging.log4j.core.Logger$PrivateConfig.loggerConfig
configPublicInternal14 methodsorg.apache.logging.log4j.core.Logger$PrivateConfig.config
PROPERTY_CONFIGPublicPrivate0 methodorg.apache.logging.log4j.core.LoggerContext.PROPERTY_CONFIG
logger1PublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelJsonTest.logger1
logger2PublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelJsonTest.logger2
logger3PublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelJsonTest.logger3
testMarkerPublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelJsonTest.testMarker
logger1PublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelTest.logger1
logger2PublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelTest.logger2
logger3PublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelTest.logger3
testMarkerPublicPrivate2 methodsorg.apache.logging.log4j.core.AppenderRefLevelTest.testMarker
loggerPublicPrivate11 methodsorg.apache.logging.log4j.core.LoggerTest.logger
loggerPublicPrivate2 methodsorg.apache.logging.log4j.core.LoggerUpdateTest.logger
loggerPublicPrivate10 methodsorg.apache.logging.log4j.core.StrictXMLConfigTest.logger
UTF_8PublicInternal12 methodsorg.apache.logging.log4j.core.helpers.Charsets.UTF_8
PROPERTY_NAMEPublicPrivate0 methodorg.apache.logging.log4j.core.helpers.ClockFactory.PROPERTY_NAME
LOG4J_LOG_EVENT_FACTORYPublicPrivate0 methodorg.apache.logging.log4j.core.helpers.Constants .LOG4J_LOG_EVENT_FACTORY
LOG4J_CONTEXT_SELECTORPublicPrivate0 methodorg.apache.logging.log4j.core.helpers.Constants.LOG4J_CONTEXT_SELECTOR
LOG4J_DEFAULT_STATUS_LEVELPublicPrivate0 methodorg.apache.logging.log4j.core.helpers.Constants .LOG4J_DEFAULT_STATUS_LEVEL
JNDI_CONTEXT_NAMEPublicPrivate0 methodorg.apache.logging.log4j.core.helpers.Constants.JNDI_CONTEXT_NAME
MILLIS_IN_SECONDSPublicPrivate0 methodorg.apache.logging.log4j.core.helpers.Constants.MILLIS_IN_SECONDS
UUID_SEQUENCEPublicPrivate0 methodorg.apache.logging.log4j.core.helpers.UUIDUtil.UUID_SEQUENCE
THREAD_CONTEXTPublicInternal24 methodsorg.apache.logging.log4j.core.impl.ContextAnchor.THREAD_CONTEXT
JAVA_7U25_COMPENSATION_OFFSETPublicInternal3 methodsorg.apache.logging.log4j.core.impl.ReflectiveCallerClassUtility .JAVA_7U25_COMPENSATION_OFFSET
DEFAULTProtectedPrivate2 methodsorg.apache.logging.log4j.core.impl.ThrowableFormatOptions.DEFAULT
CLASS_NAMEPublicPrivate0 methodorg.apache.logging.log4j.core.impl.ThrowableFormatOptions.CLASS_NAME
METHOD_NAMEPublicPrivate0 methodorg.apache.logging.log4j.core.impl.ThrowableFormatOptions.METHOD_NAME
LINE_NUMBERPublicPrivate0 methodorg.apache.logging.log4j.core.impl.ThrowableFormatOptions.LINE_NUMBER
FILE_NAMEPublicPrivate0 methodorg.apache.logging.log4j.core.impl.ThrowableFormatOptions.FILE_NAME
MESSAGEPublicPrivate0 methodorg.apache.logging.log4j.core.impl.ThrowableFormatOptions.MESSAGE
LOCALIZED_MESSAGEPublicPrivate0 methodorg.apache.logging.log4j.core.impl.ThrowableFormatOptions .LOCALIZED_MESSAGE
DOMAINPublicPrivate0 methodorg.apache.logging.log4j.core.jmx.Server.DOMAIN
executorPublicPrivate2 methodsorg.apache.logging.log4j.core.jmx.Server.executor
headerProtectedPrivate2 methodsorg.apache.logging.log4j.core.layout.AbstractLayout.header
footerProtectedPrivate2 methodsorg.apache.logging.log4j.core.layout.AbstractLayout.footer
DEFAULT_CONVERSION_PATTERNPublicPrivate0 methodorg.apache.logging.log4j.core.layout.PatternLayout .DEFAULT_CONVERSION_PATTERN
TTCC_CONVERSION_PATTERNPublicPrivate0 methodorg.apache.logging.log4j.core.layout.PatternLayout .TTCC_CONVERSION_PATTERN
SIMPLE_CONVERSION_PATTERNPublicPrivate0 methodorg.apache.logging.log4j.core.layout.PatternLayout .SIMPLE_CONVERSION_PATTERN
KEYPublicPrivate0 methodorg.apache.logging.log4j.core.layout.PatternLayout.KEY
DEFAULT_ENTERPRISE_NUMBERPublicPrivate0 methodorg.apache.logging.log4j.core.layout.RFC5424Layout .DEFAULT_ENTERPRISE_NUMBER
DEFAULT_IDPublicPrivate0 methodorg.apache.logging.log4j.core.layout.RFC5424Layout.DEFAULT_ID
NEWLINE_PATTERNPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.RFC5424Layout.NEWLINE_PATTERN
PARAM_VALUE_ESCAPE_PATTERNPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.RFC5424Layout .PARAM_VALUE_ESCAPE_PATTERN
DEFAULT_MDCIDProtectedPrivate0 methodorg.apache.logging.log4j.core.layout.RFC5424Layout.DEFAULT_MDCID
NEWLINE_PATTERNPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.SyslogLayout.NEWLINE_PATTERN
ctxPublicPrivate1 methodorg.apache.logging.log4j.core.layout.HTMLLayoutTest.ctx
rootPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.HTMLLayoutTest.root
cfPublicPrivate3 methodsorg.apache.logging.log4j.core.layout.HTMLLayoutTest.cf
cfPublicPrivate3 methodsorg.apache.logging.log4j.core.layout.JSONLayoutTest.cf
ctxPublicPrivate1 methodorg.apache.logging.log4j.core.layout.JSONLayoutTest.ctx
rootPublicPrivate3 methodsorg.apache.logging.log4j.core.layout.JSONLayoutTest.root
cfPublicPrivate3 methodsorg.apache.logging.log4j.core.layout.PatternLayoutTest.cf
msgPatternPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.PatternLayoutTest.msgPattern
OUTPUT_FILEPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.PatternLayoutTest.OUTPUT_FILE
regexPatternPublicPrivate0 methodorg.apache.logging.log4j.core.layout.PatternLayoutTest.regexPattern
WITNESS_FILEPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.PatternLayoutTest.WITNESS_FILE
ctxPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.PatternLayoutTest.ctx
rootPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.PatternLayoutTest.root
ctxPublicPrivate1 methodorg.apache.logging.log4j.core.layout.RFC5424LayoutTest.ctx
rootPublicPrivate9 methodsorg.apache.logging.log4j.core.layout.RFC5424LayoutTest.root
cfPublicPrivate3 methodsorg.apache.logging.log4j.core.layout.RFC5424LayoutTest.cf
ctxPublicPrivate1 methodorg.apache.logging.log4j.core.layout.SerializedLayoutTest.ctx
rootPublicPrivate2 methodsorg.apache.logging.log4j.core.layout.SerializedLayoutTest.root

Statistics

Stat   Visibility   CouldBeDeclared   MethodsUsingMe
Sum:000
Average:000
Minimum:000
Maximum:000
Standard deviation:000
Variance:000
warningCritical    Rule warning: Fields should be declared as private
// <Name>Fields should be declared as private</Name>
warnif count > 0 from f in Application.Fields where 
 
!f.IsPrivate && 

 
// These conditions filter cases where fields 
 // doesn't represent state that should be encapsulated. 
 !f.IsGeneratedByCompiler && 
 
!f.IsSpecialName && 
 
!f.IsInitOnly && 
 
!f.IsLiteral && 
 
!f.IsEnumValue
select new { f, f.SizeOfInst }

140 fields matched

fieldsSize of instanceFull Name
OFFN/Aorg.apache.logging.log4j.Level.OFF
FATALN/Aorg.apache.logging.log4j.Level.FATAL
ERRORN/Aorg.apache.logging.log4j.Level.ERROR
WARNN/Aorg.apache.logging.log4j.Level.WARN
INFON/Aorg.apache.logging.log4j.Level.INFO
DEBUGN/Aorg.apache.logging.log4j.Level.DEBUG
TRACEN/Aorg.apache.logging.log4j.Level.TRACE
ALLN/Aorg.apache.logging.log4j.Level.ALL
markerName4org.apache.logging.log4j.AbstractLoggerTest$LogEvent.markerName
data4org.apache.logging.log4j.AbstractLoggerTest$LogEvent.data
t4org.apache.logging.log4j.AbstractLoggerTest$LogEvent.t
logger4org.apache.logging.log4j.EventLoggerTest.logger
results4org.apache.logging.log4j.EventLoggerTest.results
logger4org.apache.logging.log4j.LoggerTest.logger
results4org.apache.logging.log4j.LoggerTest.results
array4org.apache.logging.log4j.message.FormattedMessageTest.array
array4org.apache.logging.log4j.message.MessageFormatMessageTest.array
array4org.apache.logging.log4j.message.MessageFormatsPerfTest.array
array4org.apache.logging.log4j.message.StringFormattedMessageTest.array
OsgiFrameworkN/Aorg.apache.logging.log4j.osgi.AbstractLoadBundleTest.OsgiFramework
loggerN/Aorg.apache.logging.log4j.FormatterLoggerManualExample.logger
config4org.apache.logging.log4j.core.Logger.config
logger14org.apache.logging.log4j.core.AppenderRefLevelJsonTest.logger1
logger24org.apache.logging.log4j.core.AppenderRefLevelJsonTest.logger2
logger34org.apache.logging.log4j.core.AppenderRefLevelJsonTest.logger3
testMarker4org.apache.logging.log4j.core.AppenderRefLevelJsonTest.testMarker
logger14org.apache.logging.log4j.core.AppenderRefLevelTest.logger1
logger24org.apache.logging.log4j.core.AppenderRefLevelTest.logger2
logger34org.apache.logging.log4j.core.AppenderRefLevelTest.logger3
testMarker4org.apache.logging.log4j.core.AppenderRefLevelTest.testMarker
logger4org.apache.logging.log4j.core.LoggerTest.logger
logger4org.apache.logging.log4j.core.LoggerUpdateTest.logger
logger4org.apache.logging.log4j.core.StrictXMLConfigTest.logger
header4org.apache.logging.log4j.core.layout.AbstractLayout.header
footer4org.apache.logging.log4j.core.layout.AbstractLayout.footer
ctx4org.apache.logging.log4j.core.layout.HTMLLayoutTest.ctx
root4org.apache.logging.log4j.core.layout.HTMLLayoutTest.root
cfN/Aorg.apache.logging.log4j.core.layout.HTMLLayoutTest.cf
cfN/Aorg.apache.logging.log4j.core.layout.JSONLayoutTest.cf
ctx4org.apache.logging.log4j.core.layout.JSONLayoutTest.ctx
root4org.apache.logging.log4j.core.layout.JSONLayoutTest.root
cfN/Aorg.apache.logging.log4j.core.layout.PatternLayoutTest.cf
msgPatternN/Aorg.apache.logging.log4j.core.layout.PatternLayoutTest.msgPattern
OUTPUT_FILEN/Aorg.apache.logging.log4j.core.layout.PatternLayoutTest.OUTPUT_FILE
WITNESS_FILEN/Aorg.apache.logging.log4j.core.layout.PatternLayoutTest.WITNESS_FILE
ctx4org.apache.logging.log4j.core.layout.PatternLayoutTest.ctx
root4org.apache.logging.log4j.core.layout.PatternLayoutTest.root
ctx4org.apache.logging.log4j.core.layout.RFC5424LayoutTest.ctx
root4org.apache.logging.log4j.core.layout.RFC5424LayoutTest.root
cfN/Aorg.apache.logging.log4j.core.layout.RFC5424LayoutTest.cf
ctx4org.apache.logging.log4j.core.layout.SerializedLayoutTest.ctx
root4org.apache.logging.log4j.core.layout.SerializedLayoutTest.root
cfN/Aorg.apache.logging.log4j.core.layout.SerializedLayoutTest.cf
ctx4org.apache.logging.log4j.core.layout.SyslogLayoutTest.ctx
root4org.apache.logging.log4j.core.layout.SyslogLayoutTest.root
cfN/Aorg.apache.logging.log4j.core.layout.SyslogLayoutTest.cf
cfN/Aorg.apache.logging.log4j.core.layout.XMLLayoutTest.cf
ctx4org.apache.logging.log4j.core.layout.XMLLayoutTest.ctx
root4org.apache.logging.log4j.core.layout.XMLLayoutTest.root
logger4org.apache.logging.log4j.core.pattern.ExtendedThrowableTest.logger
OUTPUT_FILEN/Aorg.apache.logging.log4j.core.pattern.PatternParserTest.OUTPUT_FILE
WITNESS_FILEN/Aorg.apache.logging.log4j.core.pattern.PatternParserTest.WITNESS_FILE
ctx4org.apache.logging.log4j.core.pattern.PatternParserTest.ctx
root4org.apache.logging.log4j.core.pattern.PatternParserTest.root
logger4org.apache.logging.log4j.core.pattern.RegexReplacementTest.logger
logger24org.apache.logging.log4j.core.pattern.RegexReplacementTest.logger2
logger4org.apache.logging.log4j.core.pattern.RootThrowableTest.logger
logger4org.apache.logging.log4j.core.pattern.StyleConverterTest.logger
logger4org.apache.logging.log4j.core.pattern.ThrowableTest.logger
CONTEXT_ATTRIBUTE0org.apache.logging.log4j.core.web.Log4jWebInitializerImpl .CONTEXT_ATTRIBUTE
SUPPORT_ATTRIBUTE0org.apache.logging.log4j.core.web.Log4jWebInitializerImpl .SUPPORT_ATTRIBUTE
count4org.apache.logging.log4j.core.appender.AbstractManager.count
logger4org.apache.logging.log4j.core.appender.FailoverAppenderTest.logger
onceLogger4org.apache.logging.log4j.core.appender.FailoverAppenderTest.onceLogger
context4org.apache.logging.log4j.core.appender.SocketAppenderTest.context
root4org.apache.logging.log4j.core.appender.SocketAppenderTest.root
ctx4org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.ctx
syslogServer4org.apache.logging.log4j.core.appender.SyslogAppenderTestBase .syslogServer
appender4org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.appender
root4org.apache.logging.log4j.core.appender.SyslogAppenderTestBase.root
sentMessages4org.apache.logging.log4j.core.appender.SyslogAppenderTestBase .sentMessages
includeNewLine4org.apache.logging.log4j.core.appender.SyslogAppenderTestBase .includeNewLine
logger4org.apache.logging.log4j.core.appender.rolling .AbstractRollingAppenderSizeTest.logger
logger4org.apache.logging.log4j.core.appender.rolling .RollingAppenderTimeAndSizeTest.logger
logger4org.apache.logging.log4j.core.appender.rolling.RollingAppenderTimeTest .logger
logger4org.apache.logging.log4j.core.appender.rolling .RollingAppenderUncompressedTest.logger
verboseN/Aorg.apache.logging.log4j.core.async.perftest.PerfTest.verbose
throughputN/Aorg.apache.logging.log4j.core.async.perftest.PerfTest.throughput
_stats4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._stats
_count4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._count
_average4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._average
_pct994org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._pct99
_pct99_994org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._pct99_99
_latencyRowCount4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._latencyRowCount
_throughputRowCount4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._throughputRowCount
expected4org.apache.logging.log4j.core.async.perftest.PerfTestResultFormatter$1 .expected
throughput4org.apache.logging.log4j.core.async.perftest .PerfTestResultFormatter$Stats.throughput
avgLatency4org.apache.logging.log4j.core.async.perftest .PerfTestResultFormatter$Stats.avgLatency
latency99Pct4org.apache.logging.log4j.core.async.perftest .PerfTestResultFormatter$Stats.latency99Pct
latency99_99Pct4org.apache.logging.log4j.core.async.perftest .PerfTestResultFormatter$Stats.latency99_99Pct

Statistics

Stat   Size of instance
Sum:424
Average:3.93
Minimum:0
Maximum:4
Standard deviation:0.54
Variance:0.29
warningCritical    Rule warning: Constructors of abstract classes should be declared as protected or private
// <Name>Constructors of abstract classes should be declared as protected or private</Name>
// Constructors of an abstract class can only be accessed from this class and derived class.
// Declaring such a constructor with another visibility level is useless and potentially misleading.

warnif count > 0
from t in Application.Types where 
  
t.IsClass && 
  
t.IsAbstract
let ctors = t.Constructors.Where(c => !c.IsProtected && !c.IsPrivate)
where ctors.Count() > 0
select new { t, ctors }

// Notice that if a constructor of an abstract class is declared as private,
// it can only be accessed from derived classes nested in the abstract class.

25 types matched

typesctorsFull Name
AbstractMessageFactory1 methodorg.apache.logging.log4j.message.AbstractMessageFactory
AbstractLogger3 methodsorg.apache.logging.log4j.spi.AbstractLogger
AbstractLoadBundleTest1 methodorg.apache.logging.log4j.osgi.AbstractLoadBundleTest
AbstractEquinoxLoadBundleTest1 methodorg.apache.logging.log4j.osgi.equinox.AbstractEquinoxLoadBundleTest
AbstractFelixLoadBundleTest1 methodorg.apache.logging.log4j.osgi.felix.AbstractFelixLoadBundleTest
AbstractLayout<T>1 methodorg.apache.logging.log4j.core.layout.AbstractLayout
DatePatternConverter$Formatter1 methodorg.apache.logging.log4j.core.pattern.DatePatternConverter$Formatter
NameAbbreviator1 methodorg.apache.logging.log4j.core.pattern.NameAbbreviator
AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender1 methodorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender
AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager1 methodorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager
AbstractJdbcAppenderTest1 methodorg.apache.logging.log4j.core.appender.db.jdbc .AbstractJdbcAppenderTest
BasicLogEventEntity2 methodsorg.apache.logging.log4j.core.appender.db.jpa.BasicLogEventEntity
AbstractJpaAppenderTest1 methodorg.apache.logging.log4j.core.appender.db.jpa.AbstractJpaAppenderTest
AbstractRolloverStrategy1 methodorg.apache.logging.log4j.core.appender.rolling .AbstractRolloverStrategy
ConfigurationFactory1 methodorg.apache.logging.log4j.core.config.ConfigurationFactory
ResolverUtil$ClassTest1 methodorg.apache.logging.log4j.core.config.plugins.ResolverUtil$ClassTest
ResolverUtil$ResourceTest1 methodorg.apache.logging.log4j.core.config.plugins.ResolverUtil$ResourceTest
AbstractJMSManager1 methodorg.apache.logging.log4j.core.net.AbstractJMSManager
AbstractJMSReceiver1 methodorg.apache.logging.log4j.core.net.AbstractJMSReceiver
AbstractSocketManager1 methodorg.apache.logging.log4j.core.net.AbstractSocketManager
Layout1 methodorg.apache.log4j.Layout
Filter1 methodorg.apache.log4j.spi.Filter
AbstractFlumeManager1 methodorg.apache.logging.log4j.flume.appender.AbstractFlumeManager
ExceptionAwareTagSupport1 methodorg.apache.logging.log4j.taglib.ExceptionAwareTagSupport
LoggingMessageTagSupport1 methodorg.apache.logging.log4j.taglib.LoggingMessageTagSupport

Statistics

Stat   ctors
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0

130
Purity - Immutability - Side-Effects  

warningCritical    Rule warning: Fields should be marked as ReadOnly when possible
// <Name>Fields should be marked as ReadOnly when possible</Name>
warnif count > 0 
from f in JustMyCode.Fields where 
   
f.IsImmutable && 
  
!f.IsInitOnly &&
  
!f.IsGeneratedByCompiler 
select new { f, f.SizeOfInst } 

// A field that matches the condition IsImmutable 
// is a field that is assigned only by constructors 
// of its class.
// For an instance field, this means its value 
// will remain constant throught the lifetime 
// of the object.
// For a static field, this means its value will 
// remain constant throught the lifetime of the 
// program.
// In both cases, such field can safely be marked 



131 fields matched

fieldsSize of instanceFull Name
loggerWrapperN/Aorg.apache.logging.log4j.EventLogger.loggerWrapper
factoryN/Aorg.apache.logging.log4j.LogManager.factory
markerMapN/Aorg.apache.logging.log4j.MarkerManager.markerMap
allN/Aorg.apache.logging.log4j.ThreadContext.all
useMapN/Aorg.apache.logging.log4j.ThreadContext.useMap
useStackN/Aorg.apache.logging.log4j.ThreadContext.useStack
contextMapN/Aorg.apache.logging.log4j.ThreadContext.contextMap
contextStackN/Aorg.apache.logging.log4j.ThreadContext.contextStack
tN/Aorg.apache.logging.log4j.AbstractLoggerTest.t
objN/Aorg.apache.logging.log4j.AbstractLoggerTest.obj
patternN/Aorg.apache.logging.log4j.AbstractLoggerTest.pattern
p1N/Aorg.apache.logging.log4j.AbstractLoggerTest.p1
p2N/Aorg.apache.logging.log4j.AbstractLoggerTest.p2
simpleN/Aorg.apache.logging.log4j.AbstractLoggerTest.simple
objectN/Aorg.apache.logging.log4j.AbstractLoggerTest.object
paramN/Aorg.apache.logging.log4j.AbstractLoggerTest.param
markerN/Aorg.apache.logging.log4j.AbstractLoggerTest.marker
eventsN/Aorg.apache.logging.log4j.AbstractLoggerTest.events
contextN/Aorg.apache.logging.log4j.TestLoggerContextFactory.context
NANO_PER_SECONDN/Aorg.apache.logging.log4j.Timer.NANO_PER_SECOND
NANO_PER_MINUTEN/Aorg.apache.logging.log4j.Timer.NANO_PER_MINUTE
NANO_PER_HOURN/Aorg.apache.logging.log4j.Timer.NANO_PER_HOUR
argArray4org.apache.logging.log4j.message.FormattedMessage.argArray
argArray4org.apache.logging.log4j.message.MessageFormatMessage.argArray
throwable4org.apache.logging.log4j.message.MessageFormatMessage.throwable
argArray4org.apache.logging.log4j.message.StringFormattedMessage.argArray
throwable4org.apache.logging.log4j.message.StringFormattedMessage.throwable
threads4org.apache.logging.log4j.message.ThreadDumpMessage.threads
formattedMessage4org.apache.logging.log4j.message.ThreadDumpMessage.formattedMessage
dateFormatter4org.apache.logging.log4j.simple.SimpleLogger.dateFormatter
contextN/Aorg.apache.logging.log4j.simple.SimpleLoggerContextFactory.context
stackN/Aorg.apache.logging.log4j.spi.DefaultThreadContextStack.stack
level4org.apache.logging.log4j.spi.LoggerStreamTest.level
logMessage4org.apache.logging.log4j.spi.LoggerStreamTest.logMessage
configN/Aorg.apache.logging.log4j.core.LateConfigTest.config
appN/Aorg.apache.logging.log4j.core.LateConfigTest.app
appN/Aorg.apache.logging.log4j.core.ShutdownDisabledTest.app
loggerN/Aorg.apache.logging.log4j.core.SimplePerfTest.logger
lvl4org.apache.logging.log4j.core.SimplePerfTest.lvl
randN/Aorg.apache.logging.log4j.core.SimplePerfTest.rand
RAND_SIZEN/Aorg.apache.logging.log4j.core.SimplePerfTest.RAND_SIZE
valuesN/Aorg.apache.logging.log4j.core.SimplePerfTest.values
loggerN/Aorg.apache.logging.log4j.core.ThreadedPerfTest.logger
lvl4org.apache.logging.log4j.core.ThreadedPerfTest.lvl
lvl4org.apache.logging.log4j.core.ThreadedTest.lvl
NANO_PER_SECONDN/Aorg.apache.logging.log4j.core.Timer.NANO_PER_SECOND
NANO_PER_MINUTEN/Aorg.apache.logging.log4j.core.Timer.NANO_PER_MINUTE
NANO_PER_HOURN/Aorg.apache.logging.log4j.core.Timer.NANO_PER_HOUR
levelMap4org.apache.logging.log4j.core.filter.DynamicThresholdFilter.levelMap
defaultThreshold4org.apache.logging.log4j.core.filter.DynamicThresholdFilter .defaultThreshold
instanceN/Aorg.apache.logging.log4j.core.helpers.CachedClock.instance
instanceN/Aorg.apache.logging.log4j.core.helpers.CoarseCachedClock.instance
ignoreTCLN/Aorg.apache.logging.log4j.core.helpers.Loader.ignoreTCL
countN/Aorg.apache.logging.log4j.core.helpers.UUIDUtil.count
uuidSequenceN/Aorg.apache.logging.log4j.core.helpers.UUIDUtil.uuidSequence
leastN/Aorg.apache.logging.log4j.core.helpers.UUIDUtil.least
selector4org.apache.logging.log4j.core.impl.Log4jContextFactory.selector
headerN/Aorg.apache.logging.log4j.core.layout.SerializedLayout.header
rawOption4org.apache.logging.log4j.core.pattern.ThrowablePatternConverter .rawOption
msgPatternN/Aorg.apache.logging.log4j.core.pattern.PatternParserTest.msgPattern
customPatternN/Aorg.apache.logging.log4j.core.pattern.PatternParserTest.customPattern
nestedPatternHighlightN/Aorg.apache.logging.log4j.core.pattern.PatternParserTest .nestedPatternHighlight
profilerN/Aorg.apache.logging.log4j.core.util.Profiler.profiler
profilingModesN/Aorg.apache.logging.log4j.core.util.Profiler.profilingModes
controllerClazzN/Aorg.apache.logging.log4j.core.util.Profiler.controllerClazz
isAppenderThreadN/Aorg.apache.logging.log4j.core.appender.AsyncAppender.isAppenderThread
factoryN/Aorg.apache.logging.log4j.core.appender.ConsoleAppender.factory
advertisement4org.apache.logging.log4j.core.appender.FileAppender.advertisement
advertisement4org.apache.logging.log4j.core.appender.RandomAccessFileAppender .advertisement
advertisement4org.apache.logging.log4j.core.appender.RollingFileAppender .advertisement
advertisement4org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender .advertisement
advertisement4org.apache.logging.log4j.core.appender.SocketAppender.advertisement
listN/Aorg.apache.logging.log4j.core.appender.SocketAppenderTest.list
mapN/Aorg.apache.logging.log4j.core.appender.rewrite.MapRewritePolicyTest .map
JVM_START_TIMEN/Aorg.apache.logging.log4j.core.appender.rolling .OnStartupTriggeringPolicy.JVM_START_TIME
frequency4org.apache.logging.log4j.core.appender.rolling.PatternProcessor .frequency
factoryN/Aorg.apache.logging.log4j.core.appender.rolling.RollingFileManager .factory
clockN/Aorg.apache.logging.log4j.core.async.AsyncLogger.clock
executorN/Aorg.apache.logging.log4j.core.async.AsyncLogger.executor
threadFactoryN/Aorg.apache.logging.log4j.core.async.AsyncLoggerConfigHelper .threadFactory
isAppenderThreadN/Aorg.apache.logging.log4j.core.async.AsyncLoggerConfigHelper .isAppenderThread
_averageOpsPerSec4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._averageOpsPerSec
properties4org.apache.logging.log4j.core.config.BaseConfiguration.properties
root4org.apache.logging.log4j.core.config.JSONConfiguration.root
dependenciesN/Aorg.apache.logging.log4j.core.config.JSONConfigurationFactory .dependencies
isActive4org.apache.logging.log4j.core.config.JSONConfigurationFactory.isActive
LOG_EVENT_FACTORYN/Aorg.apache.logging.log4j.core.config.LoggerConfig.LOG_EVENT_FACTORY
appenderRefs4org.apache.logging.log4j.core.config.LoggerConfig.appenderRefs
includeLocation4org.apache.logging.log4j.core.config.LoggerConfig.includeLocation
strict4org.apache.logging.log4j.core.config.XMLConfiguration.strict
schema4org.apache.logging.log4j.core.config.XMLConfiguration.schema
propertiesN/Aorg.apache.logging.log4j.core.config.InMemoryAdvertiser.properties
jmDNSN/Aorg.apache.logging.log4j.core.net.MulticastDNSAdvertiser.jmDNS
sslConfig4org.apache.logging.log4j.core.net.TLSSocketManager.sslConfig
keyStoreType4org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration .keyStoreType
keyStoreConfig4org.apache.logging.log4j.core.net.ssl.SSLConfiguration.keyStoreConfig
trustStoreConfig4org.apache.logging.log4j.core.net.ssl.SSLConfiguration .trustStoreConfig
trustStoreType4org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration .trustStoreType
buffer4org.apache.logging.log4j.core.net.ssl .LegacyBSDTLSSyslogInputStreamReader.buffer
messageBuffer4org.apache.logging.log4j.core.net.ssl.TLSSyslogInputStreamReader .messageBuffer

Statistics

Stat   Size of instance
Sum:212
Average:4
Minimum:4
Maximum:4
Standard deviation:0
Variance:0
warningCritical    Rule warning: Avoid static fields with a mutable field type
// <Name>Avoid static fields with a mutable field type</Name>
warnif count > 0
from f in Application.Fields
where f.IsStatic && !f.IsEnumValue && !f.IsGeneratedByCompiler && !f.IsLiteral
let fieldType = f.FieldType
where fieldType != null && 
     
!fieldType.IsThirdParty && 
     
!fieldType.IsInterface && 
     
!fieldType.IsImmutable
select new { f, 
             
mutableFieldType = fieldType , 
             
isFieldImmutable = f.IsImmutable, 
             
isFieldIsReadOnly = f.IsInitOnly }

// As explained in this blog post
// http://codebetter.com/patricksmacchia/2011/05/04/back-to-basics-usage-of-static-members
// static fields should be used to hold only constant and immutable states.

227 fields matched

fieldsmutableFieldTypeisFieldImmutableisFieldIsReadOnlyFull Name
loggerWrapperAbstractLoggerWrapperTrueFalseorg.apache.logging.log4j.EventLogger.loggerWrapper
OFFLevelFalseFalseorg.apache.logging.log4j.Level.OFF
FATALLevelFalseFalseorg.apache.logging.log4j.Level.FATAL
ERRORLevelFalseFalseorg.apache.logging.log4j.Level.ERROR
WARNLevelFalseFalseorg.apache.logging.log4j.Level.WARN
INFOLevelFalseFalseorg.apache.logging.log4j.Level.INFO
DEBUGLevelFalseFalseorg.apache.logging.log4j.Level.DEBUG
TRACELevelFalseFalseorg.apache.logging.log4j.Level.TRACE
ALLLevelFalseFalseorg.apache.logging.log4j.Level.ALL
currentLevelLevelFalseFalseorg.apache.logging.log4j.AbstractLoggerTest.currentLevel
eventsAbstractLoggerTest$LogEventTrueFalseorg.apache.logging.log4j.AbstractLoggerTest.events
INSTANCEParameterizedMessageFactoryTrueTrueorg.apache.logging.log4j.message.ParameterizedMessageFactory.INSTANCE
INSTANCEStringFormatterMessageFactoryTrueTrueorg.apache.logging.log4j.message.StringFormatterMessageFactory .INSTANCE
TIME_QUALITYStructuredDataIdTrueTrueorg.apache.logging.log4j.message.StructuredDataId.TIME_QUALITY
ORIGINStructuredDataIdTrueTrueorg.apache.logging.log4j.message.StructuredDataId.ORIGIN
METAStructuredDataIdTrueTrueorg.apache.logging.log4j.message.StructuredDataId.META
PROPSPropertiesUtilTrueTrueorg.apache.logging.log4j.status.StatusLogger.PROPS
STATUS_LOGGERStatusLoggerTrueTrueorg.apache.logging.log4j.status.StatusLogger.STATUS_LOGGER
LOG4J_PROPERTIESPropertiesUtilTrueTrueorg.apache.logging.log4j.util.PropertiesUtil.LOG4J_PROPERTIES
LOGGERStatusLoggerTrueTrueorg.apache.logging.log4j.core.LoggerContext.LOGGER
app1ListAppenderFalseFalseorg.apache.logging.log4j.core.AppenderRefLevelJsonTest.app1
app2ListAppenderFalseFalseorg.apache.logging.log4j.core.AppenderRefLevelJsonTest.app2
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.AppenderRefLevelJsonTest.ctx
app1ListAppenderFalseFalseorg.apache.logging.log4j.core.AppenderRefLevelTest.app1
app2ListAppenderFalseFalseorg.apache.logging.log4j.core.AppenderRefLevelTest.app2
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.AppenderRefLevelTest.ctx
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.ExtendedLevelTest.ctx
list1ListAppenderFalseFalseorg.apache.logging.log4j.core.ExtendedLevelTest.list1
list2ListAppenderFalseFalseorg.apache.logging.log4j.core.ExtendedLevelTest.list2
appListAppenderFalseFalseorg.apache.logging.log4j.core.FileConfigTest.app
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.FileConfigTest.ctx
appListAppenderFalseFalseorg.apache.logging.log4j.core.HostNameTest.app
hostListAppenderFalseFalseorg.apache.logging.log4j.core.HostNameTest.host
hostFileRollingFileAppenderFalseFalseorg.apache.logging.log4j.core.HostNameTest.hostFile
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.HostNameTest.ctx
appListAppenderTrueFalseorg.apache.logging.log4j.core.LateConfigTest.app
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.LateConfigTest.ctx
appListAppenderFalseFalseorg.apache.logging.log4j.core.LogEventFactoryTest.app
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.LogEventFactoryTest.ctx
fileAppFileAppenderFalseFalseorg.apache.logging.log4j.core.LoggerDateTest.fileApp
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.LoggerDateTest.ctx
appListAppenderFalseFalseorg.apache.logging.log4j.core.LoggerTest.app
hostListAppenderFalseFalseorg.apache.logging.log4j.core.LoggerTest.host
noThrownListAppenderFalseFalseorg.apache.logging.log4j.core.LoggerTest.noThrown
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.LoggerTest.ctx
appListAppenderFalseFalseorg.apache.logging.log4j.core.LoggerUpdateTest.app
hostListAppenderFalseFalseorg.apache.logging.log4j.core.LoggerUpdateTest.host
noThrownListAppenderFalseFalseorg.apache.logging.log4j.core.LoggerUpdateTest.noThrown
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.LoggerUpdateTest.ctx
appListAppenderTrueFalseorg.apache.logging.log4j.core.ShutdownDisabledTest.app
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.ShutdownDisabledTest.ctx
appListAppenderFalseFalseorg.apache.logging.log4j.core.StrictXMLConfigTest.app
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.StrictXMLConfigTest.ctx
appListAppenderFalseFalseorg.apache.logging.log4j.core.filter.BurstFilterTest.app
filterBurstFilterFalseFalseorg.apache.logging.log4j.core.filter.BurstFilterTest.filter
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.filter.BurstFilterTest.ctx
instanceCachedClockTrueFalseorg.apache.logging.log4j.core.helpers.CachedClock.instance
LOGGERStatusLoggerTrueTrueorg.apache.logging.log4j.core.helpers.ClockFactory.LOGGER
instanceCoarseCachedClockTrueFalseorg.apache.logging.log4j.core.helpers.CoarseCachedClock.instance
LOGGERStatusLoggerTrueTrueorg.apache.logging.log4j.core.impl.Log4jContextFactory.LOGGER
DEFAULTThrowableFormatOptionsTrueTrueorg.apache.logging.log4j.core.impl.ThrowableFormatOptions.DEFAULT
SECURITY_MANAGERThrowableProxy$PrivateSecurityManagerTrueTrueorg.apache.logging.log4j.core.impl.ThrowableProxy.SECURITY_MANAGER
LOGGERStatusLoggerTrueTrueorg.apache.logging.log4j.core.jmx.LoggerContextAdmin.LOGGER
LOGGERStatusLoggerTrueTrueorg.apache.logging.log4j.core.jmx.Server.LOGGER
cfConfigurationFactoryFalseFalseorg.apache.logging.log4j.core.layout.HTMLLayoutTest.cf
cfConfigurationFactoryFalseFalseorg.apache.logging.log4j.core.layout.JSONLayoutTest.cf
cfConfigurationFactoryFalseFalseorg.apache.logging.log4j.core.layout.PatternLayoutTest.cf
cfConfigurationFactoryFalseFalseorg.apache.logging.log4j.core.layout.RFC5424LayoutTest.cf
cfConfigurationFactoryFalseFalseorg.apache.logging.log4j.core.layout.SerializedLayoutTest.cf
cfConfigurationFactoryFalseFalseorg.apache.logging.log4j.core.layout.SyslogLayoutTest.cf
cfConfigurationFactoryFalseFalseorg.apache.logging.log4j.core.layout.XMLLayoutTest.cf
COMMA_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.COMMA_MATCHER
TAB_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.TAB_MATCHER
SPACE_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.SPACE_MATCHER
SPLIT_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.SPLIT_MATCHER
TRIM_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.TRIM_MATCHER
SINGLE_QUOTE_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.SINGLE_QUOTE_MATCHER
DOUBLE_QUOTE_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.DOUBLE_QUOTE_MATCHER
QUOTE_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.QUOTE_MATCHER
NONE_MATCHERStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrMatcher.NONE_MATCHER
DEFAULT_PREFIXStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrSubstitutor.DEFAULT_PREFIX
DEFAULT_SUFFIXStrMatcherTrueTrueorg.apache.logging.log4j.core.lookup.StrSubstitutor.DEFAULT_SUFFIX
INSTANCEFileLocationPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.FileLocationPatternConverter .INSTANCE
DEFAULTFormattingInfoTrueTrueorg.apache.logging.log4j.core.pattern.FormattingInfo.DEFAULT
INSTANCEFullLocationPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.FullLocationPatternConverter .INSTANCE
INSTANCEIntegerPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.IntegerPatternConverter.INSTANCE
INSTANCELevelPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.LevelPatternConverter.INSTANCE
INSTANCELineLocationPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.LineLocationPatternConverter .INSTANCE
INSTANCELineSeparatorPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter .INSTANCE
INSTANCELoggerPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.LoggerPatternConverter.INSTANCE
INSTANCEMethodLocationPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.MethodLocationPatternConverter .INSTANCE
INSTANCENDCPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.NDCPatternConverter.INSTANCE
DEFAULTNameAbbreviatorTrueTrueorg.apache.logging.log4j.core.pattern.NameAbbreviator.DEFAULT
INSTANCESequenceNumberPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter .INSTANCE
INSTANCEThreadPatternConverterTrueTrueorg.apache.logging.log4j.core.pattern.ThreadPatternConverter.INSTANCE
appListAppenderFalseFalseorg.apache.logging.log4j.core.pattern.ExtendedThrowableTest.app
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.pattern.ExtendedThrowableTest.ctx
appListAppenderFalseFalseorg.apache.logging.log4j.core.pattern.RegexReplacementTest.app
app2ListAppenderFalseFalseorg.apache.logging.log4j.core.pattern.RegexReplacementTest.app2
ctxLoggerContextFalseFalseorg.apache.logging.log4j.core.pattern.RegexReplacementTest.ctx

Statistics

Stat   mutableFieldType   isFieldImmutable   isFieldIsReadOnly
Sum:000
Average:000
Minimum:000
Maximum:000
Standard deviation:000
Variance:000
warningCritical    Rule warning: A field must not be assigned from outside its parent hierarchy types
// <Name>A field must not be assigned from outside its parent hierarchy types</Name>
warnif count > 0
from f in JustMyCode.Fields.Where(f => 
      
!f.IsPrivate && !f.IsGeneratedByCompiler && 
      
!f.IsImmutable && !f.IsEnumValue)

let methodsAssignerOutsideOfMyType = f.MethodsAssigningMe.Where(
        
m =>!m.IsGeneratedByCompiler &&
             
m.ParentType != f.ParentType && 
            
!m.ParentType.DeriveFrom(f.ParentType) )

where methodsAssignerOutsideOfMyType.Count() > 0
select new { f, methodsAssignerOutsideOfMyType }

1 fields matched

fieldmethodsAssignerOutsideOfMyTypeFull Name
_stats1 methodorg.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._stats

Statistics

Stat   methodsAssignerOutsideOfMyType
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0

550
Naming Conventions  

warningCritical    Rule warning: Instance fields should begin with a lower character
// <Name>Instance fields should begin with a lower character </Name>
warnif count > 0 from f in Application.Fields where 
  
!f.NameLike (@"^[a-z]")  && 
  
!f.IsStatic && 
  
!f.IsLiteral && 
  
!f.IsGeneratedByCompiler  && 
  
!f.IsSpecialName 
select new { f, f.SizeOfInst } 

// This naming convention provokes debate.
// Don't hesitate to customize the regex of 
// NameLike to your preference.

18 fields matched

fieldsSize of instanceFull Name
CONTEXT_ATTRIBUTE0org.apache.logging.log4j.core.web.Log4jWebInitializerImpl .CONTEXT_ATTRIBUTE
SUPPORT_ATTRIBUTE0org.apache.logging.log4j.core.web.Log4jWebInitializerImpl .SUPPORT_ATTRIBUTE
_class4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._class
_log4jConfig4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._log4jConfig
_name4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._name
_systemProperties4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._systemProperties
_threadCount4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._threadCount
_temp4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._temp
_stats4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._stats
_wait4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._wait
_runner4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Setup ._runner
_count4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._count
_average4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._average
_pct994org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._pct99
_pct99_994org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._pct99_99
_latencyRowCount4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._latencyRowCount
_throughputRowCount4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._throughputRowCount
_averageOpsPerSec4org.apache.logging.log4j.core.async.perftest.PerfTestDriver$Stats ._averageOpsPerSec

Statistics

Stat   Size of instance
Sum:64
Average:3.56
Minimum:0
Maximum:4
Standard deviation:1.26
Variance:1.58
warningCritical    Rule warning: Methods name should begin with an lower character
// <Name>Methods name should begin with an lower character</Name>
warnif count > 0 from m in JustMyCode.Methods where 
  
!m.NameLike (@"^[a-z]") && 
  
!m.IsSpecialName && 
  
!m.IsGeneratedByCompiler && !m.IsConstructor
select m

// The name of a regular method should 
// begin with an Upper letter.

1 methods matched

methodFull Name
TestNoMsg()org.apache.logging.log4j.core.filter.RegexFilterTest.TestNoMsg()

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:
warningCritical    Rule warning: Avoid types with name too long
// <Name>Avoid types with name too long</Name>
warnif count > 0 from t in Application.Types 
where !t.IsGeneratedByCompiler

where t.SimpleName.Length > 35 
select new { t, t.SimpleName }

      

78 types matched

typesSimpleNameFull Name
LoggerTest$TestParameterizedMessageFactoryLoggerTest$TestParameterizedMessageFactoryorg.apache.logging.log4j.LoggerTest$TestParameterizedMessageFactory
LoggerTest$TestStringFormatterMessageFactoryLoggerTest$TestStringFormatterMessageFactoryorg.apache.logging.log4j.LoggerTest$TestStringFormatterMessageFactory
ThreadContextInheritanceTest$TestThreadThreadContextInheritanceTest$TestThreadorg.apache.logging.log4j.ThreadContextInheritanceTest$TestThread
ThreadDumpMessage$BasicThreadInfoFactoryThreadDumpMessage$BasicThreadInfoFactoryorg.apache.logging.log4j.message .ThreadDumpMessage$BasicThreadInfoFactory
ThreadDumpMessage$ExtendedThreadInfoFactoryThreadDumpMessage$ExtendedThreadInfoFactoryorg.apache.logging.log4j.message .ThreadDumpMessage$ExtendedThreadInfoFactory
ThreadDumpMessage$ThreadDumpMessageProxyThreadDumpMessage$ThreadDumpMessageProxyorg.apache.logging.log4j.message .ThreadDumpMessage$ThreadDumpMessageProxy
BasicConfigurationFactory$BasicConfigurationBasicConfigurationFactory$BasicConfigurationorg.apache.logging.log4j.core .BasicConfigurationFactory$BasicConfiguration
LogEventFactoryTest$TestLogEventFactoryLogEventFactoryTest$TestLogEventFactoryorg.apache.logging.log4j.core.LogEventFactoryTest$TestLogEventFactory
ThreadedPerfTest$DebugDisabledRunnableThreadedPerfTest$DebugDisabledRunnableorg.apache.logging.log4j.core.ThreadedPerfTest$DebugDisabledRunnable
ThreadedPerfTest$DebugLoggerRunnableThreadedPerfTest$DebugLoggerRunnableorg.apache.logging.log4j.core.ThreadedPerfTest$DebugLoggerRunnable
ThrowableProxy$PrivateSecurityManagerThrowableProxy$PrivateSecurityManagerorg.apache.logging.log4j.core.impl .ThrowableProxy$PrivateSecurityManager
SerializedLayout$PrivateObjectOutputStreamSerializedLayout$PrivateObjectOutputStreamorg.apache.logging.log4j.core.layout .SerializedLayout$PrivateObjectOutputStream
DatePatternConverter$PatternFormatterDatePatternConverter$PatternFormatterorg.apache.logging.log4j.core.pattern .DatePatternConverter$PatternFormatter
DatePatternConverter$UnixMillisFormatterDatePatternConverter$UnixMillisFormatterorg.apache.logging.log4j.core.pattern .DatePatternConverter$UnixMillisFormatter
NameAbbreviator$MaxElementAbbreviatorNameAbbreviator$MaxElementAbbreviatororg.apache.logging.log4j.core.pattern .NameAbbreviator$MaxElementAbbreviator
NameAbbreviator$PatternAbbreviatorFragmentNameAbbreviator$PatternAbbreviatorFragmentorg.apache.logging.log4j.core.pattern .NameAbbreviator$PatternAbbreviatorFragment
ExtendedThrowablePatternConverterTestExtendedThrowablePatternConverterTestorg.apache.logging.log4j.core.pattern .ExtendedThrowablePatternConverterTest
ThrowablePatternConverterTest$LocalizedExceptionThrowablePatternConverterTest$LocalizedExceptionorg.apache.logging.log4j.core.pattern .ThrowablePatternConverterTest$LocalizedException
ClassLoaderContextSelector$PrivateSecurityManagerClassLoaderContextSelector$PrivateSecurityManagerorg.apache.logging.log4j.core.selector .ClassLoaderContextSelector$PrivateSecurityManager
Log4jServletContainerInitializerTestLog4jServletContainerInitializerTestorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest
ConsoleAppender$ConsoleManagerFactoryConsoleAppender$ConsoleManagerFactoryorg.apache.logging.log4j.core.appender .ConsoleAppender$ConsoleManagerFactory
RandomAccessFileManager$DummyOutputStreamRandomAccessFileManager$DummyOutputStreamorg.apache.logging.log4j.core.appender .RandomAccessFileManager$DummyOutputStream
RandomAccessFileManager$RandomAccessFileManagerFactoryRandomAccessFileManager$RandomAccessFileManagerFactoryorg.apache.logging.log4j.core.appender .RandomAccessFileManager$RandomAccessFileManagerFactory
ConsoleAppenderAnsiStyleNameLayoutMainConsoleAppenderAnsiStyleNameLayoutMainorg.apache.logging.log4j.core.appender .ConsoleAppenderAnsiStyleNameLayoutMain
ConsoleAppenderHighlightLayoutDefaultMainConsoleAppenderHighlightLayoutDefaultMainorg.apache.logging.log4j.core.appender .ConsoleAppenderHighlightLayoutDefaultMain
ConsoleAppenderHighlightLayoutLogbackMainConsoleAppenderHighlightLayoutLogbackMainorg.apache.logging.log4j.core.appender .ConsoleAppenderHighlightLayoutLogbackMain
ConsoleAppenderNoAnsiStyleLayoutMainConsoleAppenderNoAnsiStyleLayoutMainorg.apache.logging.log4j.core.appender .ConsoleAppenderNoAnsiStyleLayoutMain
RandomAccessFileAppenderLocationTestRandomAccessFileAppenderLocationTestorg.apache.logging.log4j.core.appender .RandomAccessFileAppenderLocationTest
RollingRandomAccessFileAppenderLocationTestRollingRandomAccessFileAppenderLocationTestorg.apache.logging.log4j.core.appender .RollingRandomAccessFileAppenderLocationTest
RollingRandomAccessFileAppenderRolloverTestRollingRandomAccessFileAppenderRolloverTestorg.apache.logging.log4j.core.appender .RollingRandomAccessFileAppenderRolloverTest
XmlCompactFileAppenderValidationTestXmlCompactFileAppenderValidationTestorg.apache.logging.log4j.core.appender .XmlCompactFileAppenderValidationTest
XmlCompactFileAsyncAppenderValidationTestXmlCompactFileAsyncAppenderValidationTestorg.apache.logging.log4j.core.appender .XmlCompactFileAsyncAppenderValidationTest
AbstractDatabaseManager$AbstractFactoryDataAbstractDatabaseManager$AbstractFactoryDataorg.apache.logging.log4j.core.appender.db .AbstractDatabaseManager$AbstractFactoryData
AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppenderAbstractDatabaseAppenderTest$LocalAbstractDatabaseAppenderorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender
AbstractDatabaseAppenderTest$LocalAbstractDatabaseManagerAbstractDatabaseAppenderTest$LocalAbstractDatabaseManagerorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager
JDBCDatabaseManager$JDBCDatabaseManagerFactoryJDBCDatabaseManager$JDBCDatabaseManagerFactoryorg.apache.logging.log4j.core.appender.db.jdbc .JDBCDatabaseManager$JDBCDatabaseManagerFactory
FactoryMethodConnectionSourceTest$BadReturnTypeFactoryFactoryMethodConnectionSourceTest$BadReturnTypeFactoryorg.apache.logging.log4j.core.appender.db.jdbc .FactoryMethodConnectionSourceTest$BadReturnTypeFactory
FactoryMethodConnectionSourceTest$ConnectionFactoryFactoryMethodConnectionSourceTest$ConnectionFactoryorg.apache.logging.log4j.core.appender.db.jdbc .FactoryMethodConnectionSourceTest$ConnectionFactory
FactoryMethodConnectionSourceTest$DataSourceFactoryFactoryMethodConnectionSourceTest$DataSourceFactoryorg.apache.logging.log4j.core.appender.db.jdbc .FactoryMethodConnectionSourceTest$DataSourceFactory
AbstractLogEventWrapperEntity$NullLogEventAbstractLogEventWrapperEntity$NullLogEventorg.apache.logging.log4j.core.appender.db.jpa .AbstractLogEventWrapperEntity$NullLogEvent
JPADatabaseManager$JPADatabaseManagerFactoryJPADatabaseManager$JPADatabaseManagerFactoryorg.apache.logging.log4j.core.appender.db.jpa .JPADatabaseManager$JPADatabaseManagerFactory
JpaHyperSqlAppenderTest$BadConstructorEntity1JpaHyperSqlAppenderTest$BadConstructorEntity1org.apache.logging.log4j.core.appender.db.jpa .JpaHyperSqlAppenderTest$BadConstructorEntity1
JpaHyperSqlAppenderTest$BadConstructorEntity2JpaHyperSqlAppenderTest$BadConstructorEntity2org.apache.logging.log4j.core.appender.db.jpa .JpaHyperSqlAppenderTest$BadConstructorEntity2
ContextStackJsonAttributeConverter$1ContextStackJsonAttributeConverter$1org.apache.logging.log4j.core.appender.db.jpa.converter .ContextStackJsonAttributeConverter$1
ContextMapJsonAttributeConverterTestContextMapJsonAttributeConverterTestorg.apache.logging.log4j.core.appender.db.jpa.converter .ContextMapJsonAttributeConverterTest
ContextStackJsonAttributeConverterTestContextStackJsonAttributeConverterTestorg.apache.logging.log4j.core.appender.db.jpa.converter .ContextStackJsonAttributeConverterTest
StackTraceElementAttributeConverterTestStackTraceElementAttributeConverterTestorg.apache.logging.log4j.core.appender.db.jpa.converter .StackTraceElementAttributeConverterTest
NoSQLDatabaseManager$NoSQLDatabaseManagerFactoryNoSQLDatabaseManager$NoSQLDatabaseManagerFactoryorg.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManager$NoSQLDatabaseManagerFactory
RollingFileManager$RollingFileManagerFactoryRollingFileManager$RollingFileManagerFactoryorg.apache.logging.log4j.core.appender.rolling .RollingFileManager$RollingFileManagerFactory
RollingRandomAccessFileManager$DummyOutputStreamRollingRandomAccessFileManager$DummyOutputStreamorg.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager$DummyOutputStream
RollingRandomAccessFileManager$FactoryDataRollingRandomAccessFileManager$FactoryDataorg.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager$FactoryData
RollingRandomAccessFileManager$RollingRandomAccessFileManagerFactoryRollingRandomAccessFileManager$RollingRandomAccessFileManagerFactoryorg.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager$RollingRandomAccessFileManagerFactory
OnStartupTriggeringPolicyTest$MyRollingManagerOnStartupTriggeringPolicyTest$MyRollingManagerorg.apache.logging.log4j.core.appender.rolling .OnStartupTriggeringPolicyTest$MyRollingManager
AsyncLoggerConfigHelper$Log4jEventWrapperAsyncLoggerConfigHelper$Log4jEventWrapperorg.apache.logging.log4j.core.async .AsyncLoggerConfigHelper$Log4jEventWrapper
AsyncLoggerConfigHelper$Log4jEventWrapperHandlerAsyncLoggerConfigHelper$Log4jEventWrapperHandlerorg.apache.logging.log4j.core.async .AsyncLoggerConfigHelper$Log4jEventWrapperHandler
ConfigurationFactory$ConfigurationSourceConfigurationFactory$ConfigurationSourceorg.apache.logging.log4j.core.config .ConfigurationFactory$ConfigurationSource
ConfigurationFactory$WeightedFactoryConfigurationFactory$WeightedFactoryorg.apache.logging.log4j.core.config .ConfigurationFactory$WeightedFactory
DatagramSocketManager$DatagramSocketManagerFactoryDatagramSocketManager$DatagramSocketManagerFactoryorg.apache.logging.log4j.core.net .DatagramSocketManager$DatagramSocketManagerFactory
JMSQueueManager$JMSQueueManagerFactoryJMSQueueManager$JMSQueueManagerFactoryorg.apache.logging.log4j.core.net .JMSQueueManager$JMSQueueManagerFactory
JMSTopicManager$JMSTopicManagerFactoryJMSTopicManager$JMSTopicManagerFactoryorg.apache.logging.log4j.core.net .JMSTopicManager$JMSTopicManagerFactory
SocketServer$ServerConfigurationFactorySocketServer$ServerConfigurationFactoryorg.apache.logging.log4j.core.net .SocketServer$ServerConfigurationFactory
TCPSocketManager$TCPSocketManagerFactoryTCPSocketManager$TCPSocketManagerFactoryorg.apache.logging.log4j.core.net .TCPSocketManager$TCPSocketManagerFactory
TLSSocketManager$TLSSocketManagerFactory$TLSSocketManagerFactoryExcept ionTLSSocketManager$TLSSocketManagerFactory$TLSSocketManagerFactoryExceptionorg.apache.logging.log4j.core.net .TLSSocketManager$TLSSocketManagerFactory$TLSSocketManagerFactoryExcep tion
TLSSocketManager$TLSSocketManagerFactoryTLSSocketManager$TLSSocketManagerFactoryorg.apache.logging.log4j.core.net .TLSSocketManager$TLSSocketManagerFactory
UDPSocketServer$ServerConfigurationFactoryUDPSocketServer$ServerConfigurationFactoryorg.apache.logging.log4j.core.net .UDPSocketServer$ServerConfigurationFactory
AbstractSocketServerTest$ThreadFilterAbstractSocketServerTest$ThreadFilterorg.apache.logging.log4j.core.net .AbstractSocketServerTest$ThreadFilter
SocketMessageLossTest$TestSocketServerSocketMessageLossTest$TestSocketServerorg.apache.logging.log4j.core.net .SocketMessageLossTest$TestSocketServer
SocketReconnectTest$TestSocketServerSocketReconnectTest$TestSocketServerorg.apache.logging.log4j.core.net.SocketReconnectTest$TestSocketServer
BasicConfigurationFactory$BasicConfigurationBasicConfigurationFactory$BasicConfigurationorg.apache.log4j.BasicConfigurationFactory$BasicConfiguration
FlumeEmbeddedManager$FlumeManagerFactoryFlumeEmbeddedManager$FlumeManagerFactoryorg.apache.logging.log4j.flume.appender .FlumeEmbeddedManager$FlumeManagerFactory
FlumePersistentManager$BDBManagerFactoryFlumePersistentManager$BDBManagerFactoryorg.apache.logging.log4j.flume.appender .FlumePersistentManager$BDBManagerFactory
FlumePersistentManager$DaemonThreadFactoryFlumePersistentManager$DaemonThreadFactoryorg.apache.logging.log4j.flume.appender .FlumePersistentManager$DaemonThreadFactory
FlumeEmbeddedAgentTest$EventCollectorFlumeEmbeddedAgentTest$EventCollectororg.apache.logging.log4j.flume.appender .FlumeEmbeddedAgentTest$EventCollector
FlumeEmbeddedAppenderTest$EventCollectorFlumeEmbeddedAppenderTest$EventCollectororg.apache.logging.log4j.flume.appender .FlumeEmbeddedAppenderTest$EventCollector
FlumePersistentAppenderTest$EventCollectorFlumePersistentAppenderTest$EventCollectororg.apache.logging.log4j.flume.appender .FlumePersistentAppenderTest$EventCollector
FlumePersistentAppenderTest$ReaderThreadFlumePersistentAppenderTest$ReaderThreadorg.apache.logging.log4j.flume.appender .FlumePersistentAppenderTest$ReaderThread
FlumePersistentAppenderTest$WriterThreadFlumePersistentAppenderTest$WriterThreadorg.apache.logging.log4j.flume.appender .FlumePersistentAppenderTest$WriterThread
LoggingMessageTagSupportTest$MyMessageLoggingMessageTagSupportTest$MyMessageorg.apache.logging.log4j.taglib.LoggingMessageTagSupportTest$MyMessage

Statistics

Stat   SimpleName
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
warningCritical    Rule warning: Avoid methods with name too long
// <Name>Avoid methods with name too long</Name>
warnif count > 0 from m in Application.Methods where 
  
!m.IsGeneratedByCompiler &&
 
((!m.IsSpecialName && m.SimpleName.Length > 35) ||
   
// Property getter/setter are prefixed with "get_" "set_" of length 4.
  ( m.IsSpecialName && m.SimpleName.Length - 4 > 35))

select new { m, m.SimpleName }

// The regex matches methods with name longer 
// than 35 characters.
// Method Name doesn't contain the type and package 
// prefix, FullName does.
// The regex computes the method name length from 
// the beginning until the first open parenthesis 
// or first lower than (for generic methods).
// Explicit Interface Implementation methods are 
// discarded because their names are prefixed 
// with the interface name.
      

214 methods matched

methodsSimpleNameFull Name
LoggerTest$TestParameterizedMessageFactory()LoggerTest$TestParameterizedMessageFactoryorg.apache.logging.log4j.LoggerTest$TestParameterizedMessageFactory .LoggerTest$TestParameterizedMessageFactory()
LoggerTest$TestStringFormatterMessageFactory()LoggerTest$TestStringFormatterMessageFactoryorg.apache.logging.log4j.LoggerTest$TestStringFormatterMessageFactory .LoggerTest$TestStringFormatterMessageFactory()
getLogger_Class_ParameterizedMessageFactory()getLogger_Class_ParameterizedMessageFactoryorg.apache.logging.log4j.LoggerTest .getLogger_Class_ParameterizedMessageFactory()
getLogger_Class_StringFormatterMessageFactory()getLogger_Class_StringFormatterMessageFactoryorg.apache.logging.log4j.LoggerTest .getLogger_Class_StringFormatterMessageFactory()
getLogger_Object_ParameterizedMessageFactory()getLogger_Object_ParameterizedMessageFactoryorg.apache.logging.log4j.LoggerTest .getLogger_Object_ParameterizedMessageFactory()
getLogger_Object_StringFormatterMessageFactory()getLogger_Object_StringFormatterMessageFactoryorg.apache.logging.log4j.LoggerTest .getLogger_Object_StringFormatterMessageFactory()
getLogger_String_MessageFactoryMismatch()getLogger_String_MessageFactoryMismatchorg.apache.logging.log4j.LoggerTest .getLogger_String_MessageFactoryMismatch()
getLogger_String_ParameterizedMessageFactory()getLogger_String_ParameterizedMessageFactoryorg.apache.logging.log4j.LoggerTest .getLogger_String_ParameterizedMessageFactory()
getLogger_String_StringFormatterMessageFactory()getLogger_String_StringFormatterMessageFactoryorg.apache.logging.log4j.LoggerTest .getLogger_String_StringFormatterMessageFactory()
ThreadContextInheritanceTest$TestThread(ThreadContextInheritanceTest ,StringBuilder)ThreadContextInheritanceTest$TestThreadorg.apache.logging.log4j.ThreadContextInheritanceTest$TestThread .ThreadContextInheritanceTest$TestThread(ThreadContextInheritanceTest ,StringBuilder)
testGetContextReturnsEmptyMapIfEmpty()testGetContextReturnsEmptyMapIfEmptyorg.apache.logging.log4j.ThreadContextInheritanceTest .testGetContextReturnsEmptyMapIfEmpty()
testGetImmutableContextReturnsEmptyMapIfEmpty()testGetImmutableContextReturnsEmptyMapIfEmptyorg.apache.logging.log4j.ThreadContextInheritanceTest .testGetImmutableContextReturnsEmptyMapIfEmpty()
testGetImmutableContextReturnsImmutableMapIfNonEmpty()testGetImmutableContextReturnsImmutableMapIfNonEmptyorg.apache.logging.log4j.ThreadContextInheritanceTest .testGetImmutableContextReturnsImmutableMapIfNonEmpty()
testGetImmutableContextReturnsImmutableMapIfEmpty()testGetImmutableContextReturnsImmutableMapIfEmptyorg.apache.logging.log4j.ThreadContextInheritanceTest .testGetImmutableContextReturnsImmutableMapIfEmpty()
testGetImmutableStackReturnsEmptyStackIfEmpty()testGetImmutableStackReturnsEmptyStackIfEmptyorg.apache.logging.log4j.ThreadContextInheritanceTest .testGetImmutableStackReturnsEmptyStackIfEmpty()
testGetContextReturnsEmptyMapIfEmpty()testGetContextReturnsEmptyMapIfEmptyorg.apache.logging.log4j.ThreadContextTest .testGetContextReturnsEmptyMapIfEmpty()
testGetImmutableContextReturnsEmptyMapIfEmpty()testGetImmutableContextReturnsEmptyMapIfEmptyorg.apache.logging.log4j.ThreadContextTest .testGetImmutableContextReturnsEmptyMapIfEmpty()
testGetImmutableContextReturnsImmutableMapIfNonEmpty()testGetImmutableContextReturnsImmutableMapIfNonEmptyorg.apache.logging.log4j.ThreadContextTest .testGetImmutableContextReturnsImmutableMapIfNonEmpty()
testGetImmutableContextReturnsImmutableMapIfEmpty()testGetImmutableContextReturnsImmutableMapIfEmptyorg.apache.logging.log4j.ThreadContextTest .testGetImmutableContextReturnsImmutableMapIfEmpty()
testGetImmutableStackReturnsEmptyStackIfEmpty()testGetImmutableStackReturnsEmptyStackIfEmptyorg.apache.logging.log4j.ThreadContextTest .testGetImmutableStackReturnsEmptyStackIfEmpty()
ThreadDumpMessage$BasicThreadInfoFactory()ThreadDumpMessage$BasicThreadInfoFactoryorg.apache.logging.log4j.message .ThreadDumpMessage$BasicThreadInfoFactory .ThreadDumpMessage$BasicThreadInfoFactory()
ThreadDumpMessage$ExtendedThreadInfoFactory()ThreadDumpMessage$ExtendedThreadInfoFactoryorg.apache.logging.log4j.message .ThreadDumpMessage$ExtendedThreadInfoFactory .ThreadDumpMessage$ExtendedThreadInfoFactory()
ThreadDumpMessage$ThreadDumpMessageProxy(ThreadDumpMessage)ThreadDumpMessage$ThreadDumpMessageProxyorg.apache.logging.log4j.message .ThreadDumpMessage$ThreadDumpMessageProxy .ThreadDumpMessage$ThreadDumpMessageProxy(ThreadDumpMessage)
testDoesNothingIfConstructedWithUseMapIsFalse()testDoesNothingIfConstructedWithUseMapIsFalseorg.apache.logging.log4j.spi.DefaultThreadContextMapTest .testDoesNothingIfConstructedWithUseMapIsFalse()
testGetImmutableMapReturnsNullIfEmpty()testGetImmutableMapReturnsNullIfEmptyorg.apache.logging.log4j.spi.DefaultThreadContextMapTest .testGetImmutableMapReturnsNullIfEmpty()
testGetImmutableMapReturnsImmutableMapIfNonEmpty()testGetImmutableMapReturnsImmutableMapIfNonEmptyorg.apache.logging.log4j.spi.DefaultThreadContextMapTest .testGetImmutableMapReturnsImmutableMapIfNonEmpty()
testGetImmutableMapCopyNotAffectdByContextMapChanges()testGetImmutableMapCopyNotAffectdByContextMapChangesorg.apache.logging.log4j.spi.DefaultThreadContextMapTest .testGetImmutableMapCopyNotAffectdByContextMapChanges()
testThreadLocalNotInheritableByDefault()testThreadLocalNotInheritableByDefaultorg.apache.logging.log4j.spi.DefaultThreadContextMapTest .testThreadLocalNotInheritableByDefault()
testThreadLocalInheritableIfConfigured()testThreadLocalInheritableIfConfiguredorg.apache.logging.log4j.spi.DefaultThreadContextMapTest .testThreadLocalInheritableIfConfigured()
testDoesNothingIfConstructedWithUseStackIsFalse()testDoesNothingIfConstructedWithUseStackIsFalseorg.apache.logging.log4j.spi.DefaultThreadContextStackTest .testDoesNothingIfConstructedWithUseStackIsFalse()
testIteratorReturnsInListOrderNotStackOrder()testIteratorReturnsInListOrderNotStackOrderorg.apache.logging.log4j.spi.DefaultThreadContextStackTest .testIteratorReturnsInListOrderNotStackOrder()
testIteratorReturnsInListOrderNotStackOrder()testIteratorReturnsInListOrderNotStackOrderorg.apache.logging.log4j.spi.MutableThreadContextStackTest .testIteratorReturnsInListOrderNotStackOrder()
BasicConfigurationFactory$BasicConfiguration(BasicConfigurationFactory )BasicConfigurationFactory$BasicConfigurationorg.apache.logging.log4j.core .BasicConfigurationFactory$BasicConfiguration .BasicConfigurationFactory$BasicConfiguration (BasicConfigurationFactory)
LogEventFactoryTest$TestLogEventFactory()LogEventFactoryTest$TestLogEventFactoryorg.apache.logging.log4j.core.LogEventFactoryTest$TestLogEventFactory .LogEventFactoryTest$TestLogEventFactory()
getLogger_String_MessageFactoryMismatch()getLogger_String_MessageFactoryMismatchorg.apache.logging.log4j.core.LoggerTest .getLogger_String_MessageFactoryMismatch()
getLogger_String_MessageFactoryMismatchNull()getLogger_String_MessageFactoryMismatchNullorg.apache.logging.log4j.core.LoggerTest .getLogger_String_MessageFactoryMismatchNull()
ThreadedPerfTest$DebugDisabledRunnable(ThreadedPerfTest)ThreadedPerfTest$DebugDisabledRunnableorg.apache.logging.log4j.core.ThreadedPerfTest$DebugDisabledRunnable .ThreadedPerfTest$DebugDisabledRunnable(ThreadedPerfTest)
ThreadedPerfTest$DebugLoggerRunnable(ThreadedPerfTest)ThreadedPerfTest$DebugLoggerRunnableorg.apache.logging.log4j.core.ThreadedPerfTest$DebugLoggerRunnable .ThreadedPerfTest$DebugLoggerRunnable(ThreadedPerfTest)
testReturnDefaultIfNameIsUnsupported()testReturnDefaultIfNameIsUnsupportedorg.apache.logging.log4j.core.helpers.CharsetsTest .testReturnDefaultIfNameIsUnsupported()
testReturnRequestedCharsetIfSupported()testReturnRequestedCharsetIfSupportedorg.apache.logging.log4j.core.helpers.CharsetsTest .testReturnRequestedCharsetIfSupported()
testFileFromUriWithPlusCharactersInName()testFileFromUriWithPlusCharactersInNameorg.apache.logging.log4j.core.helpers.FileUtilsTest .testFileFromUriWithPlusCharactersInName()
testFileFromUriWithPlusCharactersConvertedToSpacesIfFileDoesNotExist()testFileFromUriWithPlusCharactersConvertedToSpacesIfFileDoesNotExistorg.apache.logging.log4j.core.helpers.FileUtilsTest .testFileFromUriWithPlusCharactersConvertedToSpacesIfFileDoesNotExist( )
testGetCorrectedFilePathUriWithoutBackslashes()testGetCorrectedFilePathUriWithoutBackslashesorg.apache.logging.log4j.core.helpers.FileUtilsTest .testGetCorrectedFilePathUriWithoutBackslashes()
testGetCorrectedFilePathUriWithBackslashes()testGetCorrectedFilePathUriWithBackslashesorg.apache.logging.log4j.core.helpers.FileUtilsTest .testGetCorrectedFilePathUriWithBackslashes()
ThrowableProxy$PrivateSecurityManager()ThrowableProxy$PrivateSecurityManagerorg.apache.logging.log4j.core.impl .ThrowableProxy$PrivateSecurityManager .ThrowableProxy$PrivateSecurityManager()
testSingleOptionFullAndMultipleFilters()testSingleOptionFullAndMultipleFiltersorg.apache.logging.log4j.core.impl.ThrowableFormatOptionsTest .testSingleOptionFullAndMultipleFilters()
testSingleOptionNoneAndMultipleFilters()testSingleOptionNoneAndMultipleFiltersorg.apache.logging.log4j.core.impl.ThrowableFormatOptionsTest .testSingleOptionNoneAndMultipleFilters()
testSingleOptionShortAndMultipleFilters()testSingleOptionShortAndMultipleFiltersorg.apache.logging.log4j.core.impl.ThrowableFormatOptionsTest .testSingleOptionShortAndMultipleFilters()
testSingleOptionDepthAndMultipleFilters()testSingleOptionDepthAndMultipleFiltersorg.apache.logging.log4j.core.impl.ThrowableFormatOptionsTest .testSingleOptionDepthAndMultipleFilters()
unregisterAsyncLoggerRingBufferAdmins(String,MBeanServer)unregisterAsyncLoggerRingBufferAdminsorg.apache.logging.log4j.core.jmx.Server .unregisterAsyncLoggerRingBufferAdmins(String,MBeanServer)
unregisterAsyncLoggerConfigRingBufferAdmins(String,MBeanServer)unregisterAsyncLoggerConfigRingBufferAdminsorg.apache.logging.log4j.core.jmx.Server .unregisterAsyncLoggerConfigRingBufferAdmins(String,MBeanServer)
testEscapeQuotesButDoesNotEscapeEquals()testEscapeQuotesButDoesNotEscapeEqualsorg.apache.logging.log4j.core.jmx.ServerTest .testEscapeQuotesButDoesNotEscapeEquals()
testEscapeQuotesButDoesNotEscapeComma()testEscapeQuotesButDoesNotEscapeCommaorg.apache.logging.log4j.core.jmx.ServerTest .testEscapeQuotesButDoesNotEscapeComma()
testEscapeQuotesButDoesNotEscapeColon()testEscapeQuotesButDoesNotEscapeColonorg.apache.logging.log4j.core.jmx.ServerTest .testEscapeQuotesButDoesNotEscapeColon()
SerializedLayout$PrivateObjectOutputStream(SerializedLayout ,OutputStream)SerializedLayout$PrivateObjectOutputStreamorg.apache.logging.log4j.core.layout .SerializedLayout$PrivateObjectOutputStream .SerializedLayout$PrivateObjectOutputStream(SerializedLayout ,OutputStream)
DatePatternConverter$PatternFormatter(SimpleDateFormat)DatePatternConverter$PatternFormatterorg.apache.logging.log4j.core.pattern .DatePatternConverter$PatternFormatter .DatePatternConverter$PatternFormatter(SimpleDateFormat)
DatePatternConverter$UnixMillisFormatter()DatePatternConverter$UnixMillisFormatterorg.apache.logging.log4j.core.pattern .DatePatternConverter$UnixMillisFormatter .DatePatternConverter$UnixMillisFormatter()
NameAbbreviator$MaxElementAbbreviator(int)NameAbbreviator$MaxElementAbbreviatororg.apache.logging.log4j.core.pattern .NameAbbreviator$MaxElementAbbreviator .NameAbbreviator$MaxElementAbbreviator(int)
NameAbbreviator$PatternAbbreviatorFragment(int,char)NameAbbreviator$PatternAbbreviatorFragmentorg.apache.logging.log4j.core.pattern .NameAbbreviator$PatternAbbreviatorFragment .NameAbbreviator$PatternAbbreviatorFragment(int,char)
ExtendedThrowablePatternConverterTest()ExtendedThrowablePatternConverterTestorg.apache.logging.log4j.core.pattern .ExtendedThrowablePatternConverterTest .ExtendedThrowablePatternConverterTest()
ThrowablePatternConverterTest$LocalizedException()ThrowablePatternConverterTest$LocalizedExceptionorg.apache.logging.log4j.core.pattern .ThrowablePatternConverterTest$LocalizedException .ThrowablePatternConverterTest$LocalizedException()
ClassLoaderContextSelector$PrivateSecurityManager()ClassLoaderContextSelector$PrivateSecurityManagerorg.apache.logging.log4j.core.selector .ClassLoaderContextSelector$PrivateSecurityManager .ClassLoaderContextSelector$PrivateSecurityManager()
Log4jServletContainerInitializerTest()Log4jServletContainerInitializerTestorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .Log4jServletContainerInitializerTest()
testOnStartupWithServletVersion3_xEffectiveVersion2_x()testOnStartupWithServletVersion3_xEffectiveVersion2_xorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion2_x()
testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTrue()testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTrueorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTrue()
testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTRUE()testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTRUEorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion3_xDisabledTRUE()
testOnStartupWithServletVersion3_xEffectiveVersion3_x()testOnStartupWithServletVersion3_xEffectiveVersion3_xorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupWithServletVersion3_xEffectiveVersion3_x()
testOnStartupCanceledDueToPreExistingFilter()testOnStartupCanceledDueToPreExistingFilterorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupCanceledDueToPreExistingFilter()
testOnStartupFailedDueToInitializerFailure()testOnStartupFailedDueToInitializerFailureorg.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest .testOnStartupFailedDueToInitializerFailure()
testSetLoggerContextBeforeInitialize()testSetLoggerContextBeforeInitializeorg.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testSetLoggerContextBeforeInitialize()
testClearLoggerContextBeforeInitialize()testClearLoggerContextBeforeInitializeorg.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testClearLoggerContextBeforeInitialize()
testInitializeWithNoParametersThenSetLoggerContextThenDeinitialize()testInitializeWithNoParametersThenSetLoggerContextThenDeinitializeorg.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testInitializeWithNoParametersThenSetLoggerContextThenDeinitialize()
testInitializeWithClassLoaderNoParametersThenSetLoggerContextThenDeini tialize()testInitializeWithClassLoaderNoParametersThenSetLoggerContextThenDeinitializeorg.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testInitializeWithClassLoaderNoParametersThenSetLoggerContextThenDein itialize()
testInitializeFailsAfterDeinitialize()testInitializeFailsAfterDeinitializeorg.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testInitializeFailsAfterDeinitialize()
testInitializeUsingJndiSelectorFails()testInitializeUsingJndiSelectorFailsorg.apache.logging.log4j.core.web.Log4jWebInitializerImplTest .testInitializeUsingJndiSelectorFails()
ConsoleAppender$ConsoleManagerFactory()ConsoleAppender$ConsoleManagerFactoryorg.apache.logging.log4j.core.appender .ConsoleAppender$ConsoleManagerFactory .ConsoleAppender$ConsoleManagerFactory()
RandomAccessFileManager$DummyOutputStream()RandomAccessFileManager$DummyOutputStreamorg.apache.logging.log4j.core.appender .RandomAccessFileManager$DummyOutputStream .RandomAccessFileManager$DummyOutputStream()
RandomAccessFileManager$RandomAccessFileManagerFactory()RandomAccessFileManager$RandomAccessFileManagerFactoryorg.apache.logging.log4j.core.appender .RandomAccessFileManager$RandomAccessFileManagerFactory .RandomAccessFileManager$RandomAccessFileManagerFactory()
ConsoleAppenderAnsiStyleNameLayoutMain()ConsoleAppenderAnsiStyleNameLayoutMainorg.apache.logging.log4j.core.appender .ConsoleAppenderAnsiStyleNameLayoutMain .ConsoleAppenderAnsiStyleNameLayoutMain()
ConsoleAppenderAnsiStyleNameLayoutMain()ConsoleAppenderAnsiStyleNameLayoutMainorg.apache.logging.log4j.core.appender .ConsoleAppenderAnsiStyleNameLayoutMain .ConsoleAppenderAnsiStyleNameLayoutMain()
ConsoleAppenderHighlightLayoutDefaultMain()ConsoleAppenderHighlightLayoutDefaultMainorg.apache.logging.log4j.core.appender .ConsoleAppenderHighlightLayoutDefaultMain .ConsoleAppenderHighlightLayoutDefaultMain()
ConsoleAppenderHighlightLayoutDefaultMain()ConsoleAppenderHighlightLayoutDefaultMainorg.apache.logging.log4j.core.appender .ConsoleAppenderHighlightLayoutDefaultMain .ConsoleAppenderHighlightLayoutDefaultMain()
ConsoleAppenderHighlightLayoutLogbackMain()ConsoleAppenderHighlightLayoutLogbackMainorg.apache.logging.log4j.core.appender .ConsoleAppenderHighlightLayoutLogbackMain .ConsoleAppenderHighlightLayoutLogbackMain()
ConsoleAppenderHighlightLayoutLogbackMain()ConsoleAppenderHighlightLayoutLogbackMainorg.apache.logging.log4j.core.appender .ConsoleAppenderHighlightLayoutLogbackMain .ConsoleAppenderHighlightLayoutLogbackMain()
ConsoleAppenderNoAnsiStyleLayoutMain()ConsoleAppenderNoAnsiStyleLayoutMainorg.apache.logging.log4j.core.appender .ConsoleAppenderNoAnsiStyleLayoutMain .ConsoleAppenderNoAnsiStyleLayoutMain()
ConsoleAppenderNoAnsiStyleLayoutMain()ConsoleAppenderNoAnsiStyleLayoutMainorg.apache.logging.log4j.core.appender .ConsoleAppenderNoAnsiStyleLayoutMain .ConsoleAppenderNoAnsiStyleLayoutMain()
RandomAccessFileAppenderLocationTest()RandomAccessFileAppenderLocationTestorg.apache.logging.log4j.core.appender .RandomAccessFileAppenderLocationTest .RandomAccessFileAppenderLocationTest()
testWrite_dataExceedingMinBufferSize()testWrite_dataExceedingMinBufferSizeorg.apache.logging.log4j.core.appender.RandomAccessFileManagerTest .testWrite_dataExceedingMinBufferSize()
testAppendDoesNotOverwriteExistingFile()testAppendDoesNotOverwriteExistingFileorg.apache.logging.log4j.core.appender.RandomAccessFileManagerTest .testAppendDoesNotOverwriteExistingFile()
RollingRandomAccessFileAppenderLocationTest()RollingRandomAccessFileAppenderLocationTestorg.apache.logging.log4j.core.appender .RollingRandomAccessFileAppenderLocationTest .RollingRandomAccessFileAppenderLocationTest()
RollingRandomAccessFileAppenderRolloverTest()RollingRandomAccessFileAppenderRolloverTestorg.apache.logging.log4j.core.appender .RollingRandomAccessFileAppenderRolloverTest .RollingRandomAccessFileAppenderRolloverTest()
checkTheNumberOfSentAndReceivedMessages()checkTheNumberOfSentAndReceivedMessagesorg.apache.logging.log4j.core.appender.SyslogAppenderTestBase .checkTheNumberOfSentAndReceivedMessages()
checkTheEqualityOfSentAndReceivedMessages()checkTheEqualityOfSentAndReceivedMessagesorg.apache.logging.log4j.core.appender.SyslogAppenderTestBase .checkTheEqualityOfSentAndReceivedMessages()
XmlCompactFileAppenderValidationTest()XmlCompactFileAppenderValidationTestorg.apache.logging.log4j.core.appender .XmlCompactFileAppenderValidationTest .XmlCompactFileAppenderValidationTest()
XmlCompactFileAsyncAppenderValidationTest()XmlCompactFileAsyncAppenderValidationTestorg.apache.logging.log4j.core.appender .XmlCompactFileAsyncAppenderValidationTest .XmlCompactFileAsyncAppenderValidationTest()
AbstractDatabaseManager$AbstractFactoryData(int)AbstractDatabaseManager$AbstractFactoryDataorg.apache.logging.log4j.core.appender.db .AbstractDatabaseManager$AbstractFactoryData .AbstractDatabaseManager$AbstractFactoryData(int)
AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender(String ,Filter,boolean ,AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager)AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppenderorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender .AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender(String ,Filter,boolean ,AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager)
AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager(String,int)AbstractDatabaseAppenderTest$LocalAbstractDatabaseManagerorg.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager .AbstractDatabaseAppenderTest$LocalAbstractDatabaseManager(String,int)
JDBCDatabaseManager$JDBCDatabaseManagerFactory()JDBCDatabaseManager$JDBCDatabaseManagerFactoryorg.apache.logging.log4j.core.appender.db.jdbc .JDBCDatabaseManager$JDBCDatabaseManagerFactory .JDBCDatabaseManager$JDBCDatabaseManagerFactory()
testPerformanceOfAppenderWith10000Events()testPerformanceOfAppenderWith10000Eventsorg.apache.logging.log4j.core.appender.db.jdbc .AbstractJdbcAppenderTest.testPerformanceOfAppenderWith10000Events()

Statistics

Stat   SimpleName
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
warningCritical    Rule warning: Avoid fields with name too long
// <Name>Avoid fields with name too long</Name>
warnif count > 0 from f in Application.Fields where
 
!f.IsGeneratedByCompiler &&
  
f.Name.Length > 35
select f

// The regex matches fields with name longer 
// than 35 characters.
// Field Name doesn't contain the type and 
// package prefix, FullName does.
      

3 fields matched

fieldsFull Name
NUM_100NS_INTERVALS_SINCE_UUID_EPOCHorg.apache.logging.log4j.core.helpers.UUIDUtil .NUM_100NS_INTERVALS_SINCE_UUID_EPOCH
NUM_100NS_INTERVALS_SINCE_UUID_EPOCHorg.apache.logging.log4j.core.helpers.UUIDTest .NUM_100NS_INTERVALS_SINCE_UUID_EPOCH
IS_LOG4J_AUTO_INITIALIZATION_DISABLEDorg.apache.logging.log4j.core.web.Log4jWebSupport .IS_LOG4J_AUTO_INITIALIZATION_DISABLED

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:

220
Source Files Organization  

warningCritical    Rule warning: Avoid defining multiple types in a source file
// <Name>Avoid defining multiple types in a source file</Name>
warnif count > 0 

// Build a lookup indexed by source files, values being a sequence of types defined in the source file.
let lookup = Application.Types.Where(t => 
                                
t.SourceFileDeclAvailable && 
                               
// except nested types and types generated by compilers!
                               !t.IsGeneratedByCompiler &&                               
                               
!t.IsNested)                                
                         
// It could make sense to not apply this rule for enumerations.
                         // && !t.IsEnumeration)

            
// We use multi-key, since a type can be declared in multiple source files.
           .ToMultiKeyLookup(t2 => t2.SourceDecls.Select(d => d.SourceFile))
 
from @group in lookup where @group.Count() > 1
   
let sourceFile = @group.Key

   
// CQLinq doesn't let indexing result with sourceFile 
   // so we choose a typeIndex in types, 
   // preferably the type that has the file name.
   let typeWithSourceFileName = @group.FirstOrDefault(t3 => t3.SimpleName == sourceFile.FileNameWithoutExtension)
   
let typeIndex = typeWithSourceFileName ?? @group.First()

select new { typeIndex, 
             
types = @group as IEnumerable<IType>, 
             
sourceFile.FilePathString }

54 types matched

typestypesFilePathStringFull Name
MarkerManager10 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager
ThreadContext9 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext
ThreadDumpMessage5 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.javaorg.apache.logging.log4j.message.ThreadDumpMessage
LoggerStream7 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream
StatusLogger3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.javaorg.apache.logging.log4j.status.StatusLogger
Filter3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.javaorg.apache.logging.log4j.core.Filter
LoggerContext3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.javaorg.apache.logging.log4j.core.LoggerContext
BurstFilter7 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.javaorg.apache.logging.log4j.core.filter.BurstFilter
Log4jLogEvent3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.javaorg.apache.logging.log4j.core.impl.Log4jLogEvent
ThrowableProxy3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.javaorg.apache.logging.log4j.core.impl.ThrowableProxy
HTMLLayout5 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/HTMLLayout.javaorg.apache.logging.log4j.core.layout.HTMLLayout
RFC5424Layout6 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/RFC5424Layout.javaorg.apache.logging.log4j.core.layout.RFC5424Layout
SerializedLayout3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.javaorg.apache.logging.log4j.core.layout.SerializedLayout
StrMatcher11 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrMatcher.javaorg.apache.logging.log4j.core.lookup.StrMatcher
AbstractStyleNameConverter17 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.javaorg.apache.logging.log4j.core.pattern.AbstractStyleNameConverter
DatePatternConverter8 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.javaorg.apache.logging.log4j.core.pattern.DatePatternConverter
NameAbbreviator7 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.javaorg.apache.logging.log4j.core.pattern.NameAbbreviator
ClassLoaderContextSelector2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.javaorg.apache.logging.log4j.core.selector.ClassLoaderContextSelector
AsyncAppender5 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AsyncAppender.javaorg.apache.logging.log4j.core.appender.AsyncAppender
ConsoleAppender14 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.javaorg.apache.logging.log4j.core.appender.ConsoleAppender
FileManager3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.javaorg.apache.logging.log4j.core.appender.FileManager
RandomAccessFileManager5 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.javaorg.apache.logging.log4j.core.appender.RandomAccessFileManager
AbstractDatabaseManager3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.javaorg.apache.logging.log4j.core.appender.db.AbstractDatabaseManager
JDBCDatabaseManager4 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JDBCDatabaseManager.javaorg.apache.logging.log4j.core.appender.db.jdbc.JDBCDatabaseManager
AbstractLogEventWrapperEntity16 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.javaorg.apache.logging.log4j.core.appender.db.jpa .AbstractLogEventWrapperEntity
JPADatabaseManager3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/JPADatabaseManager.javaorg.apache.logging.log4j.core.appender.db.jpa.JPADatabaseManager
RollingFileManager7 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.javaorg.apache.logging.log4j.core.appender.rolling.RollingFileManager
RollingRandomAccessFileManager5 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.javaorg.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager
AsyncLoggerConfig2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.javaorg.apache.logging.log4j.core.async.AsyncLoggerConfig
AsyncLoggerConfigHelper3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.javaorg.apache.logging.log4j.core.async.AsyncLoggerConfigHelper
ConfigurationFactory7 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.javaorg.apache.logging.log4j.core.config.ConfigurationFactory
JSONConfiguration2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/JSONConfiguration.javaorg.apache.logging.log4j.core.config.JSONConfiguration
LoggerConfig2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.javaorg.apache.logging.log4j.core.config.LoggerConfig
XMLConfiguration2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/XMLConfiguration.javaorg.apache.logging.log4j.core.config.XMLConfiguration
PluginManager4 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.javaorg.apache.logging.log4j.core.config.plugins.PluginManager
ResolverUtil13 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/ResolverUtil.javaorg.apache.logging.log4j.core.config.plugins.ResolverUtil
DatagramSocketManager2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.javaorg.apache.logging.log4j.core.net.DatagramSocketManager
JMSQueueManager3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JMSQueueManager.javaorg.apache.logging.log4j.core.net.JMSQueueManager
JMSTopicManager3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JMSTopicManager.javaorg.apache.logging.log4j.core.net.JMSTopicManager
SMTPManager2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SMTPManager.javaorg.apache.logging.log4j.core.net.SMTPManager
SocketServer6 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SocketServer.javaorg.apache.logging.log4j.core.net.SocketServer
TCPSocketManager7 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TCPSocketManager.javaorg.apache.logging.log4j.core.net.TCPSocketManager
TLSSocketManager2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TLSSocketManager.javaorg.apache.logging.log4j.core.net.TLSSocketManager
UDPSocketServer3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UDPSocketServer.javaorg.apache.logging.log4j.core.net.UDPSocketServer
Category4 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-1.2-api/src/main/java/org/apache/log4j/Category.javaorg.apache.log4j.Category
LogManager18 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.javaorg.apache.log4j.LogManager
Logger3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-1.2-api/src/main/java/org/apache/log4j/Logger.javaorg.apache.log4j.Logger
Log4jLoggerFactory4 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/Log4jLoggerFactory.javaorg.slf4j.helpers.Log4jLoggerFactory
LogFactoryImpl3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/LogFactoryImpl.javaorg.apache.logging.log4j.jcl.LogFactoryImpl
FlumeAvroManager2 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.javaorg.apache.logging.log4j.flume.appender.FlumeAvroManager
FlumeEmbeddedManager4 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.javaorg.apache.logging.log4j.flume.appender.FlumeEmbeddedManager
FlumePersistentManager12 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.javaorg.apache.logging.log4j.flume.appender.FlumePersistentManager
LogEventFactory3 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LogEventFactory.javaorg.apache.logging.log4j.samples.app.LogEventFactory
LoggingApp4 types/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingApp.javaorg.apache.logging.log4j.samples.app.LoggingApp

Statistics

Stat   types   FilePathString
Sum:00
Average:00
Minimum:00
Maximum:00
Standard deviation:00
Variance:00
warningCritical    Rule warning: package name should correspond to file location
// <Name>package name should correspond to file location</Name>

// For a good code organization, 
// do mirror the packages hierarchy and the source files directories tree.

warnif count > 0
from n in Application.Packages 

// Replace dots by spaces in package name
let dirCorresponding = n.Name.Replace('.', ' ')

// Look at source file decl of JustMyCode type's declared in n
from t in n.ChildTypes
where JustMyCode.Contains(t) && t.SourceFileDeclAvailable
from decl in t.SourceDecls
let sourceFilePath = decl.SourceFile.FilePath.ToString()

// Replace dots and path separators by spaces in source files names
where !sourceFilePath.Replace('.',' ').Replace('\\',' ').Contains(dirCorresponding)

select new { t, dirCorresponding , sourceFilePath  } 

747 types matched

typesdirCorrespondingsourceFilePathFull Name
EventLoggerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/EventLogger.javaorg.apache.logging.log4j.EventLogger
Levelorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/Level.javaorg.apache.logging.log4j.Level
LogManagerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.javaorg.apache.logging.log4j.LogManager
Loggerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/Logger.javaorg.apache.logging.log4j.Logger
LoggingExceptionorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/LoggingException.javaorg.apache.logging.log4j.LoggingException
Markerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/Marker.javaorg.apache.logging.log4j.Marker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManager$Log4jMarkerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager$Log4jMarker
MarkerManagerorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.javaorg.apache.logging.log4j.MarkerManager
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContext$ContextStackorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext$ContextStack
ThreadContextorg apache logging log4j/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.javaorg.apache.logging.log4j.ThreadContext
AbstractMessageFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/AbstractMessageFactory.javaorg.apache.logging.log4j.message.AbstractMessageFactory
BasicThreadInformationorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/BasicThreadInformation.javaorg.apache.logging.log4j.message.BasicThreadInformation
ExtendedThreadInformationorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.javaorg.apache.logging.log4j.message.ExtendedThreadInformation
FormattedMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessage.javaorg.apache.logging.log4j.message.FormattedMessage
FormattedMessageFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/FormattedMessageFactory.javaorg.apache.logging.log4j.message.FormattedMessageFactory
LocalizedMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessage.javaorg.apache.logging.log4j.message.LocalizedMessage
LocalizedMessageFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/LocalizedMessageFactory.javaorg.apache.logging.log4j.message.LocalizedMessageFactory
LoggerNameAwareMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/LoggerNameAwareMessage.javaorg.apache.logging.log4j.message.LoggerNameAwareMessage
MapMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.javaorg.apache.logging.log4j.message.MapMessage
Messageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/Message.javaorg.apache.logging.log4j.message.Message
MessageFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory.javaorg.apache.logging.log4j.message.MessageFactory
MessageFormatMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.javaorg.apache.logging.log4j.message.MessageFormatMessage
MessageFormatMessageFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessageFactory.javaorg.apache.logging.log4j.message.MessageFormatMessageFactory
MultiformatMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/MultiformatMessage.javaorg.apache.logging.log4j.message.MultiformatMessage
ObjectMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ObjectMessage.javaorg.apache.logging.log4j.message.ObjectMessage
ParameterizedMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessage.javaorg.apache.logging.log4j.message.ParameterizedMessage
ParameterizedMessageFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedMessageFactory.javaorg.apache.logging.log4j.message.ParameterizedMessageFactory
SimpleMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.javaorg.apache.logging.log4j.message.SimpleMessage
StringFormattedMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormattedMessage.javaorg.apache.logging.log4j.message.StringFormattedMessage
StringFormatterMessageFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/StringFormatterMessageFactory.javaorg.apache.logging.log4j.message.StringFormatterMessageFactory
StructuredDataIdorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataId.javaorg.apache.logging.log4j.message.StructuredDataId
StructuredDataMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.javaorg.apache.logging.log4j.message.StructuredDataMessage
ThreadDumpMessage$BasicThreadInfoFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.javaorg.apache.logging.log4j.message .ThreadDumpMessage$BasicThreadInfoFactory
ThreadDumpMessage$ExtendedThreadInfoFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.javaorg.apache.logging.log4j.message .ThreadDumpMessage$ExtendedThreadInfoFactory
ThreadDumpMessage$ThreadDumpMessageProxyorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.javaorg.apache.logging.log4j.message .ThreadDumpMessage$ThreadDumpMessageProxy
ThreadDumpMessage$ThreadDumpMessageProxyorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.javaorg.apache.logging.log4j.message .ThreadDumpMessage$ThreadDumpMessageProxy
ThreadDumpMessage$ThreadInfoFactoryorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.javaorg.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory
ThreadDumpMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.javaorg.apache.logging.log4j.message.ThreadDumpMessage
ThreadInformationorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadInformation.javaorg.apache.logging.log4j.message.ThreadInformation
TimestampMessageorg apache logging log4j message/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/message/TimestampMessage.javaorg.apache.logging.log4j.message.TimestampMessage
SimpleLoggerorg apache logging log4j simple/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.javaorg.apache.logging.log4j.simple.SimpleLogger
SimpleLoggerContextorg apache logging log4j simple/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.javaorg.apache.logging.log4j.simple.SimpleLoggerContext
SimpleLoggerContextFactoryorg apache logging log4j simple/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.javaorg.apache.logging.log4j.simple.SimpleLoggerContextFactory
AbstractLoggerorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.javaorg.apache.logging.log4j.spi.AbstractLogger
AbstractLoggerWrapperorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLoggerWrapper.javaorg.apache.logging.log4j.spi.AbstractLoggerWrapper
DefaultThreadContextMaporg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.javaorg.apache.logging.log4j.spi.DefaultThreadContextMap
DefaultThreadContextStackorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextStack.javaorg.apache.logging.log4j.spi.DefaultThreadContextStack
LoggerContextorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.javaorg.apache.logging.log4j.spi.LoggerContext
LoggerContextFactoryorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContextFactory.javaorg.apache.logging.log4j.spi.LoggerContextFactory
LoggerStream$HelperStreamorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream$HelperStream
LoggerStream$HelperStreamorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream$HelperStream
LoggerStream$HelperStreamorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream$HelperStream
LoggerStream$HelperStreamorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream$HelperStream
LoggerStream$HelperStreamorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream$HelperStream
LoggerStream$HelperStreamorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream$HelperStream
LoggerStreamorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerStream.javaorg.apache.logging.log4j.spi.LoggerStream
MutableThreadContextStackorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableThreadContextStack.javaorg.apache.logging.log4j.spi.MutableThreadContextStack
Providerorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/Provider.javaorg.apache.logging.log4j.spi.Provider
StandardLevelorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/StandardLevel.javaorg.apache.logging.log4j.spi.StandardLevel
ThreadContextMaporg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap.javaorg.apache.logging.log4j.spi.ThreadContextMap
ThreadContextStackorg apache logging log4j spi/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextStack.javaorg.apache.logging.log4j.spi.ThreadContextStack
StatusConsoleListenerorg apache logging log4j status/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.javaorg.apache.logging.log4j.status.StatusConsoleListener
StatusDataorg apache logging log4j status/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusData.javaorg.apache.logging.log4j.status.StatusData
StatusListenerorg apache logging log4j status/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusListener.javaorg.apache.logging.log4j.status.StatusListener
StatusLogger$BoundedQueue<E>org apache logging log4j status/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.javaorg.apache.logging.log4j.status.StatusLogger$BoundedQueue
StatusLogger$BoundedQueue<E>org apache logging log4j status/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.javaorg.apache.logging.log4j.status.StatusLogger$BoundedQueue
StatusLoggerorg apache logging log4j status/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.javaorg.apache.logging.log4j.status.StatusLogger
EnglishEnumsorg apache logging log4j util/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/EnglishEnums.javaorg.apache.logging.log4j.util.EnglishEnums
PropertiesUtilorg apache logging log4j util/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.javaorg.apache.logging.log4j.util.PropertiesUtil
ProviderUtilorg apache logging log4j util/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.javaorg.apache.logging.log4j.util.ProviderUtil
AbstractServerorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractServer.javaorg.apache.logging.log4j.core.AbstractServer
Appenderorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender.javaorg.apache.logging.log4j.core.Appender
ErrorHandlerorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/ErrorHandler.javaorg.apache.logging.log4j.core.ErrorHandler
Filter$Resultorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.javaorg.apache.logging.log4j.core.Filter$Result
Filter$Resultorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.javaorg.apache.logging.log4j.core.Filter$Result
Filterorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.javaorg.apache.logging.log4j.core.Filter
Layout<T>org apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout.javaorg.apache.logging.log4j.core.Layout
LifeCycleorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LifeCycle.javaorg.apache.logging.log4j.core.LifeCycle
LogEventorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LogEvent.javaorg.apache.logging.log4j.core.LogEvent
Logger$PrivateConfigorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.javaorg.apache.logging.log4j.core.Logger$PrivateConfig
Logger$PrivateConfigorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.javaorg.apache.logging.log4j.core.Logger$PrivateConfig
Logger$PrivateConfigorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.javaorg.apache.logging.log4j.core.Logger$PrivateConfig
Logger$PrivateConfigorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.javaorg.apache.logging.log4j.core.Logger$PrivateConfig
Logger$PrivateConfigorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.javaorg.apache.logging.log4j.core.Logger$PrivateConfig
Logger$PrivateConfigorg apache logging log4j core/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.javaorg.apache.logging.log4j.core.Logger$PrivateConfig

Statistics

Stat   dirCorresponding   sourceFilePath
Sum:00
Average:00
Minimum:00
Maximum:00
Standard deviation:00
Variance:00

Object Oriented Design

Base class should not use derivatives
// <Name>Base class should not use derivatives</Name>
warnif count > 0 
from baseClass in JustMyCode.Types
where baseClass.IsClass && baseClass.NbChildren > 0 // <-- for optimization!
let derivedClassesUsed = baseClass.DerivedTypes.UsedBy(baseClass)
where derivedClassesUsed.Count() > 0
select new { baseClass, derivedClassesUsed }

6 types matched

typesderivedClassesUsedFull Name
AbstractLogger1 typeorg.apache.logging.log4j.spi.AbstractLogger
StrMatcher5 typesorg.apache.logging.log4j.core.lookup.StrMatcher
NameAbbreviator3 typesorg.apache.logging.log4j.core.pattern.NameAbbreviator
ConfigurationFactory1 typeorg.apache.logging.log4j.core.config.ConfigurationFactory
Category1 typeorg.apache.log4j.Category
Priority1 typeorg.apache.log4j.Priority

Statistics

Stat   derivedClassesUsed
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
Class shouldn't be too deep in inheritance tree
// <Name>Class shouldn't be too deep in inheritance tree</Name>
warnif count > 0 from t in JustMyCode.Types 
where t.IsClass
let baseClasses = t.BaseClasses.ExceptThirdParty()

// Warn for classes with 3 or more base classes.
// Notice that we don't count third-party classes 
// because this rule concerns your code design,
// not third-party libraries consumed design.
where baseClasses.Count() >= 3

select new { t, baseClasses, 
                
// The metric value DepthOfInheritance takes account
                // of third-party base classes
                t.DepthOfInheritance } 

// Branches too long in the derivation should be avoided.
// See the definition of the DepthOfInheritance metric here 
// http://www.jarchitect.com/Metrics#DIT

40 types matched

typesbaseClassesDepth of inheritanceFull Name
AbstractStyleNameConverter$Black3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Black
AbstractStyleNameConverter$Blue3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Blue
AbstractStyleNameConverter$Cyan3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Cyan
AbstractStyleNameConverter$Green3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Green
AbstractStyleNameConverter$Magenta3 types4org.apache.logging.log4j.core.pattern .AbstractStyleNameConverter$Magenta
AbstractStyleNameConverter$Red3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Red
AbstractStyleNameConverter$White3 types4org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$White
AbstractStyleNameConverter$Yellow3 types4org.apache.logging.log4j.core.pattern .AbstractStyleNameConverter$Yellow
ClassNamePatternConverter3 types4org.apache.logging.log4j.core.pattern.ClassNamePatternConverter
ExtendedThrowablePatternConverter3 types4org.apache.logging.log4j.core.pattern .ExtendedThrowablePatternConverter
LoggerPatternConverter3 types4org.apache.logging.log4j.core.pattern.LoggerPatternConverter
RootThrowablePatternConverter3 types4org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter
ConsoleAppender3 types4org.apache.logging.log4j.core.appender.ConsoleAppender
FileAppender3 types4org.apache.logging.log4j.core.appender.FileAppender
RandomAccessFileAppender3 types4org.apache.logging.log4j.core.appender.RandomAccessFileAppender
RollingFileAppender3 types4org.apache.logging.log4j.core.appender.RollingFileAppender
RollingRandomAccessFileAppender3 types4org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender
SocketAppender3 types4org.apache.logging.log4j.core.appender.SocketAppender
SyslogAppender4 types5org.apache.logging.log4j.core.appender.SyslogAppender
TLSSyslogAppender5 types6org.apache.logging.log4j.core.appender.TLSSyslogAppender
AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender3 types4org.apache.logging.log4j.core.appender.db .AbstractDatabaseAppenderTest$LocalAbstractDatabaseAppender
JDBCAppender3 types4org.apache.logging.log4j.core.appender.db.jdbc.JDBCAppender
JPAAppender3 types4org.apache.logging.log4j.core.appender.db.jpa.JPAAppender
NoSQLAppender3 types4org.apache.logging.log4j.core.appender.db.nosql.NoSQLAppender
RollingFileManager3 types4org.apache.logging.log4j.core.appender.rolling.RollingFileManager
RollingRandomAccessFileManager4 types5org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManager
OnStartupTriggeringPolicyTest$MyRollingManager4 types5org.apache.logging.log4j.core.appender.rolling .OnStartupTriggeringPolicyTest$MyRollingManager
DatagramSocketManager3 types4org.apache.logging.log4j.core.net.DatagramSocketManager
TCPSocketManager3 types4org.apache.logging.log4j.core.net.TCPSocketManager
TLSSocketManager4 types5org.apache.logging.log4j.core.net.TLSSocketManager
InMemoryAppender3 types4org.apache.logging.log4j.test.appender.InMemoryAppender
FlumePersistentManager3 types4org.apache.logging.log4j.flume.appender.FlumePersistentManager
DebugTag3 types6org.apache.logging.log4j.taglib.DebugTag
ErrorTag3 types6org.apache.logging.log4j.taglib.ErrorTag
FatalTag3 types6org.apache.logging.log4j.taglib.FatalTag
InfoTag3 types6org.apache.logging.log4j.taglib.InfoTag
LogTag3 types6org.apache.logging.log4j.taglib.LogTag
TraceTag3 types6org.apache.logging.log4j.taglib.TraceTag
WarnTag3 types6org.apache.logging.log4j.taglib.WarnTag
LoggingMessageTagSupportTest$13 types6org.apache.logging.log4j.taglib.LoggingMessageTagSupportTest$1

Statistics

Stat   baseClasses   Depth of inheritance
Sum:0182
Average:04.55
Minimum:04
Maximum:06
Standard deviation:00.84
Variance:00.7
Class with no descendant should be final if possible
// <Name>Class with no descendant should be final if possible</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.IsClass && 
  
t.NbChildren ==0 && 
 
!t.IsFinal && 
 
!t.IsStatic 
  
// && !t.IsPublic <-- You might want to add this condition 
  //                    if you are developping a framework
  //                    with classes that are intended to be 
  //                    sub-classed by your clients.
  orderby t.NbLinesOfCode descending
select new { t, t.NbLinesOfCode }

710 types matched

types# lines of code (LOC)Full Name
AbstractLoggerTest514org.apache.logging.log4j.AbstractLoggerTest
NoSQLDatabaseManagerTest351org.apache.logging.log4j.core.appender.db.nosql .NoSQLDatabaseManagerTest
RFC5424Layout280org.apache.logging.log4j.core.layout.RFC5424Layout
Log4jWebInitializerImplTest266org.apache.logging.log4j.core.web.Log4jWebInitializerImplTest
RFC5424LayoutTest241org.apache.logging.log4j.core.layout.RFC5424LayoutTest
ParameterizedMessage224org.apache.logging.log4j.message.ParameterizedMessage
DefaultThreadContextStackTest222org.apache.logging.log4j.spi.DefaultThreadContextStackTest
MutableThreadContextStackTest222org.apache.logging.log4j.spi.MutableThreadContextStackTest
LoggerTest221org.apache.log4j.LoggerTest
TestConfigurator219org.apache.logging.log4j.core.config.TestConfigurator
StrSubstitutor218org.apache.logging.log4j.core.lookup.StrSubstitutor
ThrowableProxy211org.apache.logging.log4j.core.impl.ThrowableProxy
FlumePersistentManager$WriterThread210org.apache.logging.log4j.flume.appender .FlumePersistentManager$WriterThread
LoggerTest208org.apache.logging.log4j.LoggerTest
FlumeAppenderTest199org.apache.logging.log4j.flume.appender.FlumeAppenderTest
XMLConfiguration193org.apache.logging.log4j.core.config.XMLConfiguration
FlumePersistentAppenderTest191org.apache.logging.log4j.flume.appender.FlumePersistentAppenderTest
SLF4JLogger176org.slf4j.impl.SLF4JLogger
JSONConfiguration173org.apache.logging.log4j.core.config.JSONConfiguration
XMLLayout171org.apache.logging.log4j.core.layout.XMLLayout
JSONLayout164org.apache.logging.log4j.core.layout.JSONLayout
DebugDisabledPerformanceComparison151org.apache.logging.log4j.DebugDisabledPerformanceComparison
AbstractDatabaseManagerTest146org.apache.logging.log4j.core.appender.db.AbstractDatabaseManagerTest
DefaultRolloverStrategy145org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy
LoggingMessageTagSupportTest139org.apache.logging.log4j.taglib.LoggingMessageTagSupportTest
FlumeEmbeddedAppenderTest138org.apache.logging.log4j.flume.appender.FlumeEmbeddedAppenderTest
LoggerTest132org.apache.logging.log4j.core.LoggerTest
ResolverUtil131org.apache.logging.log4j.core.config.plugins.ResolverUtil
PluginManager130org.apache.logging.log4j.core.config.plugins.PluginManager
MulticastDNSAdvertiser121org.apache.logging.log4j.core.net.MulticastDNSAdvertiser
FlumeEmbeddedAgentTest121org.apache.logging.log4j.flume.appender.FlumeEmbeddedAgentTest
PatternProcessor119org.apache.logging.log4j.core.appender.rolling.PatternProcessor
FileAppenderTest117org.apache.logging.log4j.core.appender.FileAppenderTest
ThrowableAttributeConverter115org.apache.logging.log4j.core.appender.db.jpa.converter .ThrowableAttributeConverter
ClassLoaderContextSelector113org.apache.logging.log4j.core.selector.ClassLoaderContextSelector
SSLConfiguration113org.apache.logging.log4j.core.net.ssl.SSLConfiguration
DefaultThreadContextStack110org.apache.logging.log4j.spi.DefaultThreadContextStack
PatternProcessorTest109org.apache.logging.log4j.core.appender.rolling.PatternProcessorTest
ThreadContextInheritanceTest108org.apache.logging.log4j.ThreadContextInheritanceTest
SetLoggerTagTest104org.apache.logging.log4j.taglib.SetLoggerTagTest
SmtpRequest102org.apache.logging.dumbster.smtp.SmtpRequest
FlumePersistentManager102org.apache.logging.log4j.flume.appender.FlumePersistentManager
SMTPManager101org.apache.logging.log4j.core.net.SMTPManager
ThreadContextTest100org.apache.logging.log4j.ThreadContextTest
ExtendedThreadInformation99org.apache.logging.log4j.message.ExtendedThreadInformation
SimpleSmtpServer99org.apache.logging.dumbster.smtp.SimpleSmtpServer
PerformanceComparison98org.apache.logging.log4j.PerformanceComparison
ClientGUI98org.apache.logging.log4j.jmx.gui.ClientGUI
DefaultThreadContextMapTest97org.apache.logging.log4j.spi.DefaultThreadContextMapTest
Log4jLogEvent97org.apache.logging.log4j.core.impl.Log4jLogEvent
Timer96org.apache.logging.log4j.Timer
Timer96org.apache.logging.log4j.core.Timer
DriverManagerConnectionSourceTest95org.apache.logging.log4j.core.appender.db.jdbc .DriverManagerConnectionSourceTest
Log4jServletContainerInitializerTest94org.apache.logging.log4j.core.web.Log4jServletContainerInitializerTest
LocalizedMessage93org.apache.logging.log4j.message.LocalizedMessage
ColumnConfigTest92org.apache.logging.log4j.core.appender.db.jdbc.ColumnConfigTest
PatternLayoutTest91org.apache.logging.log4j.core.layout.PatternLayoutTest
SMTPAppenderTest91org.apache.logging.log4j.core.appender.SMTPAppenderTest
LevelPatternConverterTest89org.apache.logging.log4j.core.pattern.LevelPatternConverterTest
LoggerTest88org.apache.logging.slf4j.LoggerTest
AsyncLogger87org.apache.logging.log4j.core.async.AsyncLogger
SocketAppenderTest86org.apache.logging.log4j.core.appender.SocketAppenderTest
FlumeEvent86org.apache.logging.log4j.flume.appender.FlumeEvent
LoggerStreamTest85org.apache.logging.log4j.spi.LoggerStreamTest
FlumePersistentPerf85org.apache.logging.log4j.flume.appender.FlumePersistentPerf
PerfTestDriver84org.apache.logging.log4j.core.async.perftest.PerfTestDriver
PerfTestResultFormatter84org.apache.logging.log4j.core.async.perftest.PerfTestResultFormatter
ThrowablePatternConverterTest81org.apache.logging.log4j.core.pattern.ThrowablePatternConverterTest
AsyncLoggerConfigHelper81org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper
CategoryTest80org.apache.log4j.CategoryTest
LoggerContextAdmin77org.apache.logging.log4j.core.jmx.LoggerContextAdmin
ListAppender77org.apache.logging.log4j.test.appender.ListAppender
StrictXMLConfigTest76org.apache.logging.log4j.core.StrictXMLConfigTest
Log4jServletFilterTest75org.apache.logging.log4j.core.web.Log4jServletFilterTest
LevelTest75org.apache.log4j.LevelTest
SimplePerfTest73org.apache.logging.log4j.core.SimplePerfTest
MapRewritePolicyTest73org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicyTest
LoggerTest73org.apache.logging.slf4j.LoggerTest
FilterPerformanceComparison72org.apache.logging.log4j.FilterPerformanceComparison
RollingRandomAccessFileManagerTest72org.apache.logging.log4j.core.appender.rolling .RollingRandomAccessFileManagerTest
XMLConfigurationTest71org.apache.logging.log4j.core.config.XMLConfigurationTest
SLF4JLogger71org.apache.logging.slf4j.SLF4JLogger
FlumeEmbeddedManager$FlumeManagerFactory71org.apache.logging.log4j.flume.appender .FlumeEmbeddedManager$FlumeManagerFactory
BurstFilterTest70org.apache.logging.log4j.core.filter.BurstFilterTest
FileRenameActionTest69org.apache.logging.log4j.core.appender.rolling.helper .FileRenameActionTest
ConfigurationFactory$Factory68org.apache.logging.log4j.core.config.ConfigurationFactory$Factory
LoggerAwareTagSupportTest67org.apache.logging.log4j.taglib.LoggerAwareTagSupportTest
MessageFormatsPerfTest66org.apache.logging.log4j.message.MessageFormatsPerfTest
ResolverUtilTest66org.apache.logging.log4j.core.config.plugins.ResolverUtilTest
FormattedMessage65org.apache.logging.log4j.message.FormattedMessage
AbstractDatabaseAppenderTest64org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppenderTest
SimpleLogger62org.apache.logging.log4j.simple.SimpleLogger
PerformanceRun62org.apache.logging.log4j.PerformanceRun
RingBufferLogEventTest62org.apache.logging.log4j.core.async.RingBufferLogEventTest
PatternParserTest60org.apache.logging.log4j.core.pattern.PatternParserTest
SocketReconnectTest60org.apache.logging.log4j.core.net.SocketReconnectTest
Logger$PrivateConfig59org.apache.logging.log4j.core.Logger$PrivateConfig
ThreadContextMapFilter59org.apache.logging.log4j.core.filter.ThreadContextMapFilter
WebLookupTest59org.apache.logging.log4j.core.web.WebLookupTest
AdvertiserTest58org.apache.logging.log4j.core.config.AdvertiserTest

Statistics

Stat   # lines of code (LOC)
Sum:22 035
Average:31.04
Minimum:0
Maximum:514
Standard deviation:46.84
Variance:2 193
Avoid the Singleton pattern
//<Name>Avoid the Singleton pattern</Name>
warnif count > 0
from t in Application.Types
where !t.IsStatic && !t.IsAbstract && t.IsClass 

// All ctors of a singleton are private
where t.Constructors.Where(ctor => !ctor.IsPrivate).Count() == 0

// A singleton contains one static field of its parent type, to reference the unique instance
let staticFieldInstances = t.StaticFields.WithFieldType(t)
where staticFieldInstances.Count() == 1
select new { t, staticFieldInstance = staticFieldInstances.First() }

// The Singleton pattern consists in syntactically enforcing that a class 
// has just one unique instance.
// At first glance, this pattern looks appealing and it is widely used.
// However, we discourage you from using singleton classes because experience
// shows that singletons often result in less testable and less maintainable code.
// More details available in these discussions:
//  http://codebetter.com/patricksmacchia/2011/05/04/back-to-basics-usage-of-static-members/
//  http://adamschepis.com/blog/2011/05/02/im-adam-and-im-a-recovering-singleton-addict/

17 types matched

typesstaticFieldInstanceFull Name
StatusLoggerSTATUS_LOGGERorg.apache.logging.log4j.status.StatusLogger
CachedClockinstanceorg.apache.logging.log4j.core.helpers.CachedClock
CoarseCachedClockinstanceorg.apache.logging.log4j.core.helpers.CoarseCachedClock
FileLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.FileLocationPatternConverter
FullLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.FullLocationPatternConverter
IntegerPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.IntegerPatternConverter
LevelPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LevelPatternConverter
LineLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LineLocationPatternConverter
LineSeparatorPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter
LoggerPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.LoggerPatternConverter
MethodLocationPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.MethodLocationPatternConverter
NDCPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.NDCPatternConverter
SequenceNumberPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter
ThreadPatternConverterINSTANCEorg.apache.logging.log4j.core.pattern.ThreadPatternConverter
NullEnumerationINSTANCEorg.apache.log4j.helpers.NullEnumeration
StaticLoggerBinderSINGLETONorg.slf4j.impl.StaticLoggerBinder
StaticMDCBinderSINGLETONorg.slf4j.impl.StaticMDCBinder

Statistics

Stat   staticFieldInstance
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
Don't assign static fields from instance methods
// <Name>Don't assign static fields from instance methods</Name>
// Assigning static fields from instance methods leads to
// poorly maintainable and non thread-safe code.
// It is advised to assign static fields inline or from class constructor.
warnif count > 0
from f in Application.Fields where 
  
f.IsStatic &&
 
!f.IsLiteral &&
 
!f.IsInitOnly &&
 
!f.IsGeneratedByCompiler &&
  
// Contract API define such a insideContractEvaluation static field
  f.Name != "insideContractEvaluation"
let assignedBy = f.MethodsAssigningMe.Where(m => !m.IsStatic)
where assignedBy .Count() > 0
select new { f, assignedBy }

40 fields matched

fieldsassignedByFull Name
currentLevel12 methodsorg.apache.logging.log4j.AbstractLoggerTest.currentLevel
stringTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.stringTime
paramTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.paramTime
msgFormatTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.msgFormatTime
formattedTime1 methodorg.apache.logging.log4j.message.MessageFormatsPerfTest.formattedTime
list11 methodorg.apache.logging.log4j.core.ExtendedLevelTest.list1
list21 methodorg.apache.logging.log4j.core.ExtendedLevelTest.list2
config1 methodorg.apache.logging.log4j.core.FileConfigTest.config
app1 methodorg.apache.logging.log4j.core.FileConfigTest.app
config1 methodorg.apache.logging.log4j.core.HostNameTest.config
app1 methodorg.apache.logging.log4j.core.HostNameTest.app
host1 methodorg.apache.logging.log4j.core.HostNameTest.host
hostFile1 methodorg.apache.logging.log4j.core.HostNameTest.hostFile
ctx1 methodorg.apache.logging.log4j.core.LateConfigTest.ctx
config1 methodorg.apache.logging.log4j.core.LoggerDateTest.config
fileApp1 methodorg.apache.logging.log4j.core.LoggerDateTest.fileApp
config1 methodorg.apache.logging.log4j.core.LoggerTest.config
app1 methodorg.apache.logging.log4j.core.LoggerTest.app
host1 methodorg.apache.logging.log4j.core.LoggerTest.host
noThrown1 methodorg.apache.logging.log4j.core.LoggerTest.noThrown
config1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.config
app1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.app
host1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.host
noThrown1 methodorg.apache.logging.log4j.core.LoggerUpdateTest.noThrown
config1 methodorg.apache.logging.log4j.core.ShutdownDisabledTest.config
tcpCount1 methodorg.apache.logging.log4j.core.appender.SocketAppenderTest.tcpCount
udpCount1 methodorg.apache.logging.log4j.core.appender.SocketAppenderTest.udpCount
verbose1 methodorg.apache.logging.log4j.core.async.perftest.PerfTest.verbose
throughput5 methodsorg.apache.logging.log4j.core.async.perftest.PerfTest.throughput
pluginTypeMap1 methodorg.apache.logging.log4j.core.config.plugins.PluginManager .pluginTypeMap
receiver1 methodorg.apache.logging.log4j.core.net.JMSQueueFailoverTest.receiver
config1 methodorg.apache.logging.log4j.core.net.JMSQueueFailoverTest.config
app1 methodorg.apache.logging.log4j.core.net.JMSQueueFailoverTest.app
config1 methodorg.apache.logging.log4j.core.net.JMSTopicFailoverTest.config
app1 methodorg.apache.logging.log4j.core.net.JMSTopicFailoverTest.app
config1 methodorg.apache.log4j.LoggingTest.config
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumeEmbeddedAgentTest.ctx
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumeEmbeddedAppenderTest.ctx
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumePersistentAppenderTest .ctx
ctx1 methodorg.apache.logging.log4j.flume.appender.FlumePersistentPerf.ctx

Statistics

Stat   assignedBy
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0
Avoid empty interfaces
// <Name>Avoid empty interfaces</Name>
warnif count > 0 from t in JustMyCode.Types where 
  
t.IsInterface && 
  
t.NbMethods == 0
select new { t, t.TypesThatImplementMe }

// Interfaces define members that provide a behavior 
// or usage contract. The functionality described by 
// the interface can be adopted by any type, 
// regardless of where the type appears in the 
// inheritance hierarchy. A type implements an 
// interface by providing implementations for the 
// interface's members. An empty interface does not 
// define any members, and as such, does not define 
// a contract that can be implemented.

// If your design includes empty interfaces that 
// types are expected to implement, you are probably 
// using an interface as a marker, or a way of 
// identifying a group of types. If this identification 
// will occur at runtime, the correct way to accomplish
// this is to use a custom attribute. Use the presence 
// or absence of the attribute, or the attribute's 
// properties, to identify the target types. If the 
// identification must occurs at compile time, then using 
// an empty interface is acceptable.

1 types matched

typeTypesThatImplementMeFull Name
AnsiConverter2 typesorg.apache.logging.log4j.core.pattern.AnsiConverter

Statistics

Stat   TypesThatImplementMe
Sum:0
Average:0
Minimum:0
Maximum:0
Standard deviation:0
Variance:0

API Breaking Changes

API Breaking Changes: Types
// <Name>API Breaking Changes: Types</Name>
// This rule warns if a publicly visible type is 
// not publicly visible anymore or if it has been removed.
// Such type can break the code of your clients.

warnif count > 0 from t in codeBase.OlderVersion().Application.Types
where t.IsPubliclyVisible && 

     
// The type has been removed and its parent project hasn't been removed ...
     ( (t.WasRemoved() && !t.ParentProject.WasRemoved()) ||

     
// ... or the type is not publicly visible anymore
       !t.WasRemoved() && !t.NewerVersion().IsPubliclyVisible)

select new { t,
             
NewVisibility = (t.WasRemoved() ? " " : t.NewerVersion().Visibility.ToString()) }

No types matched

API Breaking Changes: Methods
// <Name>API Breaking Changes: Methods</Name>
// This rule warns if a publicly visible method is 
// not publicly visible anymore or if it has been removed.
// Such method can break the code of your clients.

warnif count > 0 from m in codeBase.OlderVersion().Application.Methods
where m.IsPubliclyVisible && 

     
// The method has been removed and its parent type hasn't been removed ...
     ( (m.WasRemoved() && !m.ParentType.WasRemoved()) ||

     
// ... or the method is not publicly visible anymore
       !m.WasRemoved() && !m.NewerVersion().IsPubliclyVisible)

select new { m,
             
NewVisibility = (m.WasRemoved() ? " " : m.NewerVersion().Visibility.ToString()) }

No methods matched

API Breaking Changes: Fields
// <Name>API Breaking Changes: Fields</Name>
// This rule warns if a publicly visible field is 
// not publicly visible anymore or if it has been removed.
// Such field can break the code of your clients.

warnif count > 0 from f in codeBase.OlderVersion().Application.Fields
where f.IsPubliclyVisible &&

     
// The field has been removed and its parent type hasn't been removed ...
     ( (f.WasRemoved() && !f.ParentType.WasRemoved()) ||

     
// ... or the field is not publicly visible anymore
       !f.WasRemoved() && !f.NewerVersion().IsPubliclyVisible)

select new { f,
             
NewVisibility = (f.WasRemoved() ? " " : f.NewerVersion().Visibility.ToString()) }

No fields matched

API Breaking Changes: Interfaces and Abstract Classes
// <Name>API Breaking Changes: Interfaces and Abstract Classes</Name>
// This rule warns if a publicly visible interface or abstract class 
// has been changed and contains new abstract methods or 
// if some abstract methods have been removed.
// This can break the code of clients 
// that implement such interface or derive from such abstract class.

warnif count > 0 from tNewer in Application.Types where 
 
(tNewer.IsInterface || tNewer.IsClass && tNewer.IsAbstract) && 
  
tNewer.IsPubliclyVisible && 
  
tNewer.IsPresentInBothBuilds()

let tOlder = tNewer.OlderVersion() where tOlder.IsPubliclyVisible

let methodsRemoved = tOlder.Methods.Where(m => m.IsAbstract && m.WasRemoved())
let methodsAdded = tNewer.Methods.Where(m2 => m2.IsAbstract && m2.WasAdded())

where methodsAdded.Count() > 0 || methodsRemoved.Count() > 0
select new { tNewer, methodsAdded, methodsRemoved }

No types matched

Avoid transforming immutable types into mutable types
// <Name>Avoid transforming immutable types into mutable types</Name>

// Immutability is a strong property on a type.
// Breaking immutability can result in serious problem for an algorithm consummer
// that has been written taking account of the type immutability.

// To visualize changes in code, right-click a matched type and select:
//  - Compare older and newer versions of source file
//  - Compare older and newer versions disassembled with Reflector

warnif count > 0 
from t in Application.Types where
  
t.IsPresentInBothBuilds() &&
 
!t.IsStatic &&
 
!t.IsImmutable && 
  
t.OlderVersion().IsImmutable

let mutableFields = from f in t.InstanceFields where !f.IsImmutable select f

select new { t, mutableFields }

No types matched

API: New publicly visible types
// <Name>API: New publicly visible types</Name>
// List types that are new in the public surface of your projects

from t in Application.Types
where t.IsPubliclyVisible && 

     
// The type has been removed and its parent project hasn't been removed ...
     ( (t.WasAdded() && !t.ParentProject.WasAdded()) ||

     
// ... or the type existed but was not publicly visible
       !t.WasAdded() && !t.OlderVersion().IsPubliclyVisible)

select new { t,
             
OldVisibility = (t.WasAdded() ? " " : t.OlderVersion().Visibility.ToString()) }

No types matched

API: New publicly visible methods
// <Name>API: New publicly visible methods</Name>
// List methods that are new in the public surface of your projects

from m in Application.Methods
where m.IsPubliclyVisible && 

     
// The method has been removed and its parent project hasn'm been removed ...
     ( (m.WasAdded() && !m.ParentType.WasAdded()) ||

     
// ... or the t existed but was not publicly visible
       !m.WasAdded() && !m.OlderVersion().IsPubliclyVisible)

select new { m,
             
OldVisibility = (m.WasAdded() ? " " : m.OlderVersion().Visibility.ToString()) }

No methods matched

API: New publicly visible fields
// <Name>API: New publicly visible fields</Name>
// List fields that are new in the public surface of your projects

from f in Application.Fields
where f.IsPubliclyVisible && 

     
// The method has been removed and its parent project hasn'f been removed ...
     ( (f.WasAdded() && !f.ParentType.WasAdded()) ||

     
// ... or the t existed but was not publicly visible
       !f.WasAdded() && !f.OlderVersion().IsPubliclyVisible)

select new { f,
             
OldVisibility = (f.WasAdded() ? " " : f.OlderVersion().Visibility.ToString()) }

No fields matched

Code Diff Summary

New projects
// <Name>New projects</Name>
from a in Application.Projects where a.WasAdded()
select new { a, a.NbLinesOfCode }

No projects matched

Projects removed
// <Name>Projects removed</Name>
from a in codeBase.OlderVersion().Application.Projects where a.WasRemoved()
select new { a, a.NbLinesOfCode }

No projects matched

Projects where code was changed
// <Name>Projects where code was changed</Name>
from a in Application.Projects where a.CodeWasChanged()
select new { a, a.NbLinesOfCode, 
             
oldNbLinesOfCode = a.OlderVersion().NbLinesOfCode.GetValueOrDefault() ,
             
delta = (int) a.NbLinesOfCode.GetValueOrDefault() - a.OlderVersion().NbLinesOfCode.GetValueOrDefault() }

No projects matched

New packages
// <Name>New packages</Name>
from n in Application.Packages where 
 
!n.ParentProject.WasAdded() &&
  
n.WasAdded()
select new { n, n.NbLinesOfCode }

No packages matched

Packages removed
// <Name>Packages removed</Name>
from n in codeBase.OlderVersion().Application.Packages where 
 
!n.ParentProject.WasRemoved() &&
  
n.WasRemoved()
select new { n, n.NbLinesOfCode }

No packages matched

Packages where code was changed
// <Name>Packages where code was changed</Name>
from n in Application.Packages where n.CodeWasChanged()
select new { n, n.NbLinesOfCode, 
             
oldNbLinesOfCode = n.OlderVersion().NbLinesOfCode.GetValueOrDefault() ,
             
delta = (int) n.NbLinesOfCode.GetValueOrDefault() - n.OlderVersion().NbLinesOfCode.GetValueOrDefault() }

No packages matched

New types
// <Name>New types</Name>
from t in Application.Types where 
 
!t.ParentPackage.WasAdded() &&
  
t.WasAdded()
select new { t, t.NbLinesOfCode }

No types matched

Types removed
// <Name>Types removed</Name>
from t in codeBase.OlderVersion().Application.Types where 
 
!t.ParentPackage.WasRemoved() &&
  
t.WasRemoved()
select new { t, t.NbLinesOfCode }

No types matched

Types where code was changed
// <Name>Types where code was changed</Name>
// To visualize changes in code, right-click a matched type and select:
//  - Compare older and newer versions of source file
//  - Compare older and newer versions disassembled with Reflector

from t in Application.Types where t.CodeWasChanged() 
//select new { t, t.NbLinesOfCode }
select new { t, t.NbLinesOfCode, 
             
oldNbLinesOfCode = t.OlderVersion().NbLinesOfCode ,
             
delta = (int?) t.NbLinesOfCode - t.OlderVersion().NbLinesOfCode } 
/*from t in Application.Types where t.CodeWasChanged() && t.IsPresentInBothBuild
select new { t, t.NbLinesOfCode, 
             oldNbLinesOfCode = t.OlderVersion().NbLinesOfCode ,
             delta = (int) t.NbLinesOfCode - t.OlderVersion().NbLinesOfCode }*/

No types matched

Heuristic to find types moved from one package or project to another
// <Name>Heuristic to find types moved from one package or project to another</Name>
let typesRemoved = codeBase.OlderVersion().Types.Where(t => t.WasRemoved())
let typesAdded = Types.Where(t2 => t2.WasAdded())

from tMoved in typesAdded.Join(
   
typesRemoved,
   
t3 => t3.Name,
   
t4 => t4.Name,
   
(tNewer, tOlder) => new { tNewer, 
                             
OlderParentpackage = tOlder.ParentPackage,
                             
OlderParentproject = tOlder.ParentProject  } ) 
select tMoved

No types matched

Types directly using one or several types changed
// <Name>Types directly using one or several types changed</Name>
let typesChanged = Application.Types.Where(t2 => t2.CodeWasChanged()).ToHashSet()

from t in JustMyCode.Types.UsingAny(typesChanged) where
  
!t.CodeWasChanged() && 
  
!t.WasAdded()
let typesChangedUsed = t.TypesUsed.Intersect(typesChanged) 
select new { t, typesChangedUsed }

No types matched

Types indirectly using one or several types changed
// <Name>Types indirectly using one or several types changed</Name>
let typesChanged = Application.Types.Where(t2 => t2.CodeWasChanged()).ToHashSet()

// 'depth' represents a code metric defined on types using
// directly or indirectly any type where code was changed.
let depth = JustMyCode.Types.DepthOfIsUsingAny(typesChanged) 

from t in depth.DefinitionDomain where
  
!t.CodeWasChanged() && 
  
!t.WasAdded()

let typesChangedDirectlyUsed = t.TypesUsed.Intersect(typesChanged) 
let depthOfUsingTypesChanged = depth[t]
orderby depthOfUsingTypesChanged 

select new { t, depthOfUsingTypesChanged, typesChangedDirectlyUsed }

No types matched

New methods
// <Name>New methods</Name>
from m in Application.Methods where 
 
!m.ParentType.WasAdded() &&
  
m.WasAdded()
select new { m, m.NbLinesOfCode }

No methods matched

Methods removed
// <Name>Methods removed</Name>
from m in codeBase.OlderVersion().Application.Methods where 
 
!m.ParentType.WasRemoved() &&
  
m.WasRemoved()
select new { m, m.NbLinesOfCode }

No methods matched

Methods where code was changed
// <Name>Methods where code was changed</Name>
// To visualize changes in code, right-click a matched method and select:
//  - Compare older and newer versions of source file
//  - Compare older and newer versions disassembled with Reflector

from m in Application.Methods where m.CodeWasChanged()
select new { m, m.NbLinesOfCode, 
             
oldNbLinesOfCode = m.OlderVersion().NbLinesOfCode ,
             
delta = (int?) m.NbLinesOfCode - m.OlderVersion().NbLinesOfCode }

No methods matched

Methods directly calling one or several methods changed
// <Name>Methods directly calling one or several methods changed</Name>
let methodsChanged = Application.Methods.Where(m2 => m2.CodeWasChanged()).ToHashSet()

from m in JustMyCode.Methods.UsingAny(methodsChanged ) where
  
!m.CodeWasChanged() && 
  
!m.WasAdded()
let methodsChangedCalled = m.MethodsCalled.Intersect(methodsChanged) 
select new { m, methodsChangedCalled }

No methods matched

Methods indirectly calling one or several methods changed
// <Name>Methods indirectly calling one or several methods changed</Name>
let methodsChanged = Application.Methods.Where(m2 => m2.CodeWasChanged()).ToHashSet()

// 'depth' represents a code metric defined on methods using
// directly or indirectly any method where code was changed.
let depth = JustMyCode.Methods.DepthOfIsUsingAny(methodsChanged) 

from m in depth.DefinitionDomain where
  
!m.CodeWasChanged() && 
  
!m.WasAdded()

let methodsChangedDirectlyUsed = m.MethodsCalled.Intersect(methodsChanged) 
let depthOfUsingMethodsChanged = depth[m]
orderby depthOfUsingMethodsChanged 

select new { m, depthOfUsingMethodsChanged, methodsChangedDirectlyUsed }

No methods matched

New fields
// <Name>New fields</Name>
from f in Application.Fields where 
 
!f.ParentType.WasAdded() &&
  
f.WasAdded()
select new { f }

No fields matched

Fields removed
// <Name>Fields removed</Name>
from f in codeBase.OlderVersion().Application.Fields where 
 
!f.ParentType.WasRemoved() &&
  
f.WasRemoved()
select new { f }

No fields matched

Third party types that were not used and that are now used
// <Name>Third party types that were not used and that are now used</Name>
from t in ThirdParty.Types where t.IsUsedRecently()
select new { t, t.Methods, t.Fields, t.TypesUsingMe }

No types matched

Third party types that were used and that are not used anymore
// <Name>Third party types that were used and that are not used anymore</Name>
from t in codeBase.OlderVersion().Types where t.IsNotUsedAnymore()
select new { t, t.Methods, t.Fields, TypesThatUsedMe = t.TypesUsingMe }

No types matched

Third party methods that were not used and that are now used
// <Name>Third party methods that were not used and that are now used</Name>
from m in ThirdParty.Methods where 
  
m.IsUsedRecently() &&
 
!m.ParentType.IsUsedRecently()
select new { m, m.MethodsCallingMe }

No methods matched

Third party methods that were used and that are not used anymore
// <Name>Third party methods that were used and that are not used anymore</Name>
from m in codeBase.OlderVersion().Methods where 
  
m.IsNotUsedAnymore() &&
 
!m.ParentType.IsNotUsedAnymore()
select new { m, MethodsThatCalledMe = m.MethodsCallingMe}

No methods matched

Third party fields that were not used and that are now used
// <Name>Third party fields that were not used and that are now used</Name>
from f in ThirdParty.Fields where 
  
f.IsUsedRecently() &&
 
!f.ParentType.IsUsedRecently()
select new { f, f.MethodsUsingMe }

No fields matched

Third party fields that were used and that are not used anymore
// <Name>Third party fields that were used and that are not used anymore</Name>
from f in codeBase.OlderVersion().Fields where 
  
f.IsNotUsedAnymore() &&
 
!f.ParentType.IsNotUsedAnymore()
select new { f, MethodsThatUsedMe = f.MethodsUsingMe }

No fields matched

Dead Code

Potentially dead Types
// <Name>Potentially dead Types</Name>
warnif count > 0
// Filter procedure for types that should'nt be considered as dead
let canTypeBeConsideredAsDeadProc = new Func<IType, bool>(
   
t2 => !t2.IsPublic && //   Public types might be used by client applications of your projects.
         t2.Name != "Program" && 
        
!t2.IsGeneratedByCompiler 
        
)

// Select types unused
let typesUnused = 
   
from t4 in JustMyCode.Types where
   
t4.NbTypesUsingMe == 0 && canTypeBeConsideredAsDeadProc(t4)
   
select t4

// Dead types = types used only by unused types (recursive)
let deadTypesMetric = typesUnused.FillIterative(
types => from t3 in codeBase.Application.Types.UsedByAny(types).Except(types)
         
where canTypeBeConsideredAsDeadProc(t3) &&
               
t3.TypesUsingMe.Intersect(types).Count() == t3.NbTypesUsingMe
         
select t3)

from t in deadTypesMetric.DefinitionDomain
select new { t, t.TypesUsingMe, depth = deadTypesMetric[t] }

2 types matched

typesTypesUsingMedepthFull Name
ClockFactoryTest$MyClock0 type0org.apache.logging.log4j.core.helpers.ClockFactoryTest$MyClock
CachedDateFormat0 type0org.apache.logging.log4j.core.pattern.CachedDateFormat

Statistics

Stat   TypesUsingMe   depth
Sum:00
Average:00
Minimum:00
Maximum:00
Standard deviation:00
Variance:00
Potentially dead Methods
// <Name>Potentially dead Methods</Name>
warnif count > 0
// Filter procedure for methods that should'nt be considered as dead
let canMethodBeConsideredAsDeadProc = new Func<IMethod, bool>(
    
m => !m.IsPubliclyVisible &&       // Public methods might be used by client applications of your projects.
         !m.IsEntryPoint &&            // Main() method is not used by-design.
         !m.IsClassConstructor &&      // The BC code never explicitely calls class constructors.
         !(m.IsConstructor &&          // Don't take account of protected ctor that might be call by a derived ctors.
           m.IsProtected) &&
         
!m.IsGeneratedByCompiler)

// Get methods unused
let methodsUnused = 
   
from m2 in JustMyCode.Methods where 
   
m2.NbMethodsCallingMe == 0 && 
   
canMethodBeConsideredAsDeadProc(m2)
   
select m2

// Dead methods = methods used only by unused methods (recursive)
let deadMethodsMetric = methodsUnused.FillIterative(
   
methods => // Unique loop, just to let a chance to build the hashset.
              from o in (new object()).ToEnumerable()
              
// Use a hashet to make Intersect calls much faster!
              let hashset = methods.ToHashSet()
              
from m3 in codeBase.Application.Methods.UsedByAny(methods).Except(methods)
              
where canMethodBeConsideredAsDeadProc(m3) &&
                    
// Select methods called only by methods already considered as dead
                    hashset.Intersect(m3.MethodsCallingMe).Count() == m3.NbMethodsCallingMe
              
select m3)

from m4 in JustMyCode.Methods.Intersect(deadMethodsMetric.DefinitionDomain)
select new { m4, m4.MethodsCallingMe, depth = deadMethodsMetric[m4] }

313 methods matched

methodsMethodsCallingMedepthFull Name
EventLogger()0 method0org.apache.logging.log4j.EventLogger.EventLogger()
getName()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.getName()
getParent()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.getParent()
isInstanceOf(Marker)0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.isInstanceOf(Marker )
isInstanceOf(String)0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.isInstanceOf(String )
equals(Object)0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.equals(Object)
hashCode()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.hashCode()
toString()0 method0org.apache.logging.log4j.MarkerManager$Log4jMarker.toString()
MarkerManager()0 method0org.apache.logging.log4j.MarkerManager.MarkerManager()
ThreadContext()0 method0org.apache.logging.log4j.ThreadContext.ThreadContext()
run()0 method0org.apache.logging.log4j.ThreadContextInheritanceTest$TestThread.run()
run()0 method0org.apache.logging.log4j.ThreadContextTest$TestThread.run()
BasicThreadInformation(Thread)1 method1org.apache.logging.log4j.message.BasicThreadInformation .BasicThreadInformation(Thread)
equals(Object)0 method0org.apache.logging.log4j.message.BasicThreadInformation.equals(Object)
hashCode()0 method0org.apache.logging.log4j.message.BasicThreadInformation.hashCode()
printThreadInfo(StringBuilder)0 method0org.apache.logging.log4j.message.BasicThreadInformation .printThreadInfo(StringBuilder)
printStack(StringBuilder,StackTraceElement[])0 method0org.apache.logging.log4j.message.BasicThreadInformation.printStack (StringBuilder,StackTraceElement[])
ExtendedThreadInformation(ThreadInfo)1 method1org.apache.logging.log4j.message.ExtendedThreadInformation .ExtendedThreadInformation(ThreadInfo)
printThreadInfo(StringBuilder)0 method0org.apache.logging.log4j.message.ExtendedThreadInformation .printThreadInfo(StringBuilder)
printStack(StringBuilder,StackTraceElement[])0 method0org.apache.logging.log4j.message.ExtendedThreadInformation.printStack (StringBuilder,StackTraceElement[])
formatLock(StringBuilder,LockInfo)1 method1org.apache.logging.log4j.message.ExtendedThreadInformation.formatLock (StringBuilder,LockInfo)
formatState(StringBuilder,ThreadInfo)1 method1org.apache.logging.log4j.message.ExtendedThreadInformation.formatState (StringBuilder,ThreadInfo)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.FormattedMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.FormattedMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.LocalizedMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.LocalizedMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.MessageFormatMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.MessageFormatMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.ObjectMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.ObjectMessage.readObject (ObjectInputStream)
writeObject(ObjectOutputStream)0 method0org.apache.logging.log4j.message.StringFormattedMessage.writeObject (ObjectOutputStream)
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.StringFormattedMessage.readObject (ObjectInputStream)
createThreadInfo()0 method0org.apache.logging.log4j.message .ThreadDumpMessage$BasicThreadInfoFactory.createThreadInfo()
createThreadInfo()0 method0org.apache.logging.log4j.message .ThreadDumpMessage$ExtendedThreadInfoFactory.createThreadInfo()
readResolve()0 method0org.apache.logging.log4j.message .ThreadDumpMessage$ThreadDumpMessageProxy.readResolve()
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.message.ThreadDumpMessage.readObject (ObjectInputStream)
run()0 method0org.apache.logging.log4j.message.ThreadDumpMessageTest$Thread1.run()
run()0 method0org.apache.logging.log4j.message.ThreadDumpMessageTest$Thread2.run()
log(int)1 method2org.apache.logging.log4j.spi.LoggerStream$HelperStream.log(int)
extractLine(int)1 method3org.apache.logging.log4j.spi.LoggerStream$HelperStream.extractLine(int )
leftShiftBuffer(int)1 method4org.apache.logging.log4j.spi.LoggerStream$HelperStream.leftShiftBuffer (int)
write(int)1 method1org.apache.logging.log4j.spi.LoggerStream$HelperStream.write(int)
write(byte[],int,int)0 method0org.apache.logging.log4j.spi.LoggerStream$HelperStream.write(byte[] ,int,int)
StatusLogger$BoundedQueue<E>(StatusLogger,int)1 method1org.apache.logging.log4j.status.StatusLogger$BoundedQueue .StatusLogger$BoundedQueue<E>(StatusLogger,int)
add(Object)0 method0org.apache.logging.log4j.status.StatusLogger$BoundedQueue.add(Object)
StatusLogger()0 method0org.apache.logging.log4j.status.StatusLogger.StatusLogger()
EnglishEnums()0 method0org.apache.logging.log4j.util.EnglishEnums.EnglishEnums()
ProviderUtil()0 method0org.apache.logging.log4j.util.ProviderUtil.ProviderUtil()
log4jIsDebug(int)0 method0org.apache.logging.log4j.DebugDisabledPerformanceComparison .log4jIsDebug(int)
run()0 method0org.apache.logging.log4j.FilterPerformanceComparison$Worker.run()
run()0 method0org.apache.logging.log4j.core.LoggerContext$ShutdownThread.run()
nextInt()0 method0org.apache.logging.log4j.core.SimplePerfTest$SimpleRandom.nextInt()
getState()1 method1org.apache.logging.log4j.core.ThreadedTest$State.getState()
toString()0 method0org.apache.logging.log4j.core.ThreadedTest$State.toString()
getDelay(TimeUnit)0 method0org.apache.logging.log4j.core.filter.BurstFilter$LogDelay.getDelay (TimeUnit)
equals(Object)0 method0org.apache.logging.log4j.core.filter.BurstFilter$LogDelay.equals (Object)
hashCode()0 method0org.apache.logging.log4j.core.filter.BurstFilter$LogDelay.hashCode()
CompositeFilter()0 method0org.apache.logging.log4j.core.filter.CompositeFilter.CompositeFilter()
Assert()0 method0org.apache.logging.log4j.core.helpers.Assert.Assert()
CachedClock$1(CachedClock,String)1 method1org.apache.logging.log4j.core.helpers.CachedClock$1.CachedClock$1 (CachedClock,String)
run()0 method0org.apache.logging.log4j.core.helpers.CachedClock$1.run()
CachedClock()0 method0org.apache.logging.log4j.core.helpers.CachedClock.CachedClock()
Charsets()0 method0org.apache.logging.log4j.core.helpers.Charsets.Charsets()
ClockFactory()0 method0org.apache.logging.log4j.core.helpers.ClockFactory.ClockFactory()
CoarseCachedClock$1(CoarseCachedClock,String)1 method1org.apache.logging.log4j.core.helpers.CoarseCachedClock$1 .CoarseCachedClock$1(CoarseCachedClock,String)
run()0 method0org.apache.logging.log4j.core.helpers.CoarseCachedClock$1.run()
CoarseCachedClock()0 method0org.apache.logging.log4j.core.helpers.CoarseCachedClock .CoarseCachedClock()
Constants()0 method0org.apache.logging.log4j.core.helpers.Constants.Constants()
FileUtils()0 method0org.apache.logging.log4j.core.helpers.FileUtils.FileUtils()
Loader()0 method0org.apache.logging.log4j.core.helpers.Loader.Loader()
NameUtil()0 method0org.apache.logging.log4j.core.helpers.NameUtil.NameUtil()
NetUtils()0 method0org.apache.logging.log4j.core.helpers.NetUtils.NetUtils()
OptionConverter()0 method0org.apache.logging.log4j.core.helpers.OptionConverter.OptionConverter( )
Transform()0 method0org.apache.logging.log4j.core.helpers.Transform.Transform()
UUIDUtil()0 method0org.apache.logging.log4j.core.helpers.UUIDUtil.UUIDUtil()
ClockFactoryTest$MyClock()0 method0org.apache.logging.log4j.core.helpers.ClockFactoryTest$MyClock .ClockFactoryTest$MyClock()
currentTimeMillis()0 method0org.apache.logging.log4j.core.helpers.ClockFactoryTest$MyClock .currentTimeMillis()
run()0 method0org.apache.logging.log4j.core.helpers.UUIDTest$Worker.run()
ContextAnchor()0 method0org.apache.logging.log4j.core.impl.ContextAnchor.ContextAnchor()
readResolve()0 method0org.apache.logging.log4j.core.impl.Log4jLogEvent$LogEventProxy .readResolve()
readObject(ObjectInputStream)0 method0org.apache.logging.log4j.core.impl.Log4jLogEvent.readObject (ObjectInputStream)
ReflectiveCallerClassUtility()0 method0org.apache.logging.log4j.core.impl.ReflectiveCallerClassUtility .ReflectiveCallerClassUtility()
Server()0 method0org.apache.logging.log4j.core.jmx.Server.Server()
valueOf(String)0 method0org.apache.logging.log4j.core.layout.HTMLLayout$FontSize.valueOf (String)
check(String)0 method0org.apache.logging.log4j.core.layout.RFC5424Layout$ExcludeChecker .check(String)
check(String)0 method0org.apache.logging.log4j.core.layout.RFC5424Layout$IncludeChecker .check(String)
check(String)0 method0org.apache.logging.log4j.core.layout.RFC5424Layout$NoopChecker.check (String)
writeStreamHeader()0 method0org.apache.logging.log4j.core.layout .SerializedLayout$PrivateObjectOutputStream.writeStreamHeader()
SerializedLayout()0 method0org.apache.logging.log4j.core.layout.SerializedLayout.SerializedLayout ()
testUnixTime(String)0 method0org.apache.logging.log4j.core.layout.PatternLayoutTest.testUnixTime (String)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$CharMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$CharSetMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$NoMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$StringMatcher.isMatch (char[],int,int,int)
isMatch(char[],int,int,int)0 method0org.apache.logging.log4j.core.lookup.StrMatcher$TrimMatcher.isMatch (char[],int,int,int)
getLevel()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getLevel()
getLoggerName()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getLoggerName()
getSource()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getSource()
getMessage()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getMessage()
getMarker()0 method0org.apache.logging.log4j.core.lookup.DateLookupTest$MyLogEvent .getMarker()

Statistics

Stat   MethodsCallingMe   depth
Sum:041
Average:00.13
Minimum:00
Maximum:04
Standard deviation:00.48
Variance:00.23
Potentially dead Fields
// <Name>Potentially dead Fields</Name>
warnif count > 0
from f in JustMyCode.Fields where
   
f.NbMethodsUsingMe == 0 && 
   
!f.IsPublic &&     // Although not recommended, public fields might be used by client applications of your projects.
   !f.IsLiteral &&    // The BC code never explicitely uses literal fields.
   !f.IsEnumValue  && // The BC code never explicitely uses enumeration value.
   f.Name!= "serialVersionUID" &&
   
!f.IsInitOnly
    
   
select f

11 fields matched

fieldsFull Name
configorg.apache.logging.log4j.core.LateConfigTest.config
apporg.apache.logging.log4j.core.LateConfigTest.app
apporg.apache.logging.log4j.core.ShutdownDisabledTest.app
advertisedConfigurationorg.apache.logging.log4j.core.config.BaseConfiguration .advertisedConfiguration
apporg.apache.log4j.LoggingTest.app
loggerorg.apache.logging.slf4j.LoggerTest.logger
slf4jLoggerorg.apache.logging.slf4j.LoggerTest.slf4jLogger
contextorg.apache.logging.slf4j.LoggerTest.context
rootorg.apache.logging.slf4j.LoggerTest.root
rootLoggerorg.apache.logging.slf4j.LoggerTest.rootLogger
listorg.apache.logging.slf4j.LoggerTest.list

Statistics

Stat
Sum:
Average:
Minimum:
Maximum:
Standard deviation:
Variance:

Trend Charts


Lines of Code


Rules Violated


Rules Violations


Percentage Coverage by Tests

No Trend Data has been logged for this Chart.

Max


Average


Third-Party Usage

Projects Dependencies

Assembly Depends on Is referenced by
classes v1.0 - -
jackson-core-2.2.2 v1.0 - -
javax.mail-1.5.0 v1.0 - -
commons-logging-1.1.3 v1.0 - -
flume-ng-core-1.0.0-incubating v1.0 - -
servlet-api-2.2 v1.0 - -
spring-test-3.1.2.RELEASE v1.0 - -
jconsole v1.0 - -
org.eclipse.osgi-3.6.0.v20100517 v1.0 - -
MISSING v1.0 - -
javax.persistence-2.1.0 v1.0 - -
jackson-databind-2.2.2 v1.0 - -
lightcouch-0.0.6 v1.0 - -
mongo-java-driver-2.11.2 v1.0 - -
disruptor-3.0.0.beta3 v1.0 - -
geronimo-jms_1.1_spec-1.0 v1.0 - -
jsse v1.0 - -
javax.servlet-api-3.0.1 v1.0 - -
slf4j-ext-1.5.10 v1.0 - -
servlet-api-2.5 v1.0 - -
logback-classic-0.9.26 v1.0 - -
flume-ng-sdk-1.2.0 v1.0 - -
flume-ng-embedded-agent-1.4.0 v1.0 - -
je-5.0.73 v1.0 - -
jce v1.0 - -
commons-lang3-3.2.1 v1.0 - -
core-4.3.0 v1.0 - -
easymock-2.3 v1.0 - -
mockejb-0.6-beta2 v1.0 - -
h2-1.3.158 v1.0 - -
logback-core-0.9.26 v1.0 - -
velocity-1.7 v1.0 - -
jsp-api-2.1 v1.0 - -
spring-webmvc-2.5.6 v1.0 - -
log4j-api v1.0classes v1.0 ; MISSING v1.0 ; commons-lang3-3.2.1 v1.0 ; org.eclipse.osgi-3.6.0.v20100517 v1.0 ; log4j-core v1.0 ; log4j-1.2-api v1.0 ; log4j-slf4j-impl v1.0 ; log4j-to-slf4j v1.0 ; log4j-jcl v1.0 ; log4j-flume-ng v1.0 ; log4j-taglib v1.0 ; log4j-samples-flume-common v1.0 ;
log4j-core v1.0classes v1.0 ; log4j-api v1.0 ; javax.persistence-2.1.0 v1.0 ; jackson-core-2.2.2 v1.0 ; jackson-databind-2.2.2 v1.0 ; lightcouch-0.0.6 v1.0 ; mongo-java-driver-2.11.2 v1.0 ; disruptor-3.0.0.beta3 v1.0 ; org.eclipse.osgi-3.6.0.v20100517 v1.0 ; core-4.3.0 v1.0 ; jce v1.0 ; servlet-api-2.2 v1.0 ; geronimo-jms_1.1_spec-1.0 v1.0 ; javax.mail-1.5.0 v1.0 ; jsse v1.0 ; javax.servlet-api-3.0.1 v1.0 ; servlet-api-2.5 v1.0 ; MISSING v1.0 ; log4j-1.2-api v1.0 ; slf4j-ext-1.5.10 v1.0 ; easymock-2.3 v1.0 ; mockejb-0.6-beta2 v1.0 ; h2-1.3.158 v1.0 ; logback-classic-0.9.26 v1.0 ; logback-core-0.9.26 v1.0 ; spring-test-3.1.2.RELEASE v1.0 ; log4j-1.2-api v1.0 ; log4j-slf4j-impl v1.0 ; log4j-jcl v1.0 ; log4j-flume-ng v1.0 ; log4j-taglib v1.0 ; log4j-jmx-gui v1.0 ; log4j-samples-flume-common v1.0 ;
log4j-core-osgi-async v1.0 - -
log4j-core-osgi-jpa v1.0 - -
log4j-1.2-osgi-api v1.0 - -
log4j-core-osgi-net v1.0 - -
log4j-core-osgi-nosql-couchdb v1.0 - -
log4j-core-osgi-nosql-mongodb v1.0 - -
log4j-core-osgi-reduced v1.0 - -
log4j-1.2-api v1.0classes v1.0 ; log4j-api v1.0 ; log4j-core v1.0 ; MISSING v1.0 ; velocity-1.7 v1.0 ; log4j-core v1.0 ;
log4j-slf4j-impl v1.0classes v1.0 ; log4j-api v1.0 ; slf4j-ext-1.5.10 v1.0 ; MISSING v1.0 ; log4j-core v1.0 ; -
log4j-to-slf4j v1.0log4j-api v1.0 ; classes v1.0 ; MISSING v1.0 ; -
log4j-jcl v1.0commons-logging-1.1.3 v1.0 ; log4j-api v1.0 ; classes v1.0 ; MISSING v1.0 ; log4j-core v1.0 ; -
log4j-flume-ng v1.0classes v1.0 ; log4j-core v1.0 ; flume-ng-core-1.0.0-incubating v1.0 ; log4j-api v1.0 ; flume-ng-sdk-1.2.0 v1.0 ; flume-ng-embedded-agent-1.4.0 v1.0 ; je-5.0.73 v1.0 ; jce v1.0 ; MISSING v1.0 ; -
log4j-taglib v1.0classes v1.0 ; servlet-api-2.2 v1.0 ; log4j-api v1.0 ; jsp-api-2.1 v1.0 ; MISSING v1.0 ; log4j-core v1.0 ; spring-test-3.1.2.RELEASE v1.0 ; -
log4j-jmx-gui v1.0classes v1.0 ; log4j-core v1.0 ; jconsole v1.0 ; -
log4j-samples-flume-common v1.0classes v1.0 ; log4j-api v1.0 ; MISSING v1.0 ; spring-webmvc-2.5.6 v1.0 ; servlet-api-2.2 v1.0 ; log4j-core v1.0 ; -
log4j-samples-flume-remote v1.0 - -
log4j-samples-flume-embedded v1.0 - -

Projects Build Order

Some dependency cycles exist between Java Projects of your application.
Dependency cycles between Java Projects is a major code smell and it is recommended to refactor the code to avoid cycles.
Also, dependency cycles between Java Projects prevent from finding a build order between Java Projects

Analysis Log : Information and Warnings

Here are Logs emitted during JArchitect analysis.
The Warnings can reveal potential flaws concerning the health of the build process.
A particular warn can be disabled through the JArchitect interactive UI, panel Error List, tick the checkbox Disabled corresponding to the warn to disable.


Kind Message
Info09.22.2014 11:05:14 Begin full analysis with JArchitect v4.0.0.8041
InfoNo Baseline for Comparison loaded.
InfoBytecode parsing
WarningNo classes founds for project:log4j-core-osgi-async under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-osgi/core-osgi-async; please check if the project was built
WarningNo classes founds for project:log4j-core-osgi-jpa under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-osgi/core-osgi-jpa; please check if the project was built
WarningNo classes founds for project:log4j-1.2-osgi-api under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-osgi/core-osgi-legacy-api; please check if the project was built
WarningNo classes founds for project:log4j-core-osgi-net under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-osgi/core-osgi-net; please check if the project was built
WarningNo classes founds for project:log4j-core-osgi-nosql-couchdb under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-osgi/core-osgi-nosql-couchdb; please check if the project was built
WarningNo classes founds for project:log4j-core-osgi-nosql-mongodb under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-osgi/core-osgi-nosql-mongodb; please check if the project was built
WarningNo classes founds for project:log4j-core-osgi-reduced under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-osgi/core-osgi-reduced; please check if the project was built
WarningNo classes founds for project:log4j-samples-flume-remote under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-samples/flume-remote; please check if the project was built
WarningNo classes founds for project:log4j-samples-flume-embedded under output directory:/Users/cy/Documents/Development/log4j2-trunk/log4j-trunk/log4j-samples/flume-embedded; please check if the project was built
InfoThird Party parsing
InfoParsing Source Files
WarningCycle detected: log4j-core ; log4j-1.2-api ;
Info09.22.2014 11:05:23 Analyse dependencies of your application.
Info09.22.2014 11:05:23 Building the report (standard).
Info09.22.2014 11:05:24 Log trend metrics values.
Info09.22.2014 11:05:24 Execute queries and rules
Warning11 critical rules are violated. - Types too big - critical - Methods too complex - critical - Methods with too many parameters - critical - Prefer primitive types to boxed primitives - Always override hashcode when you override equals - Always override toString - Prefer interfaces to abstract classes - Use interfaces only to define types - Avoid using raw types - Don't force gabrage collector - ...