JDK 7コード統計

Javaソースの統計を取得し、メソッド、クラスのメソッド、コンストラクターなどに平均でいくつのパラメーターがあるかを知りたいと思っていました。このデータに基づいて、ソフトウェアでこれらのエンティティーのコンテナーの最適なデフォルトサイズを計算できるため、質問は完全にアイドル状態ではありませんメモリを節約するコードモデル(AST)。 特に、 Spoonプロジェクトについて話している。 ちなみに、このライブラリを使用して、分析を行いました。



JDKソース統計をテストして、Javaコードに関するいくつかの仮定を立てるよりも論理的なものになる可能性があります。 途中で、最も珍しいインスタンスを収集しました。たとえば、パラメーターの数が最も多いメソッドです。



それらを見るには、署名をグーグルで検索してください。最初のリンクはJavadocまたはGrepCodeである必要があります。 または、目の前でIntelliJ IDEAを開いている場合は、Shiftキーを4回押した後、クラス名またはメソッド名を挿入するだけです。



SpoonのベースとなっているEclipseコンパイラのバグではASTをビルドできないため、私はjava。*、Javax。*およびorg。*パッケージ、およびJDK 7に限定しました。



統計の観点から-考慮中のすべてのエンティティの量がポアソンの法則に従って分布しているという良い仮定だと思うので、唯一の数-平均値-は分布全体をうまく説明しています。



ただし、必要に応じて、 gist.github.com / leventov / 1f8d8d470b9632bc3cc3で詳細な分析を行うか、プロジェクトをテストできます。



メソッドのパラメーター



平均:1,063



数量 方法
12 java.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)
12 void drawChunk(java.awt.Image、java.awt.Graphics、boolean、int、int、int、int、int、int、int、int、boolean)
12 java.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)
14 void paintRow(javax.swing.tree.TreeCellRenderer、javax.swing.tree.DefaultTreeCellRenderer、javax.swing.plaf.synth.SynthContext、javax.swing.plaf.synth.SynthContext、java.awtavaGramics 、java.awt.Insets、java.awt.Rectangle、java.awt.Rectangle、javax.swing.tree.TreePath、int、boolean、boolean、boolean)
15 void 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)
16 void setRaster(int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int)




典型的なメソッドパラメータ



平均:0.010



数量 方法
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は受け入れます(javax.lang.model.element.AnnotationValueVisitor、P)
2 <R、P> Rは受け入れます(javax.lang.model.element.ElementVisitor、P)
2 <R、P> Rは受け入れます(javax.lang.model.type.TypeVisitor、P)
3 <K、V、T> java.util.Collections $ CheckedMap $ CheckedEntrySet $ CheckedEntry checkedEntry(java.util.Map $ Entry、java.lang.Class)




コンストラクターオプション



平均:1,207



数量 コンストラクター
12 java.awt.LinearGradientPaintContext(java.awt.LinearGradientPaint、java.awt.image.ColorModel、java.awt.Rectangle、java.awt.geom.Rectangle2D、java.awt.geom.AffineTransform、java.awt.RenderH。 awt.geom.Point2D、java.awt.geom.Point2D、float []、java.awt.Color []、java.awt.MultipleGradientPaint $ CycleMethod、java.awt.MultipleGradientPaint $ ColorSpaceType)
12 java.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 [])
12 javax.swing.event.MenuDragMouseEvent(java.awt.Component、int、long、int、int、int、int、int、int、boolean、javax.swing.MenuElement []、javax.swing.MenuSelectionManager)
13 java.awt.event.MouseWheelEvent(java.awt.Component、int、long、int、int、int、int、int、int、boolean、int、int、int)
13 java.util.SimpleTimeZone(int、java.lang.String、int、int、int、int、int、int、int、int、int、int、int、int)
14 java.awt.event.MouseWheelEvent(java.awt.Component、int、long、int、int、int、int、int、int、boolean、int、int、int、double)
15 java.awt.RadialGradientPaintContext(java.awt.RadialGradientPaint、java.awt.image.ColorModel、java.awt.Rectangle、java.awt.geom.Rectangle2D、java.awt.geom.AffineTransform、java.awt.attrent float、float、float、float、float []、java.awt.Color []、java.awt.MultipleGradientPaint $ CycleMethod、java.awt.MultipleGradientPaint $ ColorSpaceType)
16 javax.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 [])
18 javax.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 [])
18 javax.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 [])


典型的な設計パラメータ



平均:0.001



多くの人は、これが起こることさえ知りません。 JDKには、パラメーター化されたコンストラクターを持つ4つのクラスが見つかりました。 私は実際にこのチップを試してみる機会がありましたが、一度もそうではないようです。

