Copyright BEA 2005, made available under EPL 1.0 | 1 Using Java Annotations in Eclipse Gary Horen BEA Systems Tim Wagner BEA Systems.

Презентация:



Advertisements
Похожие презентации
© Luxoft Training 2013 Annotations. © Luxoft Training 2013 Java reflection / RTTI // given the name of a class, get a "Class" object that // has all info.
Advertisements

© 2005 by IBM; made available under the EPL v1.0 | March 1, 2005 Tim deBoer Gorkem Ercan Extend WTP Server Tools for your.
© 2002 IBM Corporation Confidential | Date | Other Information, if necessary © Wind River Systems, released under EPL 1.0. All logos are TM of their respective.
Loader Design Options Linkage Editors Dynamic Linking Bootstrap Loaders.
© 2009 Avaya Inc. All rights reserved.1 Chapter Three, Voic Pro Advanced Functions Module Four – Voic Campaigns.
Inner Classes. 2 Simple Uses of Inner Classes Inner classes are classes defined within other classes The class that includes the inner class is called.
© 2009 Avaya Inc. All rights reserved.1 Chapter Two, Voic Pro Components Module Two – Actions, Variables & Conditions.
© 2006 Cisco Systems, Inc. All rights reserved. HIPS v Administering Events and Generating Reports Managing Events.
ADVANCED DRESS-UP FEATURES 39. Once OK has been selected, your part will appear with the filleted area highlighted by orange lines at the boundaries.
MOUSE MANIPULATION 23. The 3 button mouse is your tool for manipulation of the parts and assemblies that you have created. With it you can ZOOM, ROTATE.
© 2005 Cisco Systems, Inc. All rights reserved.INTRO v Managing Your Network Environment Managing Cisco Devices.
Structured Error Handling in the ABL Sarah Marshall QA Architect, OpenEdge Session 128.
© 2006 Cisco Systems, Inc. All rights reserved.ISCW v IPsec VPNs Configuring IPsec Site-to-Site VPN Using SDM.
© 2002 IBM Corporation Confidential | Date | Other Information, if necessary Web Application Development with WTP EclipseWorld 2005 Tim Wagner, WTP PMC.
1 When And How To Make Interfaces Work For You Advanced OO Techniques Alex Herbstritt Principal Software Engineer, Progress Software Session 102.
OLAP ModelKit is a powerful and high-performance OLAP component specially designed to help you reduce your development time and costs while building effective.
1/27 Chapter 9: Template Functions And Template Classes.
© 2005 by IBM; made available under the EPL v1.0 | May 19, 2005 Tim deBoer WTP Server Tools Open House.
The waterfall model is a popular version of the systems development life cycle model for software engineering. Often considered the classic approach to.
Yogesh Mehla Now concept of logic building is not so complex and not so simple. We will not work on how to make logic program in.
Транксрипт:

Copyright BEA 2005, made available under EPL 1.0 | 1 Using Java Annotations in Eclipse Gary Horen BEA Systems Tim Wagner BEA Systems

Copyright BEA 2005, made available under EPL 1.0. | 2 Agenda Background Simple Example Demo Mirror API and APT Pitfalls More Elaborate Example Futures

Copyright BEA 2005, made available under EPL 1.0. | 3 What are annotations? Metadata placed directly in your source code Standardized by JSR 175, added to Java in 1.5 Intended to replace xdoclet-style programming with a modern, type-checked str=hi) public class Foo { … }

Copyright BEA 2005, made available under EPL 1.0. | 4 What are annotations? Defined using Java – much like interfaces Can be used by both tools and runtimes Enable a simpler POJO-based programming model MyAnnotation { int num; String str; }

Copyright BEA 2005, made available under EPL 1.0. | 5 What can an annotation Public class Foo { } Endpoint Interface XML-Java Bindings Example: helping a POJO to become a web service Annotations on user code generate helper objects Endpoint interface: receives and parses XML message Bindings embody the message as parameters to the POJO method generates

Copyright BEA 2005, made available under EPL 1.0. | 6 Who uses annotations? J2SE – builtin annotations J2EE – EBJ 3.0, JSR 181, JSR 250, JAXB 2.0, JAX-WS rd party frameworks: Hibernate, Beehive, Spring …and eventually every major

Copyright BEA 2005, made available under EPL 1.0. | 7 Build-time uses Many annotations effects happen at build time, not run time I need to create a stub/skeleton that matches this interface I need to inform my container that I need resource X I need to verify that this method meets some constraints We need several things to make this useful Something to process a set of annotations – an annotation processor A build (compile) time container for these processors – a compiler with extra smarts Enhanced visual tools – make Eclipse aware of the special semantics of annotations

