SlideShare a Scribd company logo
Scala Support in Eclipse
Monkey-patching the JDT for fun and profit?




                   Miles Sabin, Chuusai Ltd.
                    http://www.chuusai.com/

               http://uk.linkedin.com/in/milessabin
                      http://twitter.com/milessabin
Outline
●
    JVM Languages Need Java-level Tools
●
    The Scala IDE for Eclipse
●
    History
●
    How to Move Forward?
●
    AspectJ and Equinox Aspects
●
    Who is Using This Approach?
●
    Retrospect and Prospects
The Need for Java-level Tools
●
    Many of the new JVM Languages offer
    significant productivity gains over Java, but
    ...
●
    Mainstream adoption requires
    improvements across the entire toolchain
    ●
        A x2 productivity gain at the language level is
        irrelevant if there's a /2 loss at the tool level
●
    Especially so for IDEs
The Need for Java-level Tools
●
    A subset of JVM languages are also “Java-
    compatible”
    ●
        Close source and binary mapping to Java
        –   Scala, Groovy, JavaFX, AspectJ
●
    This holds out hope that many Java tools
    will Just Work, or work with minor
    adaptation
    ●
        eg. Java annotation driven tools generally work
        as expected with Scala
●
    Additional promise of gradual migration
The Need for Java-level Tools
●
    Does this carry over to IDEs?
    ●
        On the positive side there is much common
        infrastructure across languages
        –   This is reflected in IDE extension APIs
    ●
        Buts it's not enough to provide orthogonal
        support
        –   Gradual migration demands that major features of
            the Java tooling be aware of new language artefacts
    ●
        The big value features are the ones which are
        informed by language semantics
        –   Typically private to IDEs language tooling
The Scala IDE for Eclipse
●
    The Scala tooling for Eclipse is an attempt
    to answer the preceeding question in the
    positive
●
    The aim of the project is to achieve tooling
    which approaches that of the Eclipse JDT
    but with vastly less effort
History 1
●
    Started very early on in Scala's timeline
    (early 2005)
●
    Very simple IDE plugin
●
    Little functionality beyond basic syntax
    highlighting and build invocation
●
    Written in Java
●
    There was a least one other similar offering
    at the time: Scaliptor
History 2
●
    Announced December 2005, first release
    February 2006 (2.1.0)
●
    Rewritten in Scala
●
    Some semantic features acquired (eg.
    limited auto-completion)
●
    Even at this early stage requests for the
    ability to mix Java and Scala and JDT
    interop were coming in
History 3
●
    Announced June 2007, first release
    February 2008
●
    Attempted much deeper integration with
    the Scala compiler,
    ●
        Interactive error reporting
    ●
        Semantic highlighting
    ●
        Incremental compilation
    ●
        Dependency management
●
    Many hooks added to scalac
History 4
●
    Start of my involvement (May 2008)
●
    Prompted by very generous sponsorship by
    EDF Trading
●
    Primary goals
    ●
        Ease Java/Scala migation
        –   Mixed Scala/Java compilation in scalac
        –   Mixed Scala/Java projects in Eclipse
    ●
        Improved Eclipse stability and release process
History 4
●
    First commit to trunk in July 2008
●
    Results of the work first visible in
    2.7.2.RC1 in August 2008
●
    Final 2.7.2 release in November
●
    Goals somewhat met,
    ●
        Mixed Scala/Java enabled in scalac and Eclipse
    ●
        Release process dramatically improved
    ●
        However JDT integration limited and stability
        issues remain
How to Move Forward?
●
    Various non-options
    ●
        Fork Eclipse?
        –   It's open source, but too big and too rapidly
            changing. Maintaining a a patch against it would be
            a huge effort
        –   We want users to be able to install our tools into
            their existing eclipse environments
        –   If several JVM languages fork the JDT which one
            wins?
