Getting Eclipse to work with Google’s Ginormous Codebase™
Frank Kieviet, Google
Contents
The Google Build environment
Code management system at Google
Google’s “build” language
Google’s build system
Google developer’s experience
Using Eclipse at Google
Basic problems
Approaches
General approach: work on a small subset of the source tree
(typically 10000-20000 Java source files)
Magicjar
Three components:
Scope
Classpath generation
Classpath generation
Dependency analysis
class Compiler extends
org.eclipse.jdt.internal.compiler.batch.Main
@Override protected void setPaths(...) {
newClasspaths.add(new IndexedClasspath(...));
this.checkedClasspaths = newClasspaths;
}
}
IndexedClasspath
class IndexedClasspath implements
org.eclipse.jdt.internal.compiler.batch.FileSystem.Classpath
When the BatchCompiler asks for a class:
After compilation finishes:
Bytecode stripping
Classpath generation
Classpath generation: unexpected problem
Problem:
Solution:
Remaining problems
Eclipse plugin
Eclipse plugin
Eclipse plugin responsibilities
Scope
<extension
point="org.eclipse.core.resources.filterMatchers">
<filterMatcher
public class FilterFileResourceFilter extends
org.eclipse.core.resources.filtermatchers.AbstractFileInfoMatcher {
Lookup sources for compiled code
<extension
point="org.eclipse.ui.editors">
public class ExtendedClassFileEditor extends
org.eclipse.jdt.internal.ui.javaeditor.ClassFileEditor {
JVM Configurations
<extension
point="org.eclipse.jdt.launching.vmInstalls">
Custom classloader
Custom classloader
Custom classloader
Problems
there sometimes ARE versioning problems
if (Class.forName(“...”) != null) {
// we’re apparently in our private testing environment
Solution
Conclusion
Merits of approach
Thank you!
Frank Kieviet, Google
http://google.com/+FrankKieviet (requires G+ account)