Copyright BEA 2005, made available under EPL 1.0. | 8 Process view Processor public class Foo {... } Annotated Source File apt tool in JDK 1.5 or Eclipse apt plugin processoranother processor calls

Copyright BEA 2005, made available under EPL 1.0. | 9 What can an annotation processor do? Can Claim a set of annotations Check annotations for semantic errors Generate new Java source files Generate arbitrary data files (e.g. deployment descriptor) Cannot Change the bytecode generated when the file is compiled in any way

Copyright BEA 2005, made available under EPL 1.0. | 10 Demo DemoAnnotation An Annotation contains elements Elements contain names and values An annotation processor can check element values for correctness TypeGeneratingAnnotation Generates a Java source file

Copyright BEA 2005, made available under EPL 1.0. | 11 Demo: processor finds invalid value

Copyright BEA 2005, made available under EPL 1.0. | 12 Demo: annotation generates type

Copyright BEA 2005, made available under EPL 1.0. | 13 Agenda Background Simple Example Demo The mirror API and APT Pitfalls More Elaborate Example Futures

Copyright BEA 2005, made available under EPL 1.0. | 14 What you need to provide Step 1: Locate or write your own annotation(s) MyAnnotation { int num; String str; }

Copyright BEA 2005, made available under EPL 1.0. | 15 What you need to provide Step 2: Write an annotation processor factory import com.sun.mirror.apt.*; public class MyAnnotationFactory implements AnnotationProcessorFactory { AnnotationProcessor getProcessorFor() … }

Copyright BEA 2005, made available under EPL 1.0. | 16 What you need to provide Step 3: Write an annotation processor import com.sun.mirror.apt.*; public class MyAnnotationProcessor implements AnnotationProcessor { void process() }

Copyright BEA 2005, made available under EPL 1.0. | 17 Packaging You provide The annotation declaration An implementation of AnnotationProcessorFactory An implementation of AnnotationProcessor These are packaged in a jar Processor runs inside a dispatching framework Command line APT org.eclipse.jdt.apt.core plugin

Copyright BEA 2005, made available under EPL 1.0. | 18 Environment APIs Annotation Processor Environment Type system exploration File generation Error messages Declarations @Baz... b a c d

Copyright BEA 2005, made available under EPL 1.0. | 19 Using AnnotationProcessorEnvironment AnnotationProcessorEnvironment getDeclarationsWith(annotation) Declaration AnnotationMirror Element map getAnnotationMirrors() getElementValues()

Copyright BEA 2005, made available under EPL 1.0. | 20 Processing rounds Round 1: Original source files Round 3: Types generated in round 2 Round 2: Types generated by processing original files in round 1

Copyright BEA 2005, made available under EPL 1.0. | 21 Write once – processor reuse apt tool in JDK 1.5 or Eclipse apt processor Eclipse apt plugin or apt tool in JDK 1.5

Copyright BEA 2005, made available under EPL 1.0. | 22 Dispatching: command line support apt Tool available in JDK 1.5 (along with javac, javadoc, javap, etc.) Works like javac, but with something extra: It runs 3 rd party annotation processors in addition to compiling source code Any generated types also get compiled Locates factories through META-INF/services/ com.sun.mirror.apt.AnnotationProcessorFactory file: Each line of file = fully qualified factory class name % apt –classpath Proc.jar MyProgram.java

Copyright BEA 2005, made available under EPL 1.0. | 23 Dispatching: inside Eclipse From a jar file external to the workspace Classpath variables provide indirection From a jar file inside a project Static jar only: jar file may not be rebuilt in same workspace that uses it Jar file must be available on the Eclipse Java compiler runtime classpath From a plugin Debugging must be done in plugin: Build in development workspace Run on annotated source in debugged workspace

Copyright BEA 2005, made available under EPL 1.0. | 24 Eclipse APT configuration UI

Copyright BEA 2005, made available under EPL 1.0. | 25 Agenda Background Simple Example Demo The mirror API and APT Pitfalls More Elaborate Example Futures

Copyright BEA 2005, made available under EPL 1.0. | 26 Pitfall: APT round class class Mumble Round class class class class GenMoo Round 2 All of round 1 runs first Then all of round 2

Copyright BEA 2005, made available under EPL 1.0. | 27 Pitfall: Eclipse round class class Mumble Round class class class class GenMoo Round 2 Dispatch all this Rounding in Eclipse must be file-at-a-time for performance reasons. Then this

