Last night I wrote a quick one-off javac-based tool to parse and analyze
all of GWT's source code, and to extract out inter-file dependencies (e.g.,
dev/core/src/com/google/gwt/dev/GWTShell.java depends on
dev/core/src/com/google/gwt/dev/cfg/ModuleDef.java).  I then ran a
strongly-connected components analysis on the resulting graph to form a DAG.

My expectation was our interdependencies would be hairy and cyclic enough
that the DAG would probably already be pretty constrained.  But it turns
out that our 6022 source files form 5206 SCCs.  If I first collapse all
source files into a single vertex, then our 502 packages still form 394
SCCs.  Ignoring test sources, I still get 246 packages grouped into 138
SCCs.

I think that's still too many to be immediately useful, so probably my next
step is to write a tool to let me interactively find components that share
a lot of incoming and outgoing edges and merge them together.

If anyone has suggestions on additional criteria I can easily take into
account, I'm interested.  (E.g., I know I should probably take into account
super source and/or gwt.xml files, but javac doesn't know about those, so I
just skipped them for now for simplicity. ;))


Also, as something maybe interesting, here's a map from our third party
libraries to source directories where we use them.  (For simplicity, I'm
running this against the copy of GWT we're using within Google; e.g., we
haven't merged the HtmlUnit/Jetty/JSON changes yet.  Oh, and this skips
JUnit and Selenium for no particular reason, but JUnit uses are pretty
obvious and Selenium is only used by RunStyleSelenium.)

lib/apache/ant-1.6.5.jar:
  dev/core/src/com/google/gwt/dev/resource/impl
  dev/core/src/com/google/gwt/dev/shell/jetty
  dev/core/test/com/google/gwt/dev/resource/impl

lib/apache/commons/commons-collections-3.2.1.jar:
  dev/core/test/org/apache/commons/collections/iterators
  dev/core/test/org/apache/commons/collections/map
  user/test/com/google/gwt/i18n
  user/test/org/apache/commons/collections

lib/apache/tapestry-util-text-4.0.2.jar:
  user/src/com/google/gwt/i18n/rebind

lib/cldr/21/icu4j.jar:
  user/src/com/google/gwt/i18n/rebind

lib/easymock/easymock-3.0.jar:
  user/test/com/google/gwt/resources/rg
  user/test/com/google/gwt/uibinder/rebind

lib/eclipse/jdtCompilerAdapter-3.8.3.v20130121-145325.jar:
  dev/core/src/com/google/gwt/dev/shell/jetty

lib/eclipse/org.eclipse.jdt.core_3.8.3.v20130121-145325.jar:
  dev/core/src/com/google/gwt/dev/javac
  dev/core/src/com/google/gwt/dev/jdt
  dev/core/src/com/google/gwt/dev/jjs/ast
  dev/core/src/com/google/gwt/dev/jjs/impl
  dev/core/test/com/google/gwt/dev/javac

lib/guava/guava-15.0/guava-15.0-rebased.jar:
  dev/codeserver/java/com/google/gwt/dev/codeserver
  dev/core/src/com/google/gwt/core/ext
  dev/core/src/com/google/gwt/core/ext/linker/impl
  dev/core/src/com/google/gwt/core/linker
  dev/core/src/com/google/gwt/dev
  dev/core/src/com/google/gwt/dev/cfg
  dev/core/src/com/google/gwt/dev/javac
  dev/core/src/com/google/gwt/dev/javac/asm
  dev/core/src/com/google/gwt/dev/javac/typemodel
  dev/core/src/com/google/gwt/dev/jjs
  dev/core/src/com/google/gwt/dev/jjs/ast
  dev/core/src/com/google/gwt/dev/jjs/ast/js
  dev/core/src/com/google/gwt/dev/jjs/impl
  dev/core/src/com/google/gwt/dev/jjs/impl/codesplitter
  dev/core/src/com/google/gwt/dev/jjs/impl/gflow
  dev/core/src/com/google/gwt/dev/jjs/impl/gflow/cfg
  dev/core/src/com/google/gwt/dev/jjs/impl/gflow/constants
  dev/core/src/com/google/gwt/dev/jjs/impl/gflow/copy
  dev/core/src/com/google/gwt/dev/jjs/impl/gflow/liveness
  dev/core/src/com/google/gwt/dev/jjs/impl/gflow/unreachable
  dev/core/src/com/google/gwt/dev/js
  dev/core/src/com/google/gwt/dev/js/ast
  dev/core/src/com/google/gwt/dev/resource/impl
  dev/core/src/com/google/gwt/dev/shell
  dev/core/src/com/google/gwt/dev/util
  dev/core/src/com/google/gwt/dev/util/arg
  dev/core/src/com/google/gwt/soyc
  dev/core/test/com/google/gwt/core/ext/linker/impl
  dev/core/test/com/google/gwt/dev/cfg
  dev/core/test/com/google/gwt/dev/javac
  dev/core/test/com/google/gwt/dev/jjs/impl
  dev/core/test/com/google/gwt/dev/jjs/impl/codesplitter
  dev/core/test/com/google/gwt/dev/jjs/impl/gflow
  dev/core/test/com/google/gwt/dev/jjs/impl/gflow/cfg
  dev/core/test/com/google/gwt/dev/js
  user/src/com/google/gwt/editor/rebind
  user/src/com/google/gwt/i18n/rebind
  user/src/com/google/gwt/junit
  user/src/com/google/gwt/resources/rg
  user/src/com/google/gwt/safecss/shared
  user/src/com/google/gwt/safehtml/rebind
  user/src/com/google/gwt/safehtml/shared
  user/src/com/google/gwt/uibinder/rebind
  user/src/com/google/gwt/useragent/rebind
  user/src/com/google/gwt/user/rebind
  user/src/com/google/gwt/user/rebind/rpc
  user/src/com/google/gwt/user/rebind/ui
  user/src/com/google/gwt/validation/rebind
  user/test/com/google/gwt/validation/rebind
  user/test/org/hibernate/jsr303/tck/util