数量 コンストラクター
1 javax.management.StandardEmitterMBean(T、java.lang.Class、boolean、javax.management.NotificationEmitter)
1 javax.management.StandardMBean(T、java.lang.Class)
1 javax.management.openmbean.OpenMBeanAttributeInfoSupport(java.lang.String、java.lang.String、javax.management.openmbean.OpenType、boolean、boolean、boolean、T)
1 javax.management.openmbean.OpenMBeanParameterInfoSupport(java.lang.String、java.lang.String、javax.management.openmbean.OpenType、T)




典型的なクラスパラメーター



平均:0.117



突然、3つを超える典型的なパラメーターを持つクラスは見つかりませんでした。 私の個人的なベストは8です。

数量 クラス
2 クラスjavax.swing.DefaultRowSorter
2 クラスjavax.swing.DefaultRowSorter $ ModelWrapper
2 クラスjavax.swing.RowFilter
2 クラスjavax.swing.RowFilter $ AndFilter
2 クラスjavax.swing.RowFilter $エントリ
2 クラスjavax.swing.RowFilter $ NotFilter
2 クラスjavax.swing.RowFilter $ OrFilter
2 クラスjavax.swing.SwingWorker
2 クラスjavax.xml.bind.annotation.adapters.XmlAdapter
3 クラスjava.util.Collections $ CheckedMap $ CheckedEntrySet $ CheckedEntry


実装されたインターフェース



平均:0.555



数量 クラス
6 クラスjavax.swing.plaf.basic.BasicComboBoxUI $ハンドラー
6 クラスjavax.swing.plaf.basic.BasicTabbedPaneUI $ハンドラー
6 クラスjavax.swing.plaf.basic.BasicTableUI $ハンドラー
6 クラスjavax.swing.text.JTextComponent $ AccessibleJTextComponent
7 クラスjavax.swing.JTable
7 クラスjavax.swing.JTable $ AccessibleJTable
7 クラスjavax.swing.plaf.basic.BasicInternalFrameUI $ハンドラー
7 クラスjavax.swing.plaf.basic.BasicListUI $ハンドラー
10 クラスjavax.swing.plaf.basic.BasicTreeUI $ハンドラー
17 クラスjava.awt.AWTEventMulticaster


匿名の初期化ブロック



平均:0.057



ここで、逆に、JDKの作成者は私よりも初期化ブロックが大好きです。 クラスごとに複数のブロックを記述したことはありません。
数量 クラス
2 クラスjavax.management.remote.rmi.RMIConnector
2 クラスjavax.swing.text.html.HTML
3 クラスjava.lang.invoke.CallSite
3 クラスjava.lang.invoke.MethodHandle
3 クラスjava.lang.invoke.MethodHandleNatives
3 クラスjava.math.BigInteger
3 クラスjava.net.InetAddress
3 クラスjava.util.zip.ZipFile
3 クラスjavax.swing.text.rtf.RTFReader
6 クラスjava.lang.invoke.LambdaForm


フィールド



平均:3,861



数量 クラス
84 クラスjava.awt.Event
84 クラスjava.util.Calendar
93 クラスjavax.swing.plaf.nimbus.InternalFrameTitlePaneMaximizeButtonPainter
98 クラスjava.awt.Component
99 列挙java.lang.Character $ UnicodeScript
130 クラスjava.awt.color.ICC_Profile
140 クラスjavax.swing.plaf.nimbus.FileChooserPainter
209 クラスjava.awt.event.KeyEvent
213 クラスjava.lang.Character $ UnicodeBlock
223 クラスjava.awt.PageAttributes $ MediaType


コンストラクター



平均:1,467



数量 クラス
10 クラスjava.lang.invoke.MemberName
10 クラスjava.net.Socket
10 クラスjava.sql.BatchUpdateException
12 クラスjava.math.BigInteger
13 クラスjava.util.Scanner
14 クラスjava.awt.Dialog
16 クラスjava.util.Formatter
16 クラスjavax.swing.JDialog
17 クラスjava.lang.String
17 クラスjava.math.BigDecimal


方法



平均:8,003



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


ネストされたクラス



平均:0.327



数量 クラス
20 クラスjavax.swing.plaf.metal.MetalBorders
20 クラスjavax.swing.text.html.CSS
21 クラスjavax.swing.plaf.basic.BasicTreeUI
21 クラスjavax.swing.text.html.HTMLDocument $ HTMLReader
27 クラスjava.beans.MetaData $ java_util_Collections
30 クラスjavax.swing.plaf.metal.MetalIconFactory
33 クラスjavax.swing.text.DefaultEditorKit
36 クラスjava.util.Collections
48 クラスjava.beans.MetaData
59 クラスjava.util.regex.Pattern



All Articles