Copyright BEA 2005, made available under EPL 1.0. | 28 Pitfall: gathering generated files Dont do this. It depends on dispatcher implementation. Instead: gather generated files in a post-build class class class class GenX Foo.xml Roo.xml Goo.xml Round 1 generates Round 2 reads all

Copyright BEA 2005, made available under EPL 1.0. | 29 Pitfall: processor requests generated type Dont do this. It depends on visibility of generated types. But: generated types can refer to other generated class class Moo class class GenFoo class GenGoo Round 1 generates Round 2 generates Generated type refers to: OK Anno processor requests: not OK

Copyright BEA 2005, made available under EPL 1.0. | 30 Pitfall: APT round class class Mumble Round class class class class GenMoo Round 2 All of round 1 runs first Then all of round 2

Copyright BEA 2005, made available under EPL 1.0. | 31 Pitfall: build vs. reconcile Interactive (as you type) compilation = reconcile Cant put new files on disk File generation happens only during build Best practice: build your workspace before you edit Then reconcile can see generated types Less confusion for the user Set project autobuild (build on Save) to on Keep build current Hopefully reconcile limitation goes away in next release

Copyright BEA 2005, made available under EPL 1.0. | 32 Agenda Background Simple Example Demo The Mirror API and APT Pitfalls More Elaborate Example Futures

Copyright BEA 2005, made available under EPL 1.0. | 33 Example: the Chargeable annotation App developer annotates a class to use the accounting system: Class level Method level

Copyright BEA 2005, made available under EPL 1.0. | 34 What do? class executeRequest() start = currentTimeMillis(); _service.executeRequest(); AccountSystem.charge( currentTimeMillis() – start); class SomeServiceWrapper private SomeService _service; public executeRequest() Generates wrapper class with proxy method that posts charge Generates ISomeService interface; both wrapper and app class implement Generates factory that creates the wrapped SomeService class

Copyright BEA 2005, made available under EPL 1.0. | 35 Code public class AnalysisService public ResultSet executeQuery(String key) { … =.007) public int findMedianSalary(ResultSet res) { … public int findMeanSales(ResultSet res) { … }

Copyright BEA 2005, made available under EPL 1.0. | generates source files Generated source Users code

Copyright BEA 2005, made available under EPL 1.0. | 37 Agenda Background Simple Example Demo The Mirror API and APT Pitfalls More Elaborate Example Futures JSR 269 UI Enhancements

Copyright BEA 2005, made available under EPL 1.0. | 38 JSR 269 Annotations already standard language feature (JSR 175) Standard annotations exist for specific applications (JSR 181, 220) The mirror API is a preview interface (com.sun.mirror) Sun has announced intention to open-source interfaces JSR 269 will standardize the processor API (in javax package space) Specification will wrap up soon, to be available in Java SE 6 Target Eclipse availablity: 3.2 Mirror support continues in Eclipse until 269 widely adopted

Copyright BEA 2005, made available under EPL 1.0. | 39 User Interface APIs Eclipse apt processor factory

Copyright BEA 2005, made available under EPL 1.0. | 40 Eclipse-specific functionality Code assistance inside annotation values Auto-completion Quick-fix Visual editing A special viewer/editor for annotations Refactoring Participation in rename operations Find-uses

Copyright BEA 2005, made available under EPL 1.0. | 41 Code assistance: auto-completion User presses Ctrl-space Annotation processor proposes content

Copyright BEA 2005, made available under EPL 1.0. | 42 Code assistance: quick-fix Annotation processor posts an error or warning User presses Ctrl-1 Annotation processor can propose fixes to the user

Copyright BEA 2005, made available under EPL 1.0. | 43 Visual Annotation buffer = true), conversation ) public boolean testVerifyFunds(Mumble m) { … } Show complex annotations in friendlier way Property pane-like UI Values in code in bold typeface Defaulted values in normal typeface Make nested annotations understandable

Copyright BEA 2005, made available under EPL 1.0. | 44 Release Timeline: APT in Eclipse JUNJULAUGSEPOCTNOVDECJANFEBMARAPRJUN Alpha (core) 3.1 Beta (UI Features) APT released as part of JDT

Copyright BEA 2005, made available under EPL 1.0. | 45 Q & A Try it out! Download and install at:

Copyright BEA 2005, made available under EPL 1.0 | 46 Using Java Annotations in Eclipse Gary Horen BEA Systems Tim Wagner BEA Systems