lib/hibernate/validator/hibernate-validator-4.1.0.Final.jar:
  user/src/com/google/gwt/validation/rebind
  user/src/org/hibernate/validator/engine

lib/hibernate/validator/tck/jsr303-tck-1.0.3.GA.jar:
  user/test/org/hibernate/jsr303/tck/tests/bootstrap
  user/test/org/hibernate/jsr303/tck/tests/bootstrap/customprovider
  user/test/org/hibernate/jsr303/tck/tests/constraints/application
  user/test/org/hibernate/jsr303/tck/tests/constraints/builtinconstraints
  user/test/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition

user/test/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/nestedconstraintcomposition
  user/test/org/hibernate/jsr303/tck/tests/constraints/constraintdefinition
  user/test/org/hibernate/jsr303/tck/tests/constraints/customconstraint
  user/test/org/hibernate/jsr303/tck/tests/constraints/groups
  user/test/org/hibernate/jsr303/tck/tests/constraints/groups/groupsequence

user/test/org/hibernate/jsr303/tck/tests/constraints/groups/groupsequenceisolation
  user/test/org/hibernate/jsr303/tck/tests/constraints/groups/inheritance
  user/test/org/hibernate/jsr303/tck/tests/constraints/inheritance

user/test/org/hibernate/jsr303/tck/tests/constraints/invalidconstraintdefinitions
  user/test/org/hibernate/jsr303/tck/tests/constraints/validatorresolution
  user/test/org/hibernate/jsr303/tck/tests/messageinterpolation
  user/test/org/hibernate/jsr303/tck/tests/metadata
  user/test/org/hibernate/jsr303/tck/tests/traversableresolver
  user/test/org/hibernate/jsr303/tck/tests/validation
  user/test/org/hibernate/jsr303/tck/tests/validation/graphnavigation
  user/test/org/hibernate/jsr303/tck/tests/validation/validatorcontext
  user/test/org/hibernate/jsr303/tck/tests/validatorfactory
  user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration

user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration/constraintdeclaration

user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration/constraintdeclaration/clazzlevel

user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration/constraintdeclaration/fieldlevel

user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration/constraintdeclaration/propertylevel

user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration/constraintdefinition

lib/htmlunit/htmlunit-2.9/htmlunit-2.9.jar:
  dev/core/src/com/google/gwt/dev/shell
  dev/core/test/com/google/gwt/core/ext/linker/impl
  user/src/com/google/gwt/junit

lib/htmlunit/htmlunit-2.9/htmlunit-core-js-2.9.jar:
  dev/core/src/com/google/gwt/dev/shell
  user/src/com/google/gwt/junit

lib/javax/validation/validation-api-1.0.0.GA.jar:
  user/src/com/google/gwt/editor/client
  user/src/com/google/gwt/editor/client/impl
  user/src/com/google/gwt/editor/client/testing
  user/src/com/google/gwt/validation/client
  user/src/com/google/gwt/validation/client/constraints
  user/src/com/google/gwt/validation/client/impl
  user/src/com/google/gwt/validation/client/impl/metadata
  user/src/com/google/gwt/validation/client/spi
  user/src/com/google/gwt/validation/rebind
  user/src/com/google/web/bindery/requestfactory/gwt/client/testing
  user/src/com/google/web/bindery/requestfactory/server
  user/src/com/google/web/bindery/requestfactory/shared
  user/src/com/google/web/bindery/requestfactory/shared/impl
  user/src/javax/validation
  user/src/org/hibernate/validator/engine
  user/test/com/google/gwt/editor/client
  user/test/com/google/gwt/editor/rebind/model
  user/test/com/google/gwt/validation/client
  user/test/com/google/gwt/validation/client/constraints
  user/test/com/google/gwt/validation/client/impl
  user/test/com/google/gwt/validation/client/impl/metadata
  user/test/com/google/gwt/validation/example/client
  user/test/com/google/gwt/validation/rebind
  user/test/com/google/gwt/validation/testing/constraints
  user/test/com/google/web/bindery/requestfactory/gwt/client
  user/test/com/google/web/bindery/requestfactory/gwt/client/ui
  user/test/com/google/web/bindery/requestfactory/server
  user/test/com/google/web/bindery/requestfactory/shared
  user/test/org/hibernate/jsr303/tck/tests/bootstrap
  user/test/org/hibernate/jsr303/tck/tests/bootstrap/customprovider
  user/test/org/hibernate/jsr303/tck/tests/constraints/application
  user/test/org/hibernate/jsr303/tck/tests/constraints/builtinconstraints
  user/test/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition

user/test/org/hibernate/jsr303/tck/tests/constraints/constraintcomposition/nestedconstraintcomposition
  user/test/org/hibernate/jsr303/tck/tests/constraints/constraintdefinition
  user/test/org/hibernate/jsr303/tck/tests/constraints/customconstraint
  user/test/org/hibernate/jsr303/tck/tests/constraints/groups
  user/test/org/hibernate/jsr303/tck/tests/constraints/groups/groupsequence

user/test/org/hibernate/jsr303/tck/tests/constraints/groups/groupsequenceisolation
  user/test/org/hibernate/jsr303/tck/tests/constraints/groups/inheritance
  user/test/org/hibernate/jsr303/tck/tests/constraints/inheritance

user/test/org/hibernate/jsr303/tck/tests/constraints/invalidconstraintdefinitions
  user/test/org/hibernate/jsr303/tck/tests/constraints/validatorresolution
  user/test/org/hibernate/jsr303/tck/tests/messageinterpolation
  user/test/org/hibernate/jsr303/tck/tests/metadata
  user/test/org/hibernate/jsr303/tck/tests/traversableresolver
  user/test/org/hibernate/jsr303/tck/tests/validation
  user/test/org/hibernate/jsr303/tck/tests/validation/graphnavigation
  user/test/org/hibernate/jsr303/tck/tests/validation/validatorcontext
  user/test/org/hibernate/jsr303/tck/tests/validatorfactory
  user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration

user/test/org/hibernate/jsr303/tck/tests/xmlconfiguration/constraintdeclaration
  user/test/org/hibernate/jsr303/tck/util

lib/jetty/jetty-6.1.11.jar:
  dev/codeserver/java/com/google/gwt/dev/codeserver
  dev/core/src/com/google/gwt/dev/shell/jetty
  user/src/com/google/gwt/junit
  user/test/com/google/web/bindery/requestfactory/server

lib/jscomp/20131014/compiler-rebased.jar:
  dev/core/src/com/google/gwt/dev/js

lib/jscomp/20131014/sourcemap-rebased.jar:
  dev/codeserver/java/com/google/gwt/dev/codeserver
  dev/core/src/com/google/gwt/core/ext/soyc
  dev/core/src/com/google/gwt/core/linker
  user/src/com/google/gwt/core/server
  user/src/com/google/gwt/user/tools

lib/jsr305/jsr305.jar:
  user/test/com/google/gwt/core/client/testing
  user/test/com/google/gwt/dev/jjs/test/unusedimports
  user/test/com/google/gwt/dev/jjs/test/usedimports

lib/protobuf/protobuf-2.5.0/protobuf-java-rebased-2.5.0.jar:
  dev/core/src/com/google/gwt/dev/shell/remoteui
  dev/core/test/com/google/gwt/dev/shell/remoteui

lib/streamhtmlparser/streamhtmlparser-jsilver-r10/streamhtmlparser-jsilver-r10-1.5-rebased.jar:
  user/src/com/google/gwt/safehtml/rebind
  user/src/com/google/gwt/safehtml/shared

lib/tomcat/servlet-api-2.5.jar:
  dev/codeserver/java/com/google/gwt/dev/codeserver
  dev/core/src/com/google/gwt/dev/shell
  dev/core/src/com/google/gwt/dev/shell/log
  user/src/com/google/gwt/core/server
  user/src/com/google/gwt/junit/server
  user/src/com/google/gwt/rpc/server
  user/src/com/google/gwt/user/server
  user/src/com/google/gwt/user/server/rpc
  user/src/com/google/web/bindery/requestfactory/server
  user/test/com/google/gwt/core/server
  user/test/com/google/gwt/http/server
  user/test/com/google/gwt/jsonp/server
  user/test/com/google/gwt/module/server
  user/test/com/google/gwt/user/server
  user/test/com/google/gwt/user/server/rpc
  user/test/com/google/gwt/user/server/runasync
  user/test/com/google/gwt/user/server/ui
  user/test/com/google/web/bindery/requestfactory/server

lib/w3c/flute/flute-1.3-gg2.jar:
  user/src/com/google/gwt/resources/css

lib/w3c/sac/sac-1.3.jar:
  user/src/com/google/gwt/junit
  user/src/com/google/gwt/resources/css

-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors
--- 
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to