1copyright © 2012, oracle and/or its affiliates. all ... · 1copyright © 2012, oracle and/or its...

68
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1

Upload: others

Post on 12-Oct-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 131

Page 2: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 132

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 3: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 133

Type annotations in Java 8и почему это хорошоAlexandre (Shura) IlineJava quality architect

Page 4: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 134Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 16

ProgramAgenda

Quick emotional introduction

– What's wrong with testing

Annotations before Java 8

Type annotations

Checkers framework

Custom annotations

Page 5: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 135

What's wrong with testing?

Page 6: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 136

Here's a developer.

He works hard

Designs the feature

Implements the feature

Submits the fix ...

on a feature

With a bug!

Tests (good developer) ...

Page 7: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 137

Testing Fix ready Pre-integration testing Build More testing Promotion Yet more testing

– Few layers of testing Went to customer Real world testing

(less then an hour)

(nightly)

(weekly)

(take weeks)

(how long – no idea)

Page 8: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 138

Back to the developer

Which developer?

That developer could ...

- be working on something else

- leave for a vacation

- get sick

- leave the company

- transfer the responsibility

Has to switch, re-learn the design, etc. etc.

Often just patch.

Page 9: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 139

Could it be done differently?

More pre-integration testing.

– Yes, please! :)

– Including unit and some functional

– Still too little Static analysis

– only helps that much Reviews

– better

– no predictability, though

Page 10: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1310

Fundamental problems with testing

Too late

– Comes after the implementation is complete

– Cost of bug grows

– Enforces multi-tasking Not a silver bullet

– Next slide

Page 11: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1311

(1972)

Program testing can be used to show the presence of bugs, but never to show their absence.[“Structured programming”, Dahl O.J., Dijkstra E.W. and Hoare C.A.R.]

Page 12: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1312

Formal verification

Formal verification is the act of proving or disproving the correctness of intended algorithms underlying a system with respect to a certain formal specification or property, using formal methods of mathematics.

Testing – upper bounds for program quality

– Passed tests mean nothing

– Failed tests means something is broken Formal verification – lower bounds for program quality

– Guarantees absence of failures of some kind

Page 13: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1313

Formal verification. Applied. Take with caution.boolean isPowerOfTwo(int a){return (a&(a-1))==0;}

(a1…a

k)10....0a =

m >= 0a > 0 => binary presentation of a has a least one 1 bit

a-1= (a1…a

k)01....1 a&(a-1)=(a

1…a

k)00....0

m m

a&(a-1) = 0 => a1,...,a

k = 0 => a = 2m

a = 2n => m=n, a1,...,a

k = 0 => a&(a-1) = 0

∀0<a∈N :a&(a−1)=0⇔∃n∈N :a=2n

Page 14: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1314