How to Move Forward?
●
    Various non-options
    ●
        Lobby for extensions to the JDT?
        –   Andrew Eisenberg's patch has been languishing in
            Eclipse Bugzilla for 3+ years
        –   JDT team understandably reluctant to see private
            implementation exposed as public API
        –   Alternative JVM languages still a minority interest,
            so little business motivation to make the change
●
    Fortunately AOP provides us with a Plan B
AspectJ and Equinox Aspects
●
    AspectJ is a well-know AOP extension to
    Java
    ●
        Allows behaviour of existing Java classes to be
        modified
        –   Pointcuts specify slices through execution flow
        –   “Advice” is code which is executed before, after or
            completely replacing original specified by pointcuts
AspectJ and Equinox Aspects
●
    Opinions are divided on AOP
    ●
        There are some compelling use cases
        –   Logging, error handling
        –   These cases are typically passive and observational
    ●
        Aspects can also actively modify behaviour, but
        –   It's a gross violation of encapsulation
        –   It can obscure the flow of execution
    ●
        Violating encapsulation is a bad thing ...
        –   ... except when that's exactly what you need to do!
        –   In which case AOP is an industrial strength tool
AspectJ and Equinox Aspects
●
    A collection of aspects is effectively a patch
●
    AspectJ was used to retrofit the desired
    extensibility features to the JDT and
    expose them via public API
●
    The key modification:
    ●
        The JDT's CompilationUnit is the entry point to
        it's internal model, but it assumes Java source
    ●
        An aspect can turn its constructor into a
        factory method
AspectJ and Equinox Aspects
●
    One more piece of the puzzle
    ●
        How to get these aspects applied to an Eclipse
        Installation?
    ●
        We can't require a custom Eclipse build or
        we're back to square one
●
    Enter Equinox Aspects
    ●
        Work of Martin Lippert
    ●
        An OSGi framework extension supporting the
        weaving of aspects into binaries at load time
Who's Using This Approach?
●
    Unsurprisingly the AspectJ tooling for
    Eclipse (AJDT) was the first
●
    The Scala tooling followed soon after
●
    JavaFX is the most recent addition
●
    The Groovy Eclipse tooling is taking the
    patch approach
●
    There has been significant collaboration
    across these projects
Retrospect and Prospects
●
    The results are a qualified success
●
    But the patch was premature,
    ●
        Experience has shown that although the initial
        round of JDT modifications removed the
        biggest hurdles,
        –   There are still many scenarios where Java source
            assumptions are made
        –   The retrofitted public API maps JVM language
            constructs to the JDT's model in a way which best
            fits Java extensions rather than new languages
Retrospect and Prospects
●
    More cross-language collaboration needed
    ●
        We need to draw on the experiences of the
        various groups and factor out common API and
        functionality
    ●
        We need to encourage other languages to
        follow, esp. languages not so close to Java
●
    We need to work with the JDT team to roll
    these changes into Eclipse
Demo
Find Out More
●
    Scala's home at EPFL
    http://www.scala-lang.org
    ●
        See also the scala-user and scala-tools mailing
        lists
●
    Scala IDE installation
    http://www.scala-lang.org/node/94
    ●
        Update site for 2.8.0 Beta 1
    http://www.scala-lang.org/
            scala-eclipse-plugin-beta-preview
Scala Support in Eclipse
Monkey-patching the JDT for fun and profit?




                   Miles Sabin, Chuusai Ltd.
                    http://www.chuusai.com/

               http://uk.linkedin.com/in/milessabin
                      http://twitter.com/milessabin

More Related Content

What's hot (20)

PPTX
Java 9 Module System Introduction
Dan Stine
 
PDF
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15
Wolfgang Weigend
 
PDF
History of java
Mani Sarkar
 
PDF
itft-Java evolution
Atul Sehdev
 
PDF
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
Ryo RKTM
 
PPTX
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Martin Toshev
 
PDF
I18N refactoring support and the TapiJI online translator
mreiterer
 
ODP
The Evolution of Java
Corneil du Plessis
 
