who took the cookie from the cookie jar?

22
© 2002 IBM Corporation Confidential | Date | Other Information, if necessary Copy right © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v 1.0. Who Took The Cookie From The Cookie Jar? Olivier Thomann IBM Ottawa Lab March 25 th , 2010

Upload: olivier-thomann

Post on 26-May-2015

4.481 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Who Took The Cookie From The Cookie Jar?

© 2002 IBM CorporationConfidential | Date | Other Information, if necessaryCopyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Who Took The Cookie From The Cookie Jar?

Olivier ThomannIBM Ottawa Lab

March 25th, 2010

Page 2: Who Took The Cookie From The Cookie Jar?

2Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Overview

• API Tooling Features• API Use Reports• Future Work• Summary• Q&A

Page 3: Who Took The Cookie From The Cookie Jar?

3Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

API Tooling Features

• Reports Illegal API use Binary incompatibility relative to a baseline Incorrect bundle version numbers Missing or malformed @since tags Leakage of non-APIs types inside APIs Invalid references inside system libraries

• Tightly integrated toolset in the Eclipse SDK Currently limited to Plug-in projects/OSGi bundles Runs as a builder (auto-build, incremental and full builds) Immediate feedback as you develop and use APIs

Page 4: Who Took The Cookie From The Cookie Jar?

4Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Specifying API Contracts• Use Javadoc tags

E.g. @noimplement, @noextend, @noreference, @noinstantiate

• Benefits Contracts live with the code for producers and consumers Content assist helps developers Available for projects that are not using 1.5 annotations Restrictions appear in published Javadoc APIs in a standard

way Tools can process tags

Page 5: Who Took The Cookie From The Cookie Jar?

5Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Example of Published API

Page 6: Who Took The Cookie From The Cookie Jar?

6Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Binary Compatibility

• Evolving APIs such that they are backwards compatible with existing binaries http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs It is easy to get it wrong Now the tooling takes care of this

• The user simply specifies an API baseline Generally this means pointing to the previous release

Page 7: Who Took The Cookie From The Cookie Jar?

7Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Bundle Version Number Management• http://wiki.eclipse.org/index.php/Version_Numbering• The tooling takes care of letting the user know when

the minor or major version of a bundle should be changed according to the following rules: A new API that is not a breaking change requires the minor

version to be incremented A new API that is a breaking change requires the major

version to be incremented

• No support for the micro version for the initial release. Technically speaking, this version should be changed as

soon as any modification is made in the source code: comment change, method body change,…

Page 8: Who Took The Cookie From The Cookie Jar?

8Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Detecting API Leaks

• This is a crucial task to maintain a good API• It detects the usage of non-API types exposed by API

definitions through return types of methods, method parameter types, thrown exceptions and field’s type.

• Having such leaks can make your API unusable since the internal types might not be accessible

Page 9: Who Took The Cookie From The Cookie Jar?

9Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Filtering of API Problems

• Each component can define a problem filters• The filters are used to remove/ignore known breakage

from reports. For example, an API breakage has been approved by the

PMC and you don’t want to get it reported for each build.

Page 10: Who Took The Cookie From The Cookie Jar?

10Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

IDE and Build Process

• Each feature is available from within the IDE or during the build process.

• The IDE support is required to help the Eclipse developer while the code is written

• The build process support is required to provide feedback during the Eclipse build. This also allows other projects to use it inside their builds.

Page 11: Who Took The Cookie From The Cookie Jar?

11Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

IDE support

• Addition of a new builder• Addition of a new nature• Creation of markers for each type of api problems:

missing @since tags, binary compatibility issues, API usage, …

• Addition of quick-fixes• Addition of code assist for Javadoc tag proposals

Page 12: Who Took The Cookie From The Cookie Jar?

12Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Build support

• Addition of new Ant tasks: Generation of an .api_description file Comparison of SDK drops: binary compatibility, API usage

reports

• Integration inside the Eclipse builds (headless mode)• Integration inside Ant build (no Eclipse running)

Page 13: Who Took The Cookie From The Cookie Jar?

13Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

API Use Scans

• Once the APIs are specified, the user needs to make sure that he/she is using them appropriately.

• API use reports flag any kind of illegal API use: API use: reference to an API that is not supposed to be

referenced, implementation of an interface that is not supposed to be implemented, ….

The current toolset cannot detect use of in-lined members

• A consequence of wrong illegal API usage is to increase the potential binary incompatibilities with future releases.

Page 14: Who Took The Cookie From The Cookie Jar?

14Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Migration Reports

• This can be generated once an API usage report is available

• A migration report is generated from: an API use report A newer release of the API being used

• It detects all possible migration issues that could occur between the version from which the API usage report has been generated and the current version Note: problems with constants will not be detected

Page 15: Who Took The Cookie From The Cookie Jar?

15Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Demos of API Usage and Migration reports

Page 16: Who Took The Cookie From The Cookie Jar?

16Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Future Work

Page 17: Who Took The Cookie From The Cookie Jar?

17Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Post 3.6 Work• Handling of package versioning• Support extended to support more than just bundles

Pure Java™ projects Consider plug-in extension points

• Global searching inside Eclipse projects• Improve integration with Rel-Eng build reporting• Determine compatible version range of required

bundles• And what you might suggest

Page 18: Who Took The Cookie From The Cookie Jar?

18Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Summary

Page 19: Who Took The Cookie From The Cookie Jar?

19Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

API Tooling today

• Help you to define your API restrictions• Keep a consistent and standard presentation of API

restrictions• Detect binary breakage between a baseline and the

current version• Detect illegal API usage and generate reports• Generate migration reports• Detect wrong @since tags and inconsistent bundle

versioning• Detect API leaking• Detect illegal references inside BREEs

Page 20: Who Took The Cookie From The Cookie Jar?

20Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Links

• Wiki http://wiki.eclipse.org/Api_Tooling

• Bugzilla https://bugs.eclipse.org/bugs/enter_bug.cgi?product=PDE

• Please send any questions you might have to the API tooling team: [email protected] [email protected] [email protected]

Page 21: Who Took The Cookie From The Cookie Jar?

21Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Q & A

Page 22: Who Took The Cookie From The Cookie Jar?

22Copyright © IBM Corp., 2010. All rights reserv ed. Licensed under EPL, v1.0.

Legal Notices• Copyright © IBM Corp., 2007-2010. All rights reserved. This presentation and the

source code in it are made available under the EPL, v1.0.• Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in

the United States, other countries, or both.• Eclipse and the Eclipse logo are trademarks of Eclipse Foundation, Inc.• IBM and the IBM logo are trademarks or registered trademarks of IBM Corporation,

in the United States, other countries or both.• Other company, product, or service names may be trademarks or service marks of

others.• THE INFORMATION DISCUSSED IN THIS PRESENTATION IS PROVIDED FOR

INFORMATIONAL PURPOSES ONLY. WHILE EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION, IT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, AND IBM SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, SUCH INFORMATION. ANY INFORMATION CONCERNING IBM'S PRODUCT PLANS OR STRATEGY IS SUBJECT TO CHANGE BY IBM WITHOUT NOTICE