[When] you have given the proof of [a program's] correctness, … [you] can dispense with testing altogether.[“Software engineering”, Naur P., Randell B.]

(1969)

Only the true formal verification is too expensive

Page 15: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1315

How is that all related to type annotations?

Hold on.

Page 16: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1316

Annotations in JavaBefore 8

Page 17: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1317

Annotation

an-no-ta-tion: a critical or explanatory note added to a text– the statement above is from a dictionary

– the statement above is an annotation

In Java (and other programming languages)

Information about a software program that is not a part of the program itself

@FromDictionary

Page 18: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1318

Annotations in Java. Examples

@Stateless @LocalBean public class GalleryFacade {

@EJB private GalleryEAO galleryEAO;

@TransactionAttribute(SUPPORTS)

public Gallery findById(Long id) { ... }

@TransactionAttribute(REQUIRED)

public void create(String name) { … }

Page 19: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1319

Annotations in Java

Introduced in Java 5 Built-in

– @Override– @Deprecated– @SupressWarning

Custom Used extensively

– JavaEE– Test harnesses

@

Page 20: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1320

JSRs

JSR-175: A Metadata Facility for the JavaTM Programming Language

A metadata facility for the JavaTM Programming Language would allow classes, interfaces, fields, and methods to be marked as having particular attributes.

JSR-250: Common Annotations for the JavaTM Platform

This JSR will develop annotations for common semantic concepts in the J2SE and J2EE platforms that apply across a variety of individual technologies.

JSR-269: Pluggable Annotations Processing API

Provide an API to allow the processing of JSR 175 annotations (metadata); this will require modeling elements of the Java(TM) programming language as well as processing-specific functionality.

Page 21: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1321

Before Java 8

@A public class Test {

@B private int a = 0;

@C public void m(@D Object o) {

@E int a = 1;

...

}

}

Declarations only– Class

– Method

– Field

– Parameter

– Variable

Page 22: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1322

Before Java 8

@Target

– ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE

@Retention

– SOURCE, CLASS, RUNTIME

Fields, default values

– @Test(timeout=100)

– Primitive, String, Class, enum, array of the above No inheritance

Page 23: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1323

Typical application programmer will never have to define an annotation type, but it is not hard to do so.[Java language guide.

http://docs.oracle.com/javase/1.5.0/docs/guide/language/]

Yet done often for a purpose of testing.

Page 24: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1324

Custom annotations

Define a custom annotation type Apply to the code Use in runtime

– Reflection Use in compile-time

– Annotation processor

Page 25: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1325

Custom annotation

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface Property {

String value();

boolean waitable() default false;

}

@Property(“Text”)

public String getText() {...}

Page 26: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1326

Custom annotation. Runtime.

java.lang.Class– getAnnotation(Class<A>), getAnnotations(),

getDeclaredAnnotations()

java.lang.reflect.Method– getAnnotation(Class<A>), getDeclaredAnnotations(),

getParameterAnnotation()

java.lang.reflect.Field– getAnnotation(Class<A>), getDeclaredAnnotations()

Page 27: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1327

Custom annotation. Runtime.

private void addAnnotationProps(Object bean) {

for (Method m : bean.getClass().getMethods()) {

if (m.isAnnotationPresent(Property.class)) {

String name = m.getAnnotation(Property.class).value();

//put method result into a map

}

}

}

Page 28: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1328

Custom annotation. Compile time.

javax.annotation.processing.Processor

– Set<String> getSupportedAnnotationTypes()

– boolean process(Set<? extends TypeElement>, RoundEnvironment)

javax.annotation.processing.RoundEnvironment

– Set<? extends java.lang.model.element.Element> getElementsAnnotatedWith(Class<A>)

javac … -processor <annotation processor class> …

Page 29: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1329

Custom annotations. Compile time.

public class PropProcessor extends AbstractProcessor { ... @Override public boolean process(Set<? extends TypeElement> set, RoundEnvironment re) { for (Element e : re.getElementsAnnotatedWith(Property.class)) { Property p = el.getAnnotation(Property.class); //generate the waiting code } }}

Page 30: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1330

How is that all related to verification?

Just a little bit longer.

Page 31: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1331

Annotations in Java 8

Page 32: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1332

Annotations in Java 8

Could be used on any use of a type

– more on next slides ... @Target

– TYPE_PARAMETER, TYPE_USE

Repeating annotations

@

Page 33: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1333

JSR 308: Annotations on Java Types

This JSR extends the Java annotation syntax to permit annotations on any occurrence of a type. Previously, annotations could not be placed on generic type arguments, type casts, etc.

Page 34: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1334

JSR 308: Annotations on Java Types (1)

method receivers

public int size() @Readonly { ... }

generic type arguments

Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

arrays

Document[][@Readonly] docs2 =

new Document[2] [@Readonly 12];

Page 35: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1335

JSR 308: Annotations on Java Types (2)

typecasts

myString = (@NonNull String)myObject;

type tests

boolean isNonNull = myString instanceof @NonNull String;

object creation

new @NonEmpty @Readonly List(myNonEmptyStringSet)

Page 36: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1336

JSR 308: Annotations on Java Types (3)

type parameter bounds

<T extends @A Object, U extends @C Cloneable>

class inheritance

class UnmodifiableList implements @Readonly List<@Readonly T> { ... }

throws clauses

void monitorTemperature() throws @Critical TemperatureException { ... }

Page 37: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1337

Annotations in Java 8. More examples

class Person {

...

void setValue(@Mutable Person this, String firstName) {

this.firstName = firstName;

}

...

}

@NonNull MyClass @Length(2)[] @ReadOnly[]

Page 38: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1338

Still, how is that all related to verification?

Next slide.

Page 39: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1339

Annotations in Java 8

Permitted on every type use Are analyse-able at compile time The whole compilation tree is available for analysis

Hence …

A lot of verification could be done at compile time

Page 40: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1340

JSR 305: Annotations for Software Defect Detection

This JSR will work to develop standard annotations (such as @NonNull) that can be applied to Java programs to assist tools that detect software defects.

Nullness Check return value Taint Concurrency Internationalization

Page 41: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1341

Checkers framework

Page 42: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1342

Checkers framework

The Checker Framework enhances Java’s type system to make it more powerful and useful. This lets software developers detect and prevent errors in their Java programs.

Works now – with JDK 7 14 checkers. Allows to build custom checkers

http://types.cs.washington.edu/checker-framework/

Page 43: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1343

Checkers framework.

Works for JDK 7

– substituting javac

– generating valid byte-code

– only affects compile-time Eclipse plugin

$ <checkers>/binary/javac -processor <a checker> <other parameters>

$ java -jar <checkers>/binary/javac.jar -processor <a checker> <other parameters>

@

Page 44: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1344

Checkers framework.

@TypeQualifier

“Inheritance”

– @SubtypeOf(Class<? extends Annotation>)

Automatic type refinement Default qualifiers

– @ImplicitFor(<class names or classes or types>)

– checkers.types.TreeAnnotator

Page 45: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1345

Checkers framework. Type checkers.

Nullness IGJ (Immutability Generics Java) Lock Property file Units Typestate

@

Page 46: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1346

Nullness checker

If the Nullness checker issues no warnings for a given program, then running that program will never throw a null pointer exception.

@Nullable, @NonNull, @PolyNull @Raw, @NonRaw, @PolyRaw @NonNullOnEntry, @Pure, @AssertNonNullAfter,

@AssertNonNullIfTrue, @AssertNonNullIfFalse, @AssertParametersNonNull

Page 47: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1347

@Nullable Object obj;@NonNull Object nnobj;...nnobj.toString();obj.toString();nnobj = obj;obj = nnobj;if (nnobj == null) ...if (obj != null) { nnobj = obj; //type refinement}

Nullness checker

Page 48: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1348

IGJ checkers

@Immutable @Mutable @ReadOnly @Assignable @AssignFields @I

Page 49: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1349

Lock checker

If the Lock checker issues no warnings for a given program, then the program holds the appropriate lock every time that it accesses a variable.

Inspired by “Java Concurrency In Practice” (?) @GuardedBy – only allowed to access if a particular lock is held @Holding – only allowed to be called if a particular lock is held

Page 50: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1350

Lock checker

@GuardedBy("MyClass.myLock") Object myMethod() { ... }

@GuardedBy("MyClass.myLock") Object x = myMethod();

@GuardedBy("MyClass.myLock") Object y = x;

Object z = x;x.toString();

synchronized(MyClass.myLock) { y.toString();}

Page 51: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1351

Lock checker

void helper1(@GuardedBy("MyClass.myLock") Object a) { a.toString(); synchronized(MyClass.myLock) { a.toString(); }}

@Holding("MyClass.myLock")void helper2(@GuardedBy("MyClass.myLock") Object b) { b.toString();}

Page 52: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1352

Lock checker.

@GuardedBy and @Holding parameter syntax.

this : the object in whose class the field is defined.class-name.this : for inner classes.itself : the object to which the field refers.field-name : the (instance or static) field.class-name.field-name : the static field.method-name() : the object is returned by calling the named method.class-name.class : the Class object for the specified class.

Page 53: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1353

Property file checker

The property file checker ensures that a property file or resource bundle (both of which act like maps from keys to values) is only accessed with valid keys.

@PropertyKey

– No need to annotate the literals @Localized

– a localized message @LocalizableKey

– a key to a localizable message

Page 54: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1354

Units checker

@Area: @mm2, @m2, @inch2 ... @Current: @A @Length: @m, @mm, @inch @Luminance: @cd @Mass: @kg, @pound @Speed: @mPERs, @kmPERh @Substance: @mol @Temperature: @C, @K @Time: @s, @min, @h

Page 55: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1355

Units checker

@Documented@Retention(RetentionPolicy.RUNTIME)@TypeQualifier@SubtypeOf( { Time.class } )@UnitsMultiple(quantity=s.class, prefix=Prefix.nano)@Target(ElementType.TYPE_USE, ElementType.TYPE_PARAMETER)public @interface ns {}

Page 56: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1356

Typestate checker

@State public static @interface Opened { ... }  @State public static @interface Closed { ... }class Stream {

void open(@Closed(after=Opened.class) this);void close(@Opened(after=Closed.class) this);void int read(@Opened this);

}@Opened Stream stream1 = ...; @Closed Stream stream2 = ...;stream1.read();stream2.read();stream2.open(); stream2.read(); 

Page 57: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1357

Custom checkers

Page 58: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1358

public class Account {

private final @CreditCard String cardNumber;

public Account(@CreditCard String number) {

this.cardNumber = number;

}

public @CreditCard String getCardNumber() {

return cardNumber;

}

}

@CreditCard. Usage

Page 59: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1359

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE_USE,

ElementType.TYPE_PARAMETER})

@TypeQualifier

@SubtypeOf(Unqualified.class)

public @interface CreditCard {}

@CreditCard. Annotation

Page 60: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1360

@TypeQualifiers(CreditCard.class)

@SuppressWarningsKey("credit.card")

public class CreditCardChecker extends BaseTypeChecker {

...

}

public class CreditCardAnnotator extends TreeAnnotator {

public Void visitLiteral(LiteralTree tree,

AnnotatedTypeMirror type) {

...

}

}

@CreditCard. Checker and annotator

Page 61: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1361

@SuppressWarnings("credit.card")

@CreditCard String convert(String input) {

if(checkLuhn(input))

return input;

else

throw IllegalArgumentException("...");

}

new Account("4111111111111111");

new Account("4111111111111110");

@CreditCard. Usage

Page 62: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1362

A card number in an account is always validated That is guaranteed at compile time You do not need to test with invalid numbers You do need to test

– All @SuppressWarnings("credit.card")– checkLuhn(String cardNum)

@CreditCard

Page 63: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1363

More real life examples.

class SafeMath { public static double sqrt(@Positive double value)

{…}}@Positive p;@Negative n;sqrt(p);sqrt(p – n);sqrt(n*n); sqrt(n);sqrt(p + n);

Page 64: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1364

Is this a “formal verification”?

It is a “verification”, for sure.

Page 65: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1365

Conclusion

Formal verification vs testing Annotations before Java 8 Annotations in Java 8 Checkers framework Custom annotations

@

Page 66: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1366

Q&A

Page 67: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1367

Type annotations in Java 8и почему это хорошоAlexandre (Shura) IlineJava quality architect

Page 68: 1Copyright © 2012, Oracle and/or its affiliates. All ... · 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification

Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1368