📜 ⬆️ ⬇️

JDK 7 code statistics

I wanted to get Java source statistics and find out how many parameters on average methods have, methods in classes, constructors, etc. The question is not completely idle, because based on this data, you can calculate the default default size for containers for these entities in the program code models (AST) to save memory. In particular, we are talking about the Spoon project. With the help of this library I conducted an analysis, by the way.

What could be more logical than testing the statistics of the source JDK, to make some assumptions about any Java-code. Along the way, I collected the most unusual instances - for example, methods with the largest number of parameters.

To see them google signature - the first link should be to Javadoc or to GrepCode. Or, if IntelliJ IDEA is open in front of you, simply paste in the name of the class or method after pressing Shift four times.

I limited myself to java. *, Javax. * And org. *, As well as JDK 7, not 8, because the bugs of the Eclipse compiler, on which Spoon is based, do not allow building AST.
')
From a statistical point of view, I consider it a good assumption that the numbers of all the entities under consideration are distributed according to the Poisson law , therefore the only number — the average value — describes the distribution quite well.

But, if you wish, you can conduct a more in-depth analysis, or test your project: gist.github.com/leventov/1f8d8d470b9632bc3cc3

Method parameters


Medium: 1,063

QtyMethod
12java.lang.String layoutCompoundLabel (javax.swing.JComponent, java.awt.FontMetrics, java.lang.String, javax.swing.Icon, int, int, int, int, java.awt.Rectangle, java.awt.Rectangle , java.awt.Rectangle, int)
12void drawChunk (java.awt.Image, java.awt.Graphics, boolean, int, int, int, int, int, int, int, int, boolean)
12java.lang.String layoutText (javax.swing.plaf.synth.SynthContext, java.awt.FontMetrics, java.lang.String, javax.swing.Icon, int, int, int, int, java.awt.Rectangle, java .awt.Rectangle, java.awt.Rectangle, int)
14void paintRow (javax.swing.tree.TreeCellRenderer, javax.swing.tree.DefaultTreeCellRenderer, javax.swing.plaf. , java.awt.Insets, java.awt.Rectangle, java.awt.Rectangle, javax.swing.tree.TreePath, int, boolean, boolean, boolean)
15void initMouseEvent (java.lang.String, boolean, boolean, org.w3c.dom.views.AbstractView, int, int, int, int, int, boolean, boolean, boolean, boolean, short, org.w3c.dom.events .EventTarget)
sixteenvoid setRaster (int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int)


Typical parameters of methods


Medium: 0.010

Qtymethod
2<K, V> java.util.Map checkedMap (java.util.Map, java.lang.Class, java.lang.Class)
2<K, V> K keyOrNull (java.util.TreeMap $ Entry)
2<K, V> java.util.concurrent.ConcurrentHashMap $ HashEntry entryAt (java.util.concurrent.ConcurrentHashMap $ HashEntry [], int)
2<U, W> java.util.concurrent.atomic.AtomicReferenceFieldUpdater newUpdater (java.lang.Class, java.lang.Class, java.lang.String)
2<K, V> java.util.Map newHashMap ()
2<M, I> javax.swing.RowFilter andFilter (java.lang.Iterable)
2<R, P> R accept (javax.lang.model.element.AnnotationValueVisitor, P)
2<R, P> R accept (javax.lang.model.element.ElementVisitor, P)
2<R, P> R accept (javax.lang.model.type.TypeVisitor, P)
3<K, V, T> java.util.Collections $ CheckedMap $ CheckedEntrySet $ ​​CheckedEntry checkedEntry (java.util.Map $ Entry, java.lang.Class)


Constructor Parameters


Medium: 1,207

QtyConstructor
12java.awt.LinearGradientPaintContext (java.awt.LinearGradientPaint, java.awt.image.ColorModel, java. awt.geom.Point2D, java.awt.geom.Point2D, float [], java.awt.Color [], java.awt.MultipleGradientPaint $ CycleMethod, java.awt.MultipleGradientPaint $ ColorSpaceType)
12java.lang.management.ThreadInfo (java.lang.Thread, int, java.lang.Object, java.lang.Thread, long, long, long, long, java.lang.StackTraceElement [], java.lang.Object [ ], int [], java.lang.Object [])
12javax.swing.event.MenuDragMouseEvent (java.awt.Component, int, long, int, int, int, int, int, int, boolean, javax.swing.MenuElement [], javax.swing.MenuSelectionManager)
13java.awt.event.MouseWheelEvent (java.awt.Component, int, long, int, int, int, int, int, int, boolean, int, int, int)
13java.util.SimpleTimeZone (int, java.lang.String, int, int, int, int, int, int, int, int, int, int, int)
14java.awt.event.MouseWheelEvent (java.awt.Component, int, long, int, int, int, int, int, int, boolean, int, int, int, double)
15java.awt.RadialGradientPaintContext (java.awt.RadialGradientPaint, java.awt.image.ColorModel, java.awt.Rectangle, java. float, float, float, float, float [], java.awt.Color [], java.awt.MultipleGradientPaint $ CycleMethod, java.awt.MultipleGradientPaint $ ColorSpaceType)
sixteenjavax.imageio.spi.ImageReaderWriterSpi (java.lang.String, java.lang.String, java.lang.String [], java.lang.String [], java.lang.String [], java.lang.String, boolean, java.lang.String, java.lang.String, java.lang.String [], java.lang.String [], boolean, java.lang.String, java.lang.String, java.lang.String [ ], java.lang.String [])
18javax.imageio.spi.ImageReaderSpi (java.lang.String, java.lang.String, java.lang.String [], java.lang.String [], java.lang.String [], java.lang.String, java.lang.Class [], java.lang.String [], boolean, java.lang.String, java.lang.String, java.lang.String [], java.lang.String [], boolean, java. lang.String, java.lang.String, java.lang.String [], java.lang.String [])
18javax.imageio.spi.ImageWriterSpi (java.lang.String, java.lang.String, java.lang.String [], java.lang.String [], java.lang.String [], java.lang.String, java.lang.Class [], java.lang.String [], boolean, java.lang.String, java.lang.String, java.lang.String [], java.lang.String [], boolean, java. lang.String, java.lang.String, java.lang.String [], java.lang.String [])

