I do care a lot about this topic:

I'm new to the source code of GWT; I did started digging into it less than
one month ago with the intent of ease use of GWT in OSGi environment.
For this reason, I did a (simple) run of JDepend on the GWT source code,
merged all together in a single project, to study packages dependencies. I
got this report http://goo.gl/U688XQ that also gives an idea of the
complexity.

Another proof of the coupling comes from the final OSGi Import-Package and
and Export-Package setup I had to use (see at the end) to make
gwt-servlet.jar work as an independent OSGi bundle serving gwt examples
from the distribution.


My overall feeling is that the initial partition into User & Dev is no more
sufficient to the size of the project,
and I also judge a mistake that need to be fixed the way Servlet jar is
formed by extracting classes from the two previous.

I think it would help designing the ideal modularity of GWT with a mind map
or in another breakdown structure form, so that new developments could
follow a good orientation. If the vision is clear, people could refactor
code gradually while working on other features and patches.

Probably we will need to be prepared to breaking some backward
compatibility (for example, gwt-servlet that is expected to depend only on
server side or shared code, won't work without the package
com.google.gwt.user.client.rpc and I think com.google.gwt.user.client.rpc
should be moved to com.google.gwt.user.shared.rpc) and this could be only
acceptable for a very major release (GWT 3.0.0?). If this has to be done,
it has to be motivated by a clear path.

In the end, as an example, take a look at the Apache Wicket project, it
probably have the same size of GWT and the level of modularity of it source
code seems good (Wicket has however a other design issues and I prefer a
lot GWT ;-) )

Please go on and deep on this topic,
Cristiano


PS. OSGi's Import-Package and Export-Package necessary for gwt-servlet.jar.
Note the setup may not be optimal, I did followed a Test Driven approach
stopping as soon as each example was working.

Import-Package =
com.google.web.bindery.event.shared
com.google.web.bindery.requestfactory.shared.messages
javax.annotation
javax.annotation.processing
javax.imageio
javax.imageio.metadata
javax.imageio.stream
javax.inject
javax.lang.model
javax.lang.model.element
javax.lang.model.type
javax.lang.model.util
javax.servlet
javax.servlet.http
javax.tools
javax.validation
javax.validation.bootstrap
javax.validation.constraints
javax.validation.groups
javax.validation.metadata
javax.validation.spi
junit.framework
org.json
org.w3c.css.sac
org.w3c.dom
org.w3c.flute.parser
sun.misc
Export-Package =
com.google.gwt.activity.shared
com.google.gwt.codegen.server
com.google.gwt.core.server
com.google.gwt.core.shared
com.google.gwt.dev.asm
com.google.gwt.dev.asm.commons
com.google.gwt.dev.asm.signature
com.google.gwt.dev.asm.tree
com.google.gwt.dev.asm.util
com.google.gwt.dev.protobuf
com.google.gwt.dev.util
com.google.gwt.dom.builder.shared
com.google.gwt.event.logical.shared
com.google.gwt.event.shared
com.google.gwt.event.shared.testing
com.google.gwt.i18n.linker
com.google.gwt.i18n.server
com.google.gwt.i18n.server.keygen
com.google.gwt.i18n.server.testing
com.google.gwt.i18n.shared
com.google.gwt.junit.linker
com.google.gwt.logging.server
com.google.gwt.logging.shared
com.google.gwt.place.shared
com.google.gwt.precompress.linker
com.google.gwt.regexp.shared
com.google.gwt.resources.css
com.google.gwt.resources.css.ast
com.google.gwt.resources.ext
com.google.gwt.resources.rg
com.google.gwt.rpc.linker
com.google.gwt.rpc.server
com.google.gwt.safecss.shared
com.google.gwt.safehtml.shared
com.google.gwt.text.shared
com.google.gwt.text.shared.testing
com.google.gwt.thirdparty.debugging.sourcemap
com.google.gwt.thirdparty.debugging.sourcemap.proto
com.google.gwt.thirdparty.guava.common.annotations
com.google.gwt.thirdparty.guava.common.base
com.google.gwt.thirdparty.guava.common.base.internal
com.google.gwt.thirdparty.guava.common.cache
com.google.gwt.thirdparty.guava.common.collect
com.google.gwt.thirdparty.guava.common.escape
com.google.gwt.thirdparty.guava.common.eventbus
com.google.gwt.thirdparty.guava.common.hash
com.google.gwt.thirdparty.guava.common.html
com.google.gwt.thirdparty.guava.common.io
com.google.gwt.thirdparty.guava.common.math
com.google.gwt.thirdparty.guava.common.net
com.google.gwt.thirdparty.guava.common.primitives
com.google.gwt.thirdparty.guava.common.reflect
com.google.gwt.thirdparty.guava.common.util.concurrent
com.google.gwt.thirdparty.guava.common.xml
com.google.gwt.thirdparty.streamhtmlparser
com.google.gwt.thirdparty.streamhtmlparser.util
com.google.gwt.typedarrays.server
com.google.gwt.typedarrays.shared
com.google.gwt.uibinder.attributeparsers
com.google.gwt.uibinder.elementparsers
com.google.gwt.user.client.rpc
com.google.gwt.user.client.rpc.core.com.google.gwt.core.shared
com.google.gwt.user.client.rpc.core.java.lang
com.google.gwt.user.client.rpc.core.java.math
com.google.gwt.user.client.rpc.core.java.sql
com.google.gwt.user.client.rpc.core.java.util
com.google.gwt.user.client.rpc.core.java.util.logging
com.google.gwt.user.client.rpc.impl
com.google.gwt.user.linker.rpc
com.google.gwt.user.server
com.google.gwt.user.server.rpc
com.google.gwt.user.server.rpc.core.java.lang
com.google.gwt.user.server.rpc.core.java.util
com.google.gwt.util.regexfilter
com.google.gwt.util.tools.shared
com.google.web.bindery.autobean.shared
com.google.web.bindery.autobean.vm
com.google.web.bindery.event.shared
com.google.web.bindery.event.shared.testing
com.google.web.bindery.requestfactory.apt
com.google.web.bindery.requestfactory.server
com.google.web.bindery.requestfactory.server.testing
com.google.web.bindery.requestfactory.shared
com.google.web.bindery.requestfactory.shared.messages
com.google.web.bindery.requestfactory.shared.testing
com.google.web.bindery.requestfactory.vm
com.google.web.bindery.requestfactory.vm.impl
com.google.web.bindery.requestfactory.vm.testing
org.hibernate.validator.engine





2013/11/15 Matthew Dempsky <[email protected]>

> 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.
>

-- 
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