EXTENDJ is an extensible Java compiler, previously known as JastAddJ. It has been used in a variety of projects to build new languages on top of Java, and to experiment with new language constructs. In this tutorial, we focus on how to use EXTENDJ for analyzing source code. EXTENDJ has recently been extended to support Java 8. It is programmed using a modular declarative technique, implemented in a system called JastAdd. Programming in JastAdd is similar to programming in Java, but instead of using imperative visitors or compiler phases, you program with high-level attributes and equations, using an object-oriented variant of attribute grammars. In EXTENDJ, the different analyses, like name resolution, type analysis, and control-flow analysis, are specified as separate modules. Special-purpose analyses can be added easily as new modules, for example, to compute object-oriented metrics, or for bug detection. A new module simply needs to define new attributes – there is no need to think about in what order things are computed. Recently, EXTENDJ has been integrated into Google’s TRICORDER program analysis platform and SHIPSHAPE, an open-source version of TRICORDER. EXTENDJ allows advanced analyses to run fast by relying on the underlying demand-driven evaluator of JastAdd, which evaluates only those attributes actually needed for a given analysis. SPLASH is an ideal venue for this tutorial because EXTENDJ is a tool useful for both software engineering systems in production and for research in programming languages. This tutorial is aimed at researchers and practitioners interested in doing advanced source code analyses on Java. It is also useful for those interested in experimenting with new language constructs on top of Java, and those interested in using JastAdd for other language projects. Prior knowledge of Java is assumed.