Typical parameters of constructors


Medium: 0.001

Many do not even know that it happens. In the JDK, there were already four classes with parameterized constructors. Although I had occasion to try on this chip in practice, and, it seems, not even once.
QtyConstructor
onejavax.management.StandardEmitterMBean (T, java.lang.Class, boolean, javax.management.NotificationEmitter)
onejavax.management.StandardMBean (T, java.lang.Class)
onejavax.management.openmbean.OpenMBeanAttributeInfoSupport (java.lang.String, java.lang.String, javax.management.openmbean.OpenType, boolean, boolean, boolean, T)
onejavax.management.openmbean.OpenMBeanParameterInfoSupport (java.lang.String, java.lang.String, javax.management.openmbean.OpenType, T)


Typical class parameters


Medium: 0.117

Unexpectedly, there was not a single class with more than three typical parameters. My personal best is 8.
QtyClass
2class javax.swing.DefaultRowSorter
2class javax.swing.DefaultRowSorter $ ModelWrapper
2class javax.swing.RowFilter
2class javax.swing.RowFilter $ AndFilter
2class javax.swing.RowFilter $ Entry
2class javax.swing.RowFilter $ NotFilter
2class javax.swing.RowFilter $ OrFilter
2class javax.swing.SwingWorker
2class javax.xml.bind.annotation.adapters.XmlAdapter
3class java.util.Collections $ CheckedMap $ CheckedEntrySet $ ​​CheckedEntry

Implemented interfaces


Medium: 0.555

QtyClass
6class javax.swing.plaf.basic.BasicComboBoxUI $ Handler
6class javax.swing.plaf.basic.BasicTabbedPaneUI $ Handler
6class javax.swing.plaf.basic.BasicTableUI $ Handler
6class javax.swing.text.JTextComponent $ AccessibleJTextComponent
7class javax.swing.JTable
7class javax.swing.JTable $ AccessibleJTable
7class javax.swing.plaf.basic.BasicInternalFrameUI $ Handler
7class javax.swing.plaf.basic.BasicListUI $ Handler
tenclass javax.swing.plaf.basic.BasicTreeUI $ Handler
17class java.awt.AWTEventMulticaster

Anonymous initialization blocks


Medium: 0.057

Here, on the contrary, JDK authors like initialization blocks more than me. I never wrote more than one block per class.
QtyClass
2class javax.management.remote.rmi.RMIConnector
2class javax.swing.text.html.HTML
3class java.lang.invoke.CallSite
3class java.lang.invoke.MethodHandle
3class java.lang.invoke.MethodHandleNatives
3class java.math.BigInteger
3class java.net.InetAddress
3class java.util.zip.ZipFile
3class javax.swing.text.rtf.RTFReader
6class java.lang.invoke.LambdaForm

Fields


Medium: 3,861

QtyClass
84class java.awt.Event
84class java.util.Calendar
93class javax.swing.plaf.nimbus.InternalFrameTitlePaneMaximizeButtonPainter
98class java.awt.Component
99enum java.lang.Character $ UnicodeScript
130class java.awt.color.ICC_Profile
140class javax.swing.plaf.nimbus.FileChooserPainter
209class java.awt.event.KeyEvent
213class java.lang.Character $ UnicodeBlock
223class java.awt.PageAttributes $ MediaType

Constructors


Medium: 1,467

QtyClass
tenclass java.lang.invoke.MemberName
tenclass java.net.Socket
tenclass java.sql.BatchUpdateException
12class java.math.BigInteger
13class java.util.Scanner
14class java.awt.Dialog
sixteenclass java.util.Formatter
sixteenclass javax.swing.JDialog
17class java.lang.String
17class java.math.BigDecimal

Methods


Average: 8,003

QtyClass
137class javax.swing.plaf.synth.ParsedSynthStyle $ DelegatingPainter
143class javax.swing.plaf.nimbus.SynthPainterImpl
143class javax.swing.plaf.synth.ImagePainter
145class java.awt.Window
147class javax.swing.JTree
148class javax.swing.plaf.nimbus.FileChooserPainter
152class java.awt.Container
187class javax.swing.JComponent
196class javax.swing.JTable
331class java.awt.Component

Nested classes


Medium: 0.327

QtyClass
20class javax.swing.plaf.metal.MetalBorders
20class javax.swing.text.html.CSS
21class javax.swing.plaf.basic.BasicTreeUI
21class javax.swing.text.html.HTMLDocument $ HTMLReader
27class java.beans.MetaData $ java_util_Collections
thirtyclass javax.swing.plaf.metal.MetalIconFactory
33class javax.swing.text.DefaultEditorKit
36class java.util.Collections
48class java.beans.MetaData
59class java.util.regex.Pattern

Source: https://habr.com/ru/post/258641/


All Articles