PPTX
Java modules using project jigsaw@jdk 9
Mauricio "Maltron" Leal
 
PPT
The Evolution of Java
Fu Cheng
 
PPTX
Java 9 Modularity and Project Jigsaw
Comsysto Reply GmbH
 
PPSX
Introduction to Java
Hitesh-Java
 
PDF
Android Mobile Continuous Integration. UA Mobile 2016.
UA Mobile
 
PDF
Java Desktop 2019
Hendrik Ebbers
 
PDF
Programmatic Load of the Oracle Clinical Global Library
Perficient
 
PPTX
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Mihail Stoynov
 
PDF
Java modules
Rory Preddy
 
PDF
History of Java 2/2
Eberhard Wolff
 
PDF
How and why to upgrade to java 16 or 17
Johan Janssen
 
PDF
Creating Large Scale Software Platforms with OSGi and an Extension Point Mode...
Nuxeo
 
Java 9 Module System Introduction
Dan Stine
 
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15
Wolfgang Weigend
 
History of java
Mani Sarkar
 
itft-Java evolution
Atul Sehdev
 
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
Ryo RKTM
 
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Martin Toshev
 
I18N refactoring support and the TapiJI online translator
mreiterer
 
The Evolution of Java
Corneil du Plessis
 
Java modules using project jigsaw@jdk 9
Mauricio "Maltron" Leal
 
The Evolution of Java
Fu Cheng
 
Java 9 Modularity and Project Jigsaw
Comsysto Reply GmbH
 
Introduction to Java
Hitesh-Java
 
Android Mobile Continuous Integration. UA Mobile 2016.
UA Mobile
 
Java Desktop 2019
Hendrik Ebbers
 
Programmatic Load of the Oracle Clinical Global Library
Perficient
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Mihail Stoynov
 
Java modules
Rory Preddy
 
History of Java 2/2
Eberhard Wolff
 
How and why to upgrade to java 16 or 17
Johan Janssen
 
Creating Large Scale Software Platforms with OSGi and an Extension Point Mode...
Nuxeo
 

Similar to Eclipsecon 2010 - Scala Support in Eclipse (20)

PDF
Scaladays 2010 - The Scala IDE for Eclipse - Retrospect and Prospect for 2.8 ...
Miles Sabin
 
PDF
Voxxed Athens 2018 - Java EE is dead Long live jakarta EE!
Voxxed Athens
 
PDF
Java Course 15: Ant, Scripting, Spring, Hibernate
Anton Keks
 
PPTX
Learning Java 1 - Introduction to Java Basic
MinhNguyen1493
 
PDF
Introduction to Java
Professional Guru
 
PDF
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
GlobalLogic Ukraine
 
PPTX
Java. converted (2)
AVINASHMEHRA6
 
PDF
Lecture-01 _Java Introduction CS 441 Fast
UzairSaeed18
 
PDF
Spring Boot 3 And Beyond
VMware Tanzu
 
PDF
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...
Raffi Khatchadourian
 
KEY
Introduction to Java 7 (OSCON 2012)
Martijn Verburg
 
PDF
Scala and Play with Gradle
Wei Chen
 
PDF
Introduction to java
Levent YILDIZ
 
PPTX
Introducing the JAQ (Java, Angular, Sql/NoSQL) Stack
Suren Konathala
 
PPTX
Java Introduction
javeed_mhd
 
PPTX
Java Programming
Elizabeth alexander
 
PDF
Java 2012 conference keynote - Java Strategy & Roadmap - WebLogic & GlassFish...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Java Basics in Mule
Rajkattamuri
 
PPTX
Java Basics
Khan625
 
PPTX
Java in Mule
Shahid Shaik
 
Scaladays 2010 - The Scala IDE for Eclipse - Retrospect and Prospect for 2.8 ...
Miles Sabin
 
Voxxed Athens 2018 - Java EE is dead Long live jakarta EE!
Voxxed Athens
 
Java Course 15: Ant, Scripting, Spring, Hibernate
Anton Keks
 
Learning Java 1 - Introduction to Java Basic
MinhNguyen1493
 
Introduction to Java
Professional Guru
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
GlobalLogic Ukraine
 
Java. converted (2)
AVINASHMEHRA6
 
Lecture-01 _Java Introduction CS 441 Fast
UzairSaeed18
 
Spring Boot 3 And Beyond
VMware Tanzu
 
Porting the NetBeans Java 8 Enhanced For Loop Lambda Expression Refactoring t...
Raffi Khatchadourian
 
Introduction to Java 7 (OSCON 2012)
Martijn Verburg
 
Scala and Play with Gradle
Wei Chen
 
Introduction to java
Levent YILDIZ
 
Introducing the JAQ (Java, Angular, Sql/NoSQL) Stack
Suren Konathala
 
Java Introduction
javeed_mhd
 
Java Programming
Elizabeth alexander
 
Java 2012 conference keynote - Java Strategy & Roadmap - WebLogic & GlassFish...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Java Basics in Mule
Rajkattamuri
 
Java Basics
Khan625
 
Java in Mule
Shahid Shaik
 
Ad

Recently uploaded (20)

PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PPTX
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Ad

Eclipsecon 2010 - Scala Support in Eclipse

  • 1. Scala Support in Eclipse Monkey-patching the JDT for fun and profit? Miles Sabin, Chuusai Ltd. http://www.chuusai.com/ http://uk.linkedin.com/in/milessabin http://twitter.com/milessabin
  • 2. Outline ● JVM Languages Need Java-level Tools ● The Scala IDE for Eclipse ● History ● How to Move Forward? ● AspectJ and Equinox Aspects ● Who is Using This Approach? ● Retrospect and Prospects
  • 3. The Need for Java-level Tools ● Many of the new JVM Languages offer significant productivity gains over Java, but ... ● Mainstream adoption requires improvements across the entire toolchain ● A x2 productivity gain at the language level is irrelevant if there's a /2 loss at the tool level ● Especially so for IDEs
  • 4. The Need for Java-level Tools ● A subset of JVM languages are also “Java- compatible” ● Close source and binary mapping to Java – Scala, Groovy, JavaFX, AspectJ ● This holds out hope that many Java tools will Just Work, or work with minor adaptation ● eg. Java annotation driven tools generally work as expected with Scala ● Additional promise of gradual migration
  • 5. The Need for Java-level Tools ● Does this carry over to IDEs? ● On the positive side there is much common infrastructure across languages – This is reflected in IDE extension APIs ● Buts it's not enough to provide orthogonal support – Gradual migration demands that major features of the Java tooling be aware of new language artefacts ● The big value features are the ones which are informed by language semantics – Typically private to IDEs language tooling
  • 6. The Scala IDE for Eclipse ● The Scala tooling for Eclipse is an attempt to answer the preceeding question in the positive ● The aim of the project is to achieve tooling which approaches that of the Eclipse JDT but with vastly less effort
  • 7. History 1 ● Started very early on in Scala's timeline (early 2005) ● Very simple IDE plugin ● Little functionality beyond basic syntax highlighting and build invocation ● Written in Java ● There was a least one other similar offering at the time: Scaliptor
  • 8. History 2 ● Announced December 2005, first release February 2006 (2.1.0) ● Rewritten in Scala ● Some semantic features acquired (eg. limited auto-completion) ● Even at this early stage requests for the ability to mix Java and Scala and JDT interop were coming in
  • 9. History 3 ● Announced June 2007, first release February 2008 ● Attempted much deeper integration with the Scala compiler, ● Interactive error reporting ● Semantic highlighting ● Incremental compilation ● Dependency management ● Many hooks added to scalac
  • 10. History 4 ● Start of my involvement (May 2008) ● Prompted by very generous sponsorship by EDF Trading ● Primary goals ● Ease Java/Scala migation – Mixed Scala/Java compilation in scalac – Mixed Scala/Java projects in Eclipse ● Improved Eclipse stability and release process
  • 11. History 4 ● First commit to trunk in July 2008 ● Results of the work first visible in 2.7.2.RC1 in August 2008 ● Final 2.7.2 release in November ● Goals somewhat met, ● Mixed Scala/Java enabled in scalac and Eclipse ● Release process dramatically improved ● However JDT integration limited and stability issues remain
  • 12. How to Move Forward? ● Various non-options ● Fork Eclipse? – It's open source, but too big and too rapidly changing. Maintaining a a patch against it would be a huge effort – We want users to be able to install our tools into their existing eclipse environments – If several JVM languages fork the JDT which one wins?
  • 13. How to Move Forward? ● Various non-options ● Lobby for extensions to the JDT? – Andrew Eisenberg's patch has been languishing in Eclipse Bugzilla for 3+ years – JDT team understandably reluctant to see private implementation exposed as public API – Alternative JVM languages still a minority interest, so little business motivation to make the change ● Fortunately AOP provides us with a Plan B
  • 14. AspectJ and Equinox Aspects ● AspectJ is a well-know AOP extension to Java ● Allows behaviour of existing Java classes to be modified – Pointcuts specify slices through execution flow – “Advice” is code which is executed before, after or completely replacing original specified by pointcuts
  • 15. AspectJ and Equinox Aspects ● Opinions are divided on AOP ● There are some compelling use cases – Logging, error handling – These cases are typically passive and observational ● Aspects can also actively modify behaviour, but – It's a gross violation of encapsulation – It can obscure the flow of execution ● Violating encapsulation is a bad thing ... – ... except when that's exactly what you need to do! – In which case AOP is an industrial strength tool
  • 16. AspectJ and Equinox Aspects ● A collection of aspects is effectively a patch ● AspectJ was used to retrofit the desired extensibility features to the JDT and expose them via public API ● The key modification: ● The JDT's CompilationUnit is the entry point to it's internal model, but it assumes Java source ● An aspect can turn its constructor into a factory method
  • 17. AspectJ and Equinox Aspects ● One more piece of the puzzle ● How to get these aspects applied to an Eclipse Installation? ● We can't require a custom Eclipse build or we're back to square one ● Enter Equinox Aspects ● Work of Martin Lippert ● An OSGi framework extension supporting the weaving of aspects into binaries at load time
  • 18. Who's Using This Approach? ● Unsurprisingly the AspectJ tooling for Eclipse (AJDT) was the first ● The Scala tooling followed soon after ● JavaFX is the most recent addition ● The Groovy Eclipse tooling is taking the patch approach ● There has been significant collaboration across these projects
  • 19. Retrospect and Prospects ● The results are a qualified success ● But the patch was premature, ● Experience has shown that although the initial round of JDT modifications removed the biggest hurdles, – There are still many scenarios where Java source assumptions are made – The retrofitted public API maps JVM language constructs to the JDT's model in a way which best fits Java extensions rather than new languages
  • 20. Retrospect and Prospects ● More cross-language collaboration needed ● We need to draw on the experiences of the various groups and factor out common API and functionality ● We need to encourage other languages to follow, esp. languages not so close to Java ● We need to work with the JDT team to roll these changes into Eclipse
  • 21. Demo
  • 22. Find Out More ● Scala's home at EPFL http://www.scala-lang.org ● See also the scala-user and scala-tools mailing lists ● Scala IDE installation http://www.scala-lang.org/node/94 ● Update site for 2.8.0 Beta 1 http://www.scala-lang.org/ scala-eclipse-plugin-beta-preview
  • 23. Scala Support in Eclipse Monkey-patching the JDT for fun and profit? Miles Sabin, Chuusai Ltd. http://www.chuusai.com/ http://uk.linkedin.com/in/milessabin http://twitter.com/milessabin