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.
