Bug 539045: Add use of nullable annotations

Follow-up-to: 1120915de4003d914eed47ff96b9d367f30a6ccb
Change-Id: I6e30a0ed8bb4692d918ddf2028a9345fa9c4dd50
diff --git a/CHANGES.md b/CHANGES.md
new file mode 100644
index 0000000..09c232c
--- /dev/null
+++ b/CHANGES.md
@@ -0,0 +1,9 @@
+# Notable Changes in StatET RJ
+
+## RJ 3.0.0 ~ StatET 4.0.0
+
+### General
+
+  * All bundles require the bundle `org.eclipse.statet.jcommons.util`.
+
+  * Large parts of API provide nullable annotations. (Bug 539045)
diff --git a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
index 121cdef..50d7f98 100644
--- a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
+++ b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
@@ -42,6 +42,8 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.RjException;
 import org.eclipse.statet.rj.data.REnvironment;
 import org.eclipse.statet.rj.data.RJIO;
@@ -1274,7 +1276,7 @@
 		}
 	}
 	
-	public final void evalVoid(final String expression, final RObject envir,
+	public final void evalVoid(final String expression, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (expression == null) {
 			throw new NullPointerException("expression");
@@ -1303,7 +1305,7 @@
 		}
 	}
 	
-	public final void evalVoid(final String name, final RList args, final RObject envir,
+	public final void evalVoid(final String name, final RList args, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1335,8 +1337,8 @@
 		}
 	}
 	
-	public RObject evalData(final String expression, final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final String expression, final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (expression == null) {
 			throw new NullPointerException("expression");
@@ -1366,8 +1368,8 @@
 		}
 	}
 	
-	public RObject evalData(final String name, final RObject args, final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final String name, final RObject args, final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1401,7 +1403,7 @@
 	}
 	
 	public final RObject evalData(final RReference reference,
-			final String factoryId, final int options, final int depth,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		final byte checkedDepth= (depth < Byte.MAX_VALUE) ? (byte) depth : Byte.MAX_VALUE;
 		final int level= newDataLevel();
@@ -1428,7 +1430,7 @@
 	}
 	
 	public RObject evalData(final byte envType, final String name,
-			final String factoryId, final int options, final int depth,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1469,7 +1471,7 @@
 		}
 	}
 	
-	public final void assignData(final String expression, final RObject data, final RObject envir,
+	public final void assignData(final String expression, final RObject data, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (expression == null) {
 			throw new NullPointerException("expression");
@@ -1502,7 +1504,7 @@
 	}
 	
 	public final void assignData(final String name, final RObject args, final String expression,
-			final RObject envir,
+			final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (name == null) {
 			throw new NullPointerException("name");
@@ -1538,7 +1540,7 @@
 	}
 	
 	public RObject[] findData(final String symbol, final RObject envir, final boolean inherits,
-			final String factoryId, final int options, final int depth,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (symbol == null) {
 			throw new NullPointerException("symbol");
diff --git a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java
index f29f624..b26e421 100644
--- a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java
+++ b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/FunctionCallImpl.java
@@ -20,6 +20,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RList;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RObjectFactory;
@@ -29,12 +32,13 @@
 import org.eclipse.statet.rj.services.RService;
 
 
+@NonNullByDefault
 public class FunctionCallImpl implements FunctionCall {
 	
 	
 	private final String name;
 	
-	private final List<String> argNames= new ArrayList<>();
+	private final List<@Nullable String> argNames= new ArrayList<>();
 	private final List<RObject> argValues= new ArrayList<>();
 	
 	private final AbstractRJComClient rjs;
@@ -50,7 +54,7 @@
 	
 	
 	@Override
-	public FunctionCall add(final String arg, final String expression) {
+	public FunctionCall add(final @Nullable String arg, final String expression) {
 		if (expression == null) {
 			throw new NullPointerException();
 		}
@@ -66,7 +70,7 @@
 	}
 	
 	@Override
-	public FunctionCall add(final String arg, final RObject data) {
+	public FunctionCall add(final @Nullable String arg, final RObject data) {
 		if (data == null) {
 			throw new NullPointerException();
 		}
@@ -81,7 +85,7 @@
 	}
 	
 	@Override
-	public FunctionCall addLogi(final String arg, final boolean logical) {
+	public FunctionCall addLogi(final @Nullable String arg, final boolean logical) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createLogiData(new boolean[] { logical }) );
 		this.argNames.add(arg);
@@ -95,7 +99,7 @@
 	}
 	
 	@Override
-	public FunctionCall addInt(final String arg, final int integer) {
+	public FunctionCall addInt(final @Nullable String arg, final int integer) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createIntData(new int[] { integer }) );
 		this.argNames.add(arg);
@@ -109,7 +113,7 @@
 	}
 	
 	@Override
-	public FunctionCall addNum(final String arg, final double numeric) {
+	public FunctionCall addNum(final @Nullable String arg, final double numeric) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createNumData(new double[] { numeric }) );
 		this.argNames.add(arg);
@@ -123,7 +127,7 @@
 	}
 	
 	@Override
-	public FunctionCall addChar(final String arg, final String character) {
+	public FunctionCall addChar(final @Nullable String arg, final String character) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createCharData(new String[] { character }));
 		this.argNames.add(arg);
@@ -137,7 +141,7 @@
 	}
 	
 	@Override
-	public FunctionCall addCplx(final String arg, final double real, final double imaginary) {
+	public FunctionCall addCplx(final @Nullable String arg, final double real, final double imaginary) {
 		final RObject data= this.rObjectFactory.createVector(
 				this.rObjectFactory.createCplxData(new double[] { real }, new double[] {imaginary }) );
 		this.argNames.add(arg);
@@ -151,7 +155,7 @@
 	}
 	
 	@Override
-	public FunctionCall addNull(final String arg) {
+	public FunctionCall addNull(final @Nullable String arg) {
 		this.argNames.add(arg);
 		this.argValues.add(RNullImpl.INSTANCE);
 		return this;
@@ -165,7 +169,7 @@
 	
 	private RList prepareArgs(final IProgressMonitor monitor) throws CoreException {
 		// TODO step by step upload for large objects
-		final String[] names= this.argNames.toArray(new String[this.argNames.size()]);
+		final String[] names= this.argNames.toArray(new @Nullable String[this.argNames.size()]);
 		final RObject[] values= this.argValues.toArray(new RObject[this.argValues.size()]);
 		assert (names.length == values.length);
 		return this.rObjectFactory.createList(values, names);
@@ -178,7 +182,7 @@
 	}
 	
 	@Override
-	public void evalVoid(final RObject envir, final IProgressMonitor monitor) throws CoreException {
+	public void evalVoid(final @Nullable RObject envir, final IProgressMonitor monitor) throws CoreException {
 		final RList args= prepareArgs(monitor);
 		this.rjs.evalVoid(this.name, args, envir, monitor);
 	}
@@ -190,15 +194,15 @@
 	}
 	
 	@Override
-	public RObject evalData(final String factoryId, final int options, final int depth,
+	public RObject evalData(final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		final RList args= prepareArgs(monitor);
 		return this.rjs.evalData(this.name, args, null, factoryId, options, depth, monitor);
 	}
 	
 	@Override
-	public RObject evalData(final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		final RList args= prepareArgs(monitor);
 		return this.rjs.evalData(this.name, args, envir, factoryId, options, depth, monitor);
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java
index cee235f..84d473c 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RArray.java
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_ARRAY array}, if it is an R
@@ -38,8 +41,10 @@
  * @see RDataUtils#getDataIdxs(int[], int, int)
  * @param <TData> the type of the data store
  */
+@NonNullByDefault
 public interface RArray<TData extends RStore<?>> extends RObject {
 	
+	
 	/**
 	 * Returns the length of the object. The length of an {@link RObject#TYPE_ARRAY array}
 	 * is the count of all data values, the product of its dimensions.
@@ -58,25 +63,25 @@
 	RIntegerStore getDim();
 	
 	/**
-	 * Returns the names for the dimensions of the array. This corresponds to 
-	 * the names of the R attribute <code>dimnames</code> respectively of the R function 
+	 * Returns the names for the dimensions of the array. This corresponds to
+	 * the names of the R attribute <code>dimnames</code> respectively of the R function
 	 * <code>dimnames(object)</code>. That means it is equivalent to the R command
 	 * <code>names(dimnames(object))</code>. The names for the indexes in each dimension,
 	 * the values of the R attribute <code>dimnames</code>, are accessible by {@link #getNames(int)}.
 	 * 
-	 * The returned character data has the same length as the dimension data {@link #getDim()}. 
-	 * If the R element does not have names, the names are invalid, or names are disabled, the 
+	 * The returned character data has the same length as the dimension data {@link #getDim()}.
+	 * If the R element does not have names, the names are invalid, or names are disabled, the
 	 * method returns <code>null</code>.
 	 * 
 	 * @return a charater data store with the names of the dimensions or <code>null</code>
 	 * 
 	 * @since de.walware.rj.data 0.5
 	 */
-	RCharacterStore getDimNames();
+	@Nullable RCharacterStore getDimNames();
 	
 	/**
-	 * Returns the names for the indexes in the given dimension of the array. This corresponds to 
-	 * the values of the R attribute <code>dimnames</code> respectively of the R function 
+	 * Returns the names for the indexes in the given dimension of the array. This corresponds to
+	 * the values of the R attribute <code>dimnames</code> respectively of the R function
 	 * <code>dimnames(object)</code>. The names for the dimensions itself are accessible by
 	 * {@link #getDimNames()}.
 	 * 
@@ -86,7 +91,7 @@
 	 * 
 	 * @since de.walware.rj.data 0.5
 	 */
-	RStore<?> getNames(int dim);
+	@Nullable RStore<?> getNames(int dim);
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java
index 5c48cac..1cfadb2 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataFrame.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
- * An R object is of the type {@link RObject#TYPE_DATAFRAME vector}, if it is an R list object 
- * inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame} and compiling with the R rules for 
+ * An R object is of the type {@link RObject#TYPE_DATAFRAME vector}, if it is an R list object
+ * inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame} and compiling with the R rules for
  * a data frame, especially its children are {@link RVector}s of the same length.
  * <p>
  * The methods {@link #getLength()}, {@link #getName(int)}, {@link #get(int)} and
@@ -27,11 +30,13 @@
  * similar functionality with direct access to the data stores of the columns, bypassing the RVector
  * objects.</p>
  * <p>
- * The row information of the data frame are accessible by {@link #getRowCount()} and 
+ * The row information of the data frame are accessible by {@link #getRowCount()} and
  * {@link #getRowNames()}.</p>
  */
+@NonNullByDefault
 public interface RDataFrame extends RList, RObject {
 	
+	
 	/**
 	 * Returns the number of columns of the data frame.
 	 * <p>
@@ -79,7 +84,7 @@
 	 * @return the column vector or <code>null</code> (if no column with the specified name exists)
 	 */
 	@Override
-	RObject get(String name);
+	@Nullable RObject get(String name);
 	
 	/**
 	 * For a data frame this method always returns <code>null</code>.
@@ -87,7 +92,7 @@
 	 * @return <code>null</code>
 	 */
 	@Override
-	RStore<?> getData();
+	@Nullable RStore<?> getData();
 	
 	
 	/**
@@ -147,7 +152,7 @@
 	 * @param name the name of the column
 	 * @return the data store of the column or <code>null</code> (if no column with the specified name exists)
 	 */
-	public RStore<?> getColumn(String name);
+	public @Nullable RStore<?> getColumn(String name);
 	
 	/**
 	 * Returns the number of rows of the data frame.
@@ -165,7 +170,7 @@
 	 * 
 	 * @return the row names
 	 */
-	RStore<?> getRowNames();
+	@Nullable RStore<?> getRowNames();
 	
 	
 //	void setColumn(int idx, RStore<?> column);
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java
index 0decdff..a7c4ad4 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RDataUtils.java
@@ -14,13 +14,17 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
+
+@NonNullByDefault
 public class RDataUtils {
 	
 	/**
 	 * Returns the common abbreviation for the type of the given data store.
 	 * These are the abbreviations used by the R function <code>str(x)</code>.
-	 * If there is no abbreviation for the given type, it return the class name 
+	 * If there is no abbreviation for the given type, it return the class name
 	 * of an R vector with data of this type.
 	 * 
 	 * @param store the data store
@@ -233,7 +237,7 @@
 	}
 	
 	
-	public static final boolean isSingleString(final RObject obj) {
+	public static final boolean isSingleString(final @Nullable RObject obj) {
 		final RStore<?> data;
 		return (obj != null && (data= obj.getData()) != null
 				&& data.getStoreType() == RStore.CHARACTER
@@ -241,7 +245,7 @@
 	}
 	
 	
-	public static final RVector<?> checkRVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<?> checkRVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -252,7 +256,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RLogicalStore> checkRLogiVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RLogicalStore> checkRLogiVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -266,7 +270,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RIntegerStore> checkRIntVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RIntegerStore> checkRIntVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -280,7 +284,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RNumericStore> checkRNumVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RNumericStore> checkRNumVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -294,7 +298,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RVector<RCharacterStore> checkRCharVector(final RObject obj) throws UnexpectedRDataException {
+	public static final RVector<RCharacterStore> checkRCharVector(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -307,7 +311,7 @@
 		return (RVector<RCharacterStore>) obj;
 	}
 	
-	public static final RArray<?> checkRArray(final RObject obj) throws UnexpectedRDataException {
+	public static final RArray<?> checkRArray(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -317,7 +321,7 @@
 		return (RArray<?>) obj;
 	}
 	
-	public static final RArray<?> checkRArray(final RObject obj, final int dim) throws UnexpectedRDataException {
+	public static final RArray<?> checkRArray(final @Nullable RObject obj, final int dim) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -333,7 +337,7 @@
 		return array;
 	}
 	
-	public static final RArray<?> checkRArray(final RObject obj, final long dim) throws UnexpectedRDataException {
+	public static final RArray<?> checkRArray(final @Nullable RObject obj, final long dim) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -350,7 +354,7 @@
 	}
 	
 	@SuppressWarnings("unchecked")
-	public static final RArray<RCharacterStore> checkRCharArray(final RObject obj, final int dim) throws UnexpectedRDataException {
+	public static final RArray<RCharacterStore> checkRCharArray(final @Nullable RObject obj, final int dim) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -369,7 +373,7 @@
 		return array;
 	}
 	
-	public static final RList checkRList(final RObject obj) throws UnexpectedRDataException {
+	public static final RList checkRList(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -379,7 +383,7 @@
 		return (RList) obj;
 	}
 	
-	public static final RDataFrame checkRDataFrame(final RObject obj) throws UnexpectedRDataException {
+	public static final RDataFrame checkRDataFrame(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -389,7 +393,7 @@
 		return (RDataFrame) obj;
 	}
 	
-	public static final RDataFrame checkRDataFrame(final RObject obj, final long length) throws UnexpectedRDataException {
+	public static final RDataFrame checkRDataFrame(final @Nullable RObject obj, final long length) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -402,7 +406,7 @@
 		return (RDataFrame) obj;
 	}
 	
-	public static final RReference checkRReference(final RObject obj) throws UnexpectedRDataException {
+	public static final RReference checkRReference(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -413,7 +417,7 @@
 		return (RReference) obj;
 	}
 	
-	public static final RReference checkRReference(final RObject obj, final byte referencedObjectType)
+	public static final RReference checkRReference(final @Nullable RObject obj, final byte referencedObjectType)
 			throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
@@ -431,7 +435,7 @@
 		return (RReference) obj;
 	}
 	
-	public static final RLanguage checkRLanguage(final RObject obj) throws UnexpectedRDataException {
+	public static final RLanguage checkRLanguage(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -441,7 +445,7 @@
 		return (RLanguage) obj;
 	}
 	
-	public static final Boolean checkSingleLogi(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable Boolean checkSingleLogi(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -461,7 +465,7 @@
 		return Boolean.valueOf(data.getLogi(0));
 	}
 	
-	public static final boolean checkSingleLogiValue(final RObject obj) throws UnexpectedRDataException {
+	public static final boolean checkSingleLogiValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -481,7 +485,7 @@
 		return data.getLogi(0);
 	}
 	
-	public static final Integer checkSingleInt(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable Integer checkSingleInt(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -501,7 +505,7 @@
 		return Integer.valueOf(data.getInt(0));
 	}
 	
-	public static final int checkSingleIntValue(final RObject obj) throws UnexpectedRDataException {
+	public static final int checkSingleIntValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -521,7 +525,7 @@
 		return data.getInt(0);
 	}
 	
-	public static final Double checkSingleNum(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable Double checkSingleNum(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -541,7 +545,7 @@
 		return Double.valueOf(data.getNum(0));
 	}
 	
-	public static final double checkSingleNumValue(final RObject obj) throws UnexpectedRDataException {
+	public static final double checkSingleNumValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -561,7 +565,7 @@
 		return data.getNum(0);
 	}
 	
-	public static final String checkSingleChar(final RObject obj) throws UnexpectedRDataException {
+	public static final @Nullable String checkSingleChar(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -578,7 +582,7 @@
 		return data.getChar(0);
 	}
 	
-	public static final String checkSingleCharValue(final RObject obj) throws UnexpectedRDataException {
+	public static final String checkSingleCharValue(final @Nullable RObject obj) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
@@ -598,7 +602,7 @@
 		return data.getChar(0);
 	}
 	
-	public static final RObject checkType(final RObject obj, final byte objectType) throws UnexpectedRDataException {
+	public static final RObject checkType(final @Nullable RObject obj, final byte objectType) throws UnexpectedRDataException {
 		if (obj == null) {
 			throw new UnexpectedRDataException("Missing R object.");
 		}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java
index 76d64bc..0d89f58 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/REnvironment.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_ENVIRONMENT environment}, if the
@@ -26,6 +28,7 @@
  * Even the interface extends {@link RList}, the objects are not a list in R!
  * The inheritance is only for a uniform API.</p>
  */
+@NonNullByDefault
 public interface REnvironment extends RList {
 	
 	/**
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java
index 1e06234..facafd8 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RFunction.java
@@ -14,7 +14,11 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
+
+@NonNullByDefault
 public interface RFunction extends RObject {
 	
 //	RArgument getArgument(final int idx);
@@ -23,7 +27,7 @@
 //	Iterator<RArgument> getArgumentIterator();
 	
 	// source based
-	String getHeaderSource();
-	String getBodySource();
+	@Nullable String getHeaderSource();
+	@Nullable String getBodySource();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java
index e4afe0b..f0e48aa 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RJIOExternalizable.java
@@ -16,7 +16,10 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
 public interface RJIOExternalizable {
 	
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java
index 4af0911..ca87adf 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RLanguage.java
@@ -14,10 +14,14 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * R object of type call
  */
+@NonNullByDefault
 public interface RLanguage extends RObject {
 	
 	
@@ -30,7 +34,7 @@
 	
 	byte getLanguageType();
 	
-	String getSource();
+	@Nullable String getSource();
 	
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java
index 5cec8c5..0182450 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RList.java
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_LIST list}, if the object is
@@ -24,7 +27,7 @@
  * objects of this type.</p>
  * <p>
  * The interfaces for R objects of the type {@value RObject#TYPE_DATAFRAME} -
- * {@link RDataFrame}, {@link RObject#TYPE_S4OBJECT} - {@link RS4Object} and 
+ * {@link RDataFrame}, {@link RObject#TYPE_S4OBJECT} - {@link RS4Object} and
  * {@link RObject#TYPE_ENVIRONMENT} - {@link REnvironment} extends this interface for the
  * purpose of a uniform API.
  * Objects of this type does not necessary provide the full functionality and the
@@ -33,8 +36,10 @@
  * <p>
  * Indexes are zero-based (as usual in Java) and not one-base like in R.</p>
  */
+@NonNullByDefault
 public interface RList extends RObject {
 	
+	
 	/**
 	 * Returns the length of the object. The length of a {@link RObject#TYPE_LIST list}
 	 * is the count of list items.
@@ -49,7 +54,7 @@
 	 * 
 	 * @return the item names
 	 */
-	RCharacterStore getNames();
+	@Nullable RCharacterStore getNames();
 	
 	/**
 	 * Returns the name of the item at the specified index.
@@ -57,10 +62,10 @@
 	 * This is equivalent to <code>getNames().getChar(idx)</code>.</p>
 	 * 
 	 * @param idx the index (zero-based) of the item
-	 * @return the slot names
+	 * @return the name of the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	String getName(int idx);
+	@Nullable String getName(int idx);
 	
 	/**
 	 * Returns the name of the item at the specified index.
@@ -68,10 +73,10 @@
 	 * This is equivalent to <code>getNames().getChar(idx)</code>.</p>
 	 * 
 	 * @param idx the index (zero-based) of the item
-	 * @return the slot names
+	 * @return the name of the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	String getName(long idx);
+	@Nullable String getName(long idx);
 	
 	/**
 	 * Returns the item at the specified index.
@@ -80,7 +85,7 @@
 	 * @return the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	RObject get(int idx);
+	@Nullable RObject get(int idx);
 	
 	/**
 	 * Returns the item at the specified index.
@@ -89,7 +94,7 @@
 	 * @return the item
 	 * @throws IndexOutOfBoundsException if <code>idx</code> &lt; 0 or <code>idx</code> &ge; length
 	 */
-	RObject get(long idx);
+	@Nullable RObject get(long idx);
 	
 	/**
 	 * Returns the item with the specified name. If multiple items have that name,
@@ -98,7 +103,7 @@
 	 * @param name the name of the item
 	 * @return the item or <code>null</code> (if no item with the specified name exists)
 	 */
-	RObject get(String name);
+	@Nullable RObject get(String name);
 	
 //	/**
 //	 * Returns an array with the R object items of the list.
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java
index ca01bfd..556d950 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObject.java
@@ -14,15 +14,19 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.impl.RNullImpl;
 
 
 /**
  * Basic interface of all R object.
  * <p>
- * To detect the type of an RObject instance, the method {@link #getRObjectType()} 
+ * To detect the type of an RObject instance, the method {@link #getRObjectType()}
  * should be used, not the java class type (e.g. instanceof) of the object.</p>
  */
+@NonNullByDefault
 public interface RObject {
 	
 	/**
@@ -53,7 +57,7 @@
 	/**
 	 * Constant indicating an RDataFrame object. An R object is of this type
 	 * if it is an R list object inheriting the R class {@link #CLASSNAME_DATAFRAME data.frame}
-	 * and compiling with the R rules for a data frame, especially its children 
+	 * and compiling with the R rules for a data frame, especially its children
 	 * are {@link RVector}s of the same length.
 	 * <p>
 	 * The object is an instance of {@link RDataFrame}.</p>
@@ -61,7 +65,7 @@
 	byte TYPE_DATAFRAME=                0x06;
 	
 	/**
-	 * Constant indicating an RList object. An R object is of this type if it is 
+	 * Constant indicating an RList object. An R object is of this type if it is
 	 * a list but not a data frame (see {@link #TYPE_DATAFRAME}).
 	 * <p>
 	 * The object is an instance of {@link RList}.</p>
@@ -78,7 +82,7 @@
 	/**
 	 * Constant indicating an S4 object. An R object is of this type if the R
 	 * command <code>isS4</code> returns true. This is criterion has priority
-	 * above the criteria for the other data types. If an S4 object represents 
+	 * above the criteria for the other data types. If an S4 object represents
 	 * also a simple data type, this data is accessible by its data slot.
 	 * <p>
 	 * The object is an instance of {@link RS4Object}.</p>
@@ -191,7 +195,7 @@
 	 * 
 	 * @return the data store or <code>null</code>, if not supported by the object
 	 */
-	RStore<?> getData();
+	@Nullable RStore<?> getData();
 	
 	/**
 	 * Returns the attribute list of the object
@@ -200,6 +204,6 @@
 	 * 
 	 * @return the attribute list or <code>null</code>, if not available
 	 */
-	RList getAttributes();
+	@Nullable RList getAttributes();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java
index 915ca6c..ac820d9 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RObjectFactory.java
@@ -16,8 +16,11 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 
+@NonNullByDefault
 public interface RObjectFactory {
 	
 	/** Flag to fetch only the structure but not the data (store) of the objects */
@@ -27,10 +30,10 @@
 	int F_WITH_ATTR= 0x2;
 	
 	/** Flag to load environments directly instead of the reference only */
-	int F_LOAD_ENVIR= 0x10;
+	int F_LOAD_ENVIRONMENT=                                 1 << 4;
 	
 	/** Flag to eval all promises directly */
-	int F_LOAD_PROMISE= 0x20;
+	int F_LOAD_PROMISE=                                     1 << 5;
 	
 	
 	int O_LENGTHGRADE_MASK= 7; // 3 bits
@@ -50,7 +53,7 @@
 	<TData extends RStore<?>> RVector<TData> createVector(TData data);
 	<TData extends RStore<?>> RArray<TData> createArray(TData data, int[] dim);
 	<TData extends RStore<?>> RArray<TData> createMatrix(TData data, int dim1, int dim2);
-	RList createList(RObject[] components, String[] names);
+	RList createList(RObject[] components, String @Nullable [] names);
 //	RDataFrame createDataFrame(RData[] columns, String[] columnNames, String[] rowNames);
 	
 	RLanguage createName(String name);
@@ -73,7 +76,7 @@
 	void writeAttributeList(RList list, RJIO io) throws IOException;
 	RList readAttributeList(RJIO io) throws IOException;
 	
-	void writeNames(RStore<?> names, RJIO io) throws IOException;
-	RStore<?> readNames(RJIO io, long length) throws IOException;
+	void writeNames(@Nullable RStore<?> names, RJIO io) throws IOException;
+	@Nullable RStore<?> readNames(RJIO io, long length) throws IOException;
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java
index f14c1a9..e22b195 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RReference.java
@@ -14,10 +14,14 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * A reference to an R object
  */
+@NonNullByDefault
 public interface RReference extends RObject {
 	
 	
@@ -28,6 +32,6 @@
 	
 	byte getReferencedRObjectType();
 	
-	RObject getResolvedRObject();
+	@Nullable RObject getResolvedRObject();
 	
 }
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java
index fa3b617..33a5e83 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RS4Object.java
@@ -14,9 +14,12 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
- * An R object is of the type {@link RObject#TYPE_S4OBJECT S4 object}, if the R 
+ * An R object is of the type {@link RObject#TYPE_S4OBJECT S4 object}, if the R
  * command <code>isS4(object)</code> returns true.  Such an R S4 object is
  * represented by an instance of this interface.
  * <p>
@@ -33,6 +36,7 @@
  * methods {@link #getLength()}, {@link #getName(int)}, {@link #get(int)} and
  * {@link #get(String)}.</p>
  */
+@NonNullByDefault
 public interface RS4Object extends RList {
 	
 	
@@ -73,7 +77,7 @@
 	 * 
 	 * @return the object in the data slot
 	 */
-	RObject getDataSlot();
+	@Nullable RObject getDataSlot();
 	
 	/**
 	 * Returns the data store of the data slot, if it exists.
@@ -81,7 +85,7 @@
 	 * @return the data of the data slot
 	 */
 	@Override
-	RStore<?> getData();
+	@Nullable RStore<?> getData();
 	
 	/**
 	 * Returns the names of the slots.
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java
index d87bb2b..b6927a4 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RStore.java
@@ -49,6 +49,7 @@
  */
 public interface RStore<P> {
 	
+	
 	/**
 	 * Constant indicating a store for R data type <code>logical<code>.
 	 * 
@@ -101,7 +102,7 @@
 	/**
 	 * Constant indicating a store for R data type <code>character<code>.
 	 * 
-	 * <p>The story object is an instance of {@link RCharacterStore}.  
+	 * <p>The story object is an instance of {@link RCharacterStore}.
 	 * The {@link #getBaseVectorRClassName() class name} is
 	 * <code>{@link RObject#CLASSNAME_CHARACTER character}</code>.</p>
 	 * 
@@ -115,7 +116,7 @@
 	 * 
 	 * <p>Note that raw data doesn't support NAs.</p>
 	 * 
-	 * <p>The story object is an instance of {@link RRawStore}.  
+	 * <p>The story object is an instance of {@link RRawStore}.
 	 * The {@link #getBaseVectorRClassName() class name} is
 	 * <code>{@link RObject#CLASSNAME_RAW raw}</code>.</p>
 	 * 
@@ -129,8 +130,8 @@
 	 * data type for R objects extending the R class <code>factor<code>.
 	 * 
 	 * <p>The story object is an instance of {@link RFactorStore}.
-	 * The {@link #getBaseVectorRClassName() class name} is 
-	 * <code>{@link RObject#CLASSNAME_FACTOR factor}</code> or 
+	 * The {@link #getBaseVectorRClassName() class name} is
+	 * <code>{@link RObject#CLASSNAME_FACTOR factor}</code> or
 	 * <code>{@link RObject#CLASSNAME_ORDERED ordered}</code>.
 	 * 
 	 * @see RFactorStore#getInt(int)
@@ -348,8 +349,8 @@
 	 * Return the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -363,8 +364,8 @@
 	 * Return the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -378,8 +379,8 @@
 	 * Sets the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -394,8 +395,8 @@
 	 * Sets the numeric/real/double value at the specified index.
 	 * <p>
 	 * Numeric values in R matches exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -409,10 +410,10 @@
 	/**
 	 * Returns the real part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -425,10 +426,10 @@
 	/**
 	 * Returns the real part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -441,10 +442,10 @@
 	/**
 	 * Returns the imaginary part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -457,10 +458,10 @@
 	/**
 	 * Returns the imaginary part the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {Double#isNaN(double)},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -473,10 +474,10 @@
 	/**
 	 * Sets the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -491,10 +492,10 @@
 	/**
 	 * Sets the complex number value at the specified index.
 	 * <p>
-	 * The numeric values of the parts of the complex number in R matches 
+	 * The numeric values of the parts of the complex number in R matches
 	 * exactly the Java double values.
-	 * Also NaN, Inf and -Inf respectively {@link Double#NaN}, 
-	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are 
+	 * Also NaN, Inf and -Inf respectively {@link Double#NaN},
+	 * {@link Double#POSITIVE_INFINITY} and {@link Double#NEGATIVE_INFINITY} are
 	 * supported.</p>
 	 * 
 	 * @param idx the index (zero-based) of the value
@@ -617,7 +618,7 @@
 	void setRaw(long idx, byte raw);
 	
 	/**
-	 * Returns the value at the specified index as Java object. The subtypes of 
+	 * Returns the value at the specified index as Java object. The subtypes of
 	 * RStore defines more specific array types.
 	 * <p>
 	 * R NA values are represented as <code>null</code>. Java primitives are converted
@@ -631,7 +632,7 @@
 	P get(int idx);
 	
 	/**
-	 * Returns the value at the specified index as Java object. The subtypes of 
+	 * Returns the value at the specified index as Java object. The subtypes of
 	 * RStore defines more specific array types.
 	 * <p>
 	 * R NA values are represented as <code>null</code>. Java primitives are converted
@@ -645,7 +646,7 @@
 	P get(long idx);
 	
 	/**
-	 * Returns the values of the store as Java object array. The subtypes of 
+	 * Returns the values of the store as Java object array. The subtypes of
 	 * RStore defines more specific array types.
 	 * <p>
 	 * The array is newly created for each call of this method. It has the
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java
index 6003879..8498dac 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/RVector.java
@@ -14,6 +14,9 @@
 
 package org.eclipse.statet.rj.data;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 
 /**
  * An R object is of the type {@link RObject#TYPE_VECTOR vector}, if it is an R
@@ -22,11 +25,11 @@
  * <p>
  * The real data is stored in a {@link RStore} accessible by {@link #getData()}.</p>
  * <p>
- * The type {@link RObject#TYPE_VECTOR vector} equates not the R command 
- * <code>is.vector(object)</code>, mainly because all attributes except the dimension 
+ * The type {@link RObject#TYPE_VECTOR vector} equates not the R command
+ * <code>is.vector(object)</code>, mainly because all attributes except the dimension
  * are allowed (in the R function only the names attribute is allowed).  Especially
  * an R factor object is of the type {@link RObject#TYPE_VECTOR vector}, implements
- * RVector and has a data store of the type {@link RStore#FACTOR}.  Also another S3 
+ * RVector and has a data store of the type {@link RStore#FACTOR}.  Also another S3
  * object based on a such a data object is of the type {@link RObject#TYPE_VECTOR vector}.
  * Whereas a S4 object is never directly of this type even the object simulates such
  * a data object in R. Such an object is of the type {@link RObject#TYPE_S4OBJECT S4 object},
@@ -35,13 +38,15 @@
  * <p>
  * The complementary type for objects with dimension attribute is the type
  * {@link RObject#TYPE_ARRAY array} and the interface {@link RArray}.
- * The data structure for multiple R objects is represented by the type 
+ * The data structure for multiple R objects is represented by the type
  * {@link RObject#TYPE_LIST list} respectively the interface {@link RList}.</p>
  * 
  * @param <TData> the type of the data store
  */
+@NonNullByDefault
 public interface RVector<TData extends RStore<?>> extends RObject {
 	
+	
 	/**
 	 * Returns the length of the object. The length of an {@link RObject#TYPE_VECTOR vector}
 	 * is the count of all data values.
@@ -55,14 +60,14 @@
 	 * Returns the names for the indexes of the vector. This corresponds to the values of the
 	 * R attribute (<code>names</code>) respectively the R function <code>names(object)</code>.
 	 * 
-	 * The returned character data has the same length the vector. If the R element does not have 
+	 * The returned character data has the same length the vector. If the R element does not have
 	 * names, the names are invalid, or names are disabled, the method returns <code>null</code>.
 	 * 
 	 * @return a data store with the names of the indexes or <code>null</code>
 	 * 
 	 * @since de.walware.rj.data 0.5
 	 */
-	RStore<?> getNames();
+	@Nullable RStore<?> getNames();
 	
 	
 	@Override
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java
index 2c71581..865b806 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/DefaultRObjectFactory.java
@@ -17,6 +17,8 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RArray;
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RComplexStore;
@@ -394,12 +396,12 @@
 	}
 	
 	
-	public RList createList(final RObject[] components, final String[] names, final String classname) {
+	public RList createList(final RObject[] components, final String @Nullable [] names, final String classname) {
 		return new RList32Impl(components, classname, names);
 	}
 	
 	@Override
-	public RList createList(final RObject[] components, final String[] names) {
+	public RList createList(final RObject[] components, final String @Nullable [] names) {
 		return createList(components, names, RObject.CLASSNAME_LIST);
 	}
 	
@@ -702,7 +704,7 @@
 	}
 	
 	@Override
-	public RStore<?> readNames(final RJIO io, final long length) throws IOException {
+	public @Nullable RStore<?> readNames(final RJIO io, final long length) throws IOException {
 		final byte type= io.readByte();
 		if (type == RStore.CHARACTER) {
 			return (length <= Integer.MAX_VALUE) ?
@@ -716,7 +718,7 @@
 	}
 	
 	@Override
-	public void writeNames(final RStore<?> names, final RJIO io) throws IOException {
+	public void writeNames(final @Nullable RStore<?> names, final RJIO io) throws IOException {
 		if (names != null) {
 			final byte type= names.getStoreType();
 			if (type == RStore.CHARACTER) {
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java
index 5922b85..645538d 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/ExternalizableRObject.java
@@ -16,10 +16,13 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RObjectFactory;
 
 
+@NonNullByDefault
 public interface ExternalizableRObject {
 	
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java
index c228b5e..2766d18 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RArrayImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RArray;
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RDataUtils;
@@ -27,6 +30,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RArrayImpl<TData extends RStore<?>> extends AbstractRObject
 		implements RArray<TData>, ExternalizableRObject {
 	
@@ -36,7 +40,7 @@
 	
 	private String className1;
 	private RInteger32Store dimAttribute;
-	private SimpleRList<RStore<?>> dimnamesAttribute;
+	private @Nullable SimpleRList<RStore<?>> dimnamesAttribute;
 	
 	
 	public RArrayImpl(final TData data, final String className1, final int[] dim) {
@@ -47,9 +51,9 @@
 		if (data.getLength() >= 0 && data.getLength() != this.length) {
 			throw new IllegalArgumentException("dim");
 		}
+		this.data= data;
 		this.className1= className1;
 		this.dimAttribute= new RInteger32Store(dim);
-		this.data= data;
 	}
 	
 	public RArrayImpl(final RJIO io, final RObjectFactory factory) throws IOException {
@@ -146,7 +150,7 @@
 	}
 	
 	@Override
-	public RCharacterStore getDimNames() {
+	public @Nullable RCharacterStore getDimNames() {
 		if (this.dimnamesAttribute != null) {
 			return this.dimnamesAttribute.getNames();
 		}
@@ -154,7 +158,7 @@
 	}
 	
 	@Override
-	public RStore<?> getNames(final int dim) {
+	public @Nullable RStore<?> getNames(final int dim) {
 		if (this.dimnamesAttribute != null) {
 			return this.dimnamesAttribute.get(dim);
 		}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java
index 2fb81a7..2c8e944 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RDataFrame32Impl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RDataFrame;
 import org.eclipse.statet.rj.data.RJIO;
@@ -24,6 +27,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RDataFrame32Impl extends RList32Impl
 		implements RDataFrame, ExternalizableRObject {
 	
@@ -110,18 +114,16 @@
 	
 	@Override
 	public RStore<?> getColumn(final int idx) {
-		final RObject obj= get(idx);
-		return (obj != null) ? obj.getData() : null;
+		return get(idx).getData();
 	}
 	
 	@Override
 	public RStore<?> getColumn(final long idx) {
-		final RObject obj= get(idx);
-		return (obj != null) ? obj.getData() : null;
+		return get(idx).getData();
 	}
 	
 	@Override
-	public RStore<?> getColumn(final String name) {
+	public @Nullable RStore<?> getColumn(final String name) {
 		final RObject obj= get(name);
 		return (obj != null) ? obj.getData() : null;
 	}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java
index 3b1f222..f67a186 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RFunctionImpl.java
@@ -16,24 +16,29 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RFunction;
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RObjectFactory;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RFunctionImpl extends AbstractRObject
 		implements RFunction, ExternalizableRObject {
 	
 	
-	private String headerSource;
-	private String bodySource;
+	private @Nullable String headerSource;
+	private @Nullable String bodySource;
 	
 	
-	public RFunctionImpl(final String header) {
+	public RFunctionImpl(final @Nullable String header) {
 		this.headerSource= header;
 	}
 	
+	@SuppressWarnings("null")
 	public RFunctionImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -67,17 +72,17 @@
 	}
 	
 	@Override
-	public String getHeaderSource() {
+	public @Nullable String getHeaderSource() {
 		return this.headerSource;
 	}
 	
 	@Override
-	public String getBodySource() {
+	public @Nullable String getBodySource() {
 		return this.bodySource;
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java
index f36f7ee..45c68d6 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RLanguageImpl.java
@@ -16,12 +16,16 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RLanguage;
 import org.eclipse.statet.rj.data.RObjectFactory;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RLanguageImpl extends AbstractRObject
 		implements RLanguage, ExternalizableRObject {
 	
@@ -42,20 +46,21 @@
 	
 	private String className1;
 	
-	private String source;
+	private @Nullable String source;
 	
 	
-	public RLanguageImpl(final byte type, final String source, final String className1) {
+	public RLanguageImpl(final byte type, final String source, final @Nullable String className1) {
 		this.type= type;
 		this.className1= (className1 != null) ? className1 : getBaseClassname(type);
 		this.source= source;
 	}
 	
-	public RLanguageImpl(final byte type, final String className1) {
+	public RLanguageImpl(final byte type, final @Nullable String className1) {
 		this.type= type;
 		this.className1= (className1 != null) ? className1 : getBaseClassname(type);
 	}
 	
+	@SuppressWarnings("null")
 	public RLanguageImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -115,12 +120,12 @@
 	}
 	
 	@Override
-	public String getSource() {
+	public @Nullable String getSource() {
 		return this.source;
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java
index c5db8be..a257af9 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RNullImpl.java
@@ -14,11 +14,15 @@
 
 package org.eclipse.statet.rj.data.impl;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RList;
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RNullImpl implements RObject {
 	
 	
@@ -51,12 +55,12 @@
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
 	@Override
-	public RList getAttributes() {
+	public @Nullable RList getAttributes() {
 		return null;
 	}
 	
@@ -66,7 +70,7 @@
 	}
 	
 	@Override
-	public boolean equals(final Object obj) {
+	public boolean equals(final @Nullable Object obj) {
 		return (this == obj || (
 				(obj instanceof RObject) && ((RObject) obj).getRObjectType() == RObject.TYPE_NULL) );
 	}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java
index 9be5da8..7adf876 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RReferenceImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RDataUtils;
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RList;
@@ -25,6 +28,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RReferenceImpl implements RReference, ExternalizableRObject {
 	
 	
@@ -39,6 +43,7 @@
 		this.baseClassName= baseClass;
 	}
 	
+	@SuppressWarnings("null")
 	public RReferenceImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -83,17 +88,17 @@
 	}
 	
 	@Override
-	public RObject getResolvedRObject() {
+	public @Nullable RObject getResolvedRObject() {
 		return null;
 	}
 	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return null;
 	}
 	
 	@Override
-	public RList getAttributes() {
+	public @Nullable RList getAttributes() {
 		return null;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java
index d76a386..4fc12bc 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RS4ObjectImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RCharacterStore;
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RObject;
@@ -24,6 +27,7 @@
 import org.eclipse.statet.rj.data.RStore;
 
 
+@NonNullByDefault
 public class RS4ObjectImpl extends AbstractRObject
 		implements RS4Object, ExternalizableRObject {
 	
@@ -46,6 +50,7 @@
 		this.slotValues= slotValues;
 	}
 	
+	@SuppressWarnings("null")
 	public RS4ObjectImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -106,17 +111,12 @@
 	}
 	
 	@Override
-	public RObject getDataSlot() {
+	public @Nullable RObject getDataSlot() {
 		return (this.dataSlotIdx >= 0) ? this.slotValues[this.dataSlotIdx] : null;
 	}
 	
-	public byte getDataType() {
-		return (this.dataSlotIdx >= 0 && this.slotValues[this.dataSlotIdx] != null) ?
-				this.slotValues[this.dataSlotIdx].getData().getStoreType() : 0;
-	}
-	
 	@Override
-	public RStore<?> getData() {
+	public @Nullable RStore<?> getData() {
 		return (this.dataSlotIdx >= 0 && this.slotValues[this.dataSlotIdx] != null) ?
 				this.slotValues[this.dataSlotIdx].getData() : null;
 	}
diff --git a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java
index 9060301..56c24d6 100644
--- a/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java
+++ b/core/org.eclipse.statet.rj.data/src/org/eclipse/statet/rj/data/impl/RVectorImpl.java
@@ -16,6 +16,9 @@
 
 import java.io.IOException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RJIO;
 import org.eclipse.statet.rj.data.RList;
 import org.eclipse.statet.rj.data.RObjectFactory;
@@ -23,6 +26,7 @@
 import org.eclipse.statet.rj.data.RVector;
 
 
+@NonNullByDefault
 public class RVectorImpl<TData extends RStore<?>> extends AbstractRObject
 		implements RVector<TData>, ExternalizableRObject {
 	
@@ -31,7 +35,7 @@
 	private long length;
 	
 	private String className1;
-	private RStore<?> namesAttribute;
+	private @Nullable RStore<?> namesAttribute;
 	
 	
 	public RVectorImpl(final TData data, final String className1) {
@@ -75,6 +79,7 @@
 		this.namesAttribute= initialNames;
 	}
 	
+	@SuppressWarnings("null")
 	public RVectorImpl(final RJIO io, final RObjectFactory factory) throws IOException {
 		readExternal(io, factory);
 	}
@@ -149,7 +154,7 @@
 	}
 	
 	@Override
-	public RStore<?> getNames() {
+	public @Nullable RStore<?> getNames() {
 		return this.namesAttribute;
 	}
 	
diff --git a/core/org.eclipse.statet.rj.server.remotetools/.classpath b/core/org.eclipse.statet.rj.server.remotetools/.classpath
index eca7bdb..7728a88 100644
--- a/core/org.eclipse.statet.rj.server.remotetools/.classpath
+++ b/core/org.eclipse.statet.rj.server.remotetools/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/core/org.eclipse.statet.rj.services.core/.classpath b/core/org.eclipse.statet.rj.services.core/.classpath
index 020ba8c..f6c1afc 100644
--- a/core/org.eclipse.statet.rj.services.core/.classpath
+++ b/core/org.eclipse.statet.rj.services.core/.classpath
@@ -3,9 +3,14 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="owner.project.facets" value="java"/>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="srcREnv"/>
 	<classpathentry kind="src" path="srcGraphic"/>
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java
index 2cc2272..c7c4c1c 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FQRObjectRef.java
@@ -14,14 +14,17 @@
 
 package org.eclipse.statet.rj.services;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.data.RObject;
 
 
 /**
  * Fully qualified reference to an R object.
  * 
- * @since 2.1 (provisional)
+ * @since 2.1
  */
+@NonNullByDefault
 public interface FQRObjectRef {
 	
 	
@@ -40,7 +43,7 @@
 	RObject getEnv();
 	
 	/**
-	 * Name, relative to the environment, specified by a symbol or call.
+	 * The name, relative to the environment, specified by a symbol or call.
 	 * 
 	 * @return the name
 	 */
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java
index e80962e..30b70df 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/FunctionCall.java
@@ -17,6 +17,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RStore;
 
@@ -25,7 +28,7 @@
  * A function call provides a comfortable way to build and execute
  * R function call.
  * 
- * <p>A function call builder for a given function can be created by 
+ * <p>A function call builder for a given function can be created by
  * {@link RService#createFunctionCall(String)}.</p>
  * 
  * <p>The builder mainly provides methods to add arguments and to
@@ -33,10 +36,10 @@
  * 
  * <p>Arguments are added by the <code>#add...()</code> methods. The
  * order they are added is exactly the order they are send to R. There
- * are add methods for a symbol referring to data existing in R, 
+ * are add methods for a symbol referring to data existing in R,
  * for given R data objects and for single data values which are
  * transformed automatically from java primitives into R data objects.
- * All methods are available in a variant with and without a parameter 
+ * All methods are available in a variant with and without a parameter
  * for the R argument name. An unnamed argument can be specified by
  * using the variant without the argument name parameter or by specifying
  * the name as <code>null</code>.</p>
@@ -44,6 +47,7 @@
  * <p>The common guidelines in {@link RService} (like concurrency) are effective
  * for all evaluation methods in this interface.</p>
  */
+@NonNullByDefault
 public interface FunctionCall {
 	
 	
@@ -59,7 +63,7 @@
 	 * 
 	 * @see #addChar(String, String) to add a string/character value directly
 	 */
-	FunctionCall add(String arg, String expression);
+	FunctionCall add(@Nullable String arg, String expression);
 	
 	/**
 	 * Adds a unnamed argument with the given R expression as value.
@@ -81,7 +85,7 @@
 	 * @param data an R data object
 	 * @return a reference to this object
 	 */
-	FunctionCall add(String arg, RObject data);
+	FunctionCall add(@Nullable String arg, RObject data);
 	
 	/**
 	 * Adds an unnamed argument with the given R data object as value.
@@ -96,19 +100,19 @@
 	/**
 	 * Adds an argument with the given boolean/logical as value.
 	 * 
-	 * <p>The Java boolean value is transformed into an R data object 
+	 * <p>The Java boolean value is transformed into an R data object
 	 * of type {@link RStore#LOGICAL logical}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param logical the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addLogi(String arg, boolean logical);
+	FunctionCall addLogi(@Nullable String arg, boolean logical);
 	
 	/**
 	 * Adds an unnamed argument with the given boolean/logical as value.
 	 * 
-	 * <p>The Java boolean value is transformed into an R data object 
+	 * <p>The Java boolean value is transformed into an R data object
 	 * of type {@link RStore#LOGICAL logical}.</p>
 	 * 
 	 * @param logical the value of the argument
@@ -119,19 +123,19 @@
 	/**
 	 * Adds an argument with the given integer as value.
 	 * 
-	 * <p>The Java integer value is transformed into an R data object 
+	 * <p>The Java integer value is transformed into an R data object
 	 * of type {@link RStore#INTEGER integer}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param integer the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addInt(String arg, int integer);
+	FunctionCall addInt(@Nullable String arg, int integer);
 	
 	/**
 	 * Adds an unnamed argument with the given integer as value.
 	 * 
-	 * <p>The Java integer value is transformed into an R data object 
+	 * <p>The Java integer value is transformed into an R data object
 	 * of type {@link RStore#INTEGER integer}.</p>
 	 * 
 	 * @param integer the value of the argument
@@ -142,19 +146,19 @@
 	/**
 	 * Adds an argument with the given double/numeric as value.
 	 * 
-	 * <p>The Java double value is transformed into an R data object 
+	 * <p>The Java double value is transformed into an R data object
 	 * of type {@link RStore#NUMERIC numeric}, also called real.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param numeric the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addNum(String arg, double numeric);
+	FunctionCall addNum(@Nullable String arg, double numeric);
 	
 	/**
 	 * Adds an unnamed argument with the given double/numeric as value.
 	 * 
-	 * <p>The Java double value is transformed into an R data object 
+	 * <p>The Java double value is transformed into an R data object
 	 * of type {@link RStore#NUMERIC numeric}, also called real.</p>
 	 * 
 	 * @param arg the name of the argument
@@ -166,19 +170,19 @@
 	/**
 	 * Adds an argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param character the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addCplx(String arg, double real, double imaginary);
+	FunctionCall addCplx(@Nullable String arg, double real, double imaginary);
 	
 	/**
 	 * Adds an unnamed argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param character the value of the argument
@@ -189,19 +193,19 @@
 	/**
 	 * Adds an argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @param character the value of the argument
 	 * @return a reference to this object
 	 */
-	FunctionCall addChar(String arg, String character);
+	FunctionCall addChar(@Nullable String arg, String character);
 	
 	/**
 	 * Adds an unnamed argument with the given string/character as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data object 
+	 * <p>The Java String value is transformed into an R data object
 	 * of type {@link RStore#CHARACTER character}.</p>
 	 * 
 	 * @param character the value of the argument
@@ -212,18 +216,18 @@
 	/**
 	 * Adds an argument with the given NULL as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data 
+	 * <p>The Java String value is transformed into an R data
 	 * {@link RObject#NULL NULL} object.</p>
 	 * 
 	 * @param arg the name of the argument or <code>null</code> for unnamed
 	 * @return a reference to this object
 	 */
-	FunctionCall addNull(String arg);
+	FunctionCall addNull(@Nullable String arg);
 	
 	/**
 	 * Adds an unnamed argument with the given NULL as value.
 	 * 
-	 * <p>The Java String value is transformed into an R data 
+	 * <p>The Java String value is transformed into an R data
 	 * {@link RObject#NULL NULL} object.</p>
 	 * 
 	 * @return a reference to this object
@@ -257,7 +261,8 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 */
-	void evalVoid(RObject envir, IProgressMonitor monitor) throws CoreException;
+	void evalVoid(@Nullable RObject envir,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the this function call in R and returns its value as R data object.
@@ -292,7 +297,7 @@
 	 * @throws CoreException if the operation was canceled or failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	RObject evalData(String factoryId, int options, int depth,
+	RObject evalData(@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
@@ -314,15 +319,16 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 */
-	RObject evalData(RObject envir, String factoryId, int options, int depth,
+	RObject evalData(@Nullable RObject envir,
+			@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the this function call in R and assign its return value to
 	 * the specified expression.
 	 * 
-	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment 
-	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object 
+	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment
+	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object
 	 * tree like <code>xlist$item1</code> or <code>xobj@slotName</code> is valid as well as
 	 * special function calls which supports assignments like <code>dim(x)</code>.</p>
 	 * 
@@ -335,6 +341,7 @@
 	 * 
 	 * @since de.walware.rj.services 2.0
 	 */
-	void evalAssign(String target, IProgressMonitor monitor) throws CoreException;
+	void evalAssign(String target,
+			IProgressMonitor monitor) throws CoreException;
 	
 }
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java
index 5f59b35..d0f0753 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RJServices.java
@@ -14,7 +14,10 @@
 
 package org.eclipse.statet.rj.services;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
 public class RJServices {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java
index 7320efd..3c2677f 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RService.java
@@ -20,6 +20,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.rj.data.RObject;
 import org.eclipse.statet.rj.data.RReference;
 import org.eclipse.statet.rj.graphic.core.RGraphic;
@@ -29,22 +32,22 @@
  * A interface with methods to evaluate and exchange data with R.
  * <p>
  * It depends on the application how to get access to the RService.
- * In StatET it is passed as adapter argument in 
+ * In StatET it is passed as adapter argument in
  * {@link org.eclipse.statet.ecommons.ts.core.IToolRunnable#run(org.eclipse.statet.ecommons.ts.core.IToolService, IProgressMonitor) IToolRunnable#run(...)},
  * if the R console supports the featureset {@link org.eclipse.statet.r.core.tool.RTool#R_DATA_FEATURESET_ID RTool#R_DATA_FEATURESET_ID}.
- * In applications using R in the background by the RServi library, 
+ * In applications using R in the background by the RServi library,
  * the {@link org.eclipse.statet.rj.servi.RServi RServi} object provides the RService methods.</p>
  * <p>
  * If the application has also an console, the operations of an RService
  * usually doesn't appears in the console. Even not recommended, it is possible
  * to call special R functions like print which output is written to the console.
- * It should absolutely avoided to use functions like <code>readline</code> which requires 
+ * It should absolutely avoided to use functions like <code>readline</code> which requires
  * interaction with the console.</p>
  * <p>
  * The methods of an RService should not be called concurrently by different
  * threads. The RService consumer have to make sure that the function calls
  * are synchronized, if multiple thread have access to the same instance.
- * Implementations of RService interface can perform checks too, but the consumer 
+ * Implementations of RService interface can perform checks too, but the consumer
  * must not rely on that.</p>
  * <p>
  * Especially for longer evaluations, it is recommended that the application implements
@@ -59,6 +62,7 @@
  * 
  * @since de.walware.rj.services 0.4
  */
+@NonNullByDefault
 public interface RService {
 	
 	
@@ -89,7 +93,7 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 **/
-	int LOAD_ENVIR=                                         1 << 4;
+	int LOAD_ENVIRONMENT=                                   1 << 4;
 	
 	/**
 	 * Option flag indicating to eval all promises directly.
@@ -112,7 +116,8 @@
 	 * @throws CoreException if the operation was canceled or failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	void evalVoid(String expression, IProgressMonitor monitor) throws CoreException;
+	void evalVoid(String expression,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the given expression in R without returning a value.
@@ -129,7 +134,8 @@
 	 * 
 	 * @since de.walware.rj.services 2.1
 	 */
-	void evalVoid(String expression, RObject envir, IProgressMonitor monitor) throws CoreException;
+	void evalVoid(String expression, @Nullable RObject envir,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the given expression in R and returns its value as R data object.
@@ -147,7 +153,8 @@
 	 * @throws CoreException if the operation was canceled or failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	RObject evalData(String expression, IProgressMonitor monitor) throws CoreException;
+	RObject evalData(String expression,
+			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the evaluation of the given expression in R and returns its value. The method returns
@@ -169,7 +176,8 @@
 	 * @see #DEPTH_INFINITE
 	 * @see #DEPTH_ONE
 	 */
-	RObject evalData(String expression, String factoryId, int options, int depth,
+	RObject evalData(String expression,
+			@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
@@ -195,19 +203,24 @@
 	 * @see #DEPTH_INFINITE
 	 * @see #DEPTH_ONE
 	 */
-	RObject evalData(String expression, RObject envir, String factoryId, int options, int depth,
+	RObject evalData(String expression, @Nullable RObject envir,
+			@Nullable String factoryId, int options, int depth,
 			IProgressMonitor monitor) throws CoreException;
 	
-	RObject evalData(RReference reference, IProgressMonitor monitor) throws CoreException;
-	RObject evalData(RReference reference, String factoryId, int options, int depth,
+	RObject evalData(RReference reference,
+			IProgressMonitor monitor) throws CoreException;
+	RObject evalData(RReference reference,
+			@Nullable String factoryId, int options, int depth,
+			IProgressMonitor monitor) throws CoreException;
+	
 			IProgressMonitor monitor) throws CoreException;
 	
 	/**
 	 * Performs the assignment of the given R data object to an expression in R. The method returns
 	 * after the assignment is finished.
 	 * 
-	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment 
-	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object 
+	 * <p>The target have to be a valid target expression for a R <code>&lt;-</code> assignment
+	 * operation.  A single symbol like <code>x</code> or <code>`x-y`</code>, a path in an object
 	 * tree like <code>xlist$item1</code> or <code>xobj@slotName</code> is valid as well as
 	 * special function calls which supports assignments like <code>dim(x)</code>.</p>
 	 * 
@@ -220,7 +233,8 @@
 	 * @throws CoreException if the operation was canceled or was failed; the status
 	 *     of the exception contains detail about the cause
 	 */
-	void assignData(String target, RObject data, IProgressMonitor monitor) throws CoreException;
+	void assignData(String target, RObject data,
+			IProgressMonitor monitor) throws CoreException;
 	
 //	void assignDataToAttribute(String expression, String attributeName, RObject data, IProgressMonitor monitor) throws CoreException;
 	
diff --git a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java
index b3cab26..15b13d3 100644
--- a/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java
+++ b/core/org.eclipse.statet.rj.services.core/src/org/eclipse/statet/rj/services/RServiceControlExtension.java
@@ -19,11 +19,14 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * 
  * @provisional
  */
+@NonNullByDefault
 public interface RServiceControlExtension {
 	
 	/**
@@ -56,7 +59,7 @@
 	 * If short background operations are waiting for execution, they are executed (depends on
 	 * implementation).</p>
 	 * <p>
-	 * The current thread must hold the lock {@link #getWaitLock()}. The method returns after a 
+	 * The current thread must hold the lock {@link #getWaitLock()}. The method returns after a
 	 * short waiting time, operations are executed <b>or</b> {@link #resume()} is called.</p>
 	 * 
 	 * @param monitor the current monitor
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java
index 7303082..c91023d 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RCircle.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Circle with center <code>(x, y)</code> and radius <code>r</code>.
  */
+@NonNullByDefault
 public class RCircle extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java
index f104df3..0785b2e 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RClipSetting.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Rectangular clipping area with the vertexes <code>(x0, y0)</code>, <code>(x0, y1)</code>,
  * <code>(x1, y1)</code>, <code>(x1, y1)</code>.
  */
+@NonNullByDefault
 public class RClipSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java
index a118533..e83ea0d 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RColorSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures paint color.
  */
+@NonNullByDefault
 public class RColorSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java
index ef62600..6d7ed7a 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFillSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures filling paint color.
  */
+@NonNullByDefault
 public class RFillSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java
index 994523b..374fe4c 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RFontSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures the text font.
  */
+@NonNullByDefault
 public class RFontSetting extends RPaintSetting {
 	
 	/**
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java
index 6058b2c..c1dee1c 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphic.java
@@ -16,6 +16,8 @@
 
 import java.util.List;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * An RGraphic represents the client side of a graphic (device)
@@ -31,6 +33,7 @@
  * drawing instructions. Settings are valid for all following drawing instructions
  * until it is changed by a new setting instruction of the same type.</p>
  */
+@NonNullByDefault
 public interface RGraphic {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java
index 1261b90..3fdc496 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicElement.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Parent of all instructions painting graphic elements (in contrast to {@link RPaintSetting}).
  */
+@NonNullByDefault
 public abstract class RGraphicElement implements RGraphicInstruction {
 	
 }
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java
index 45b553e..37c704f 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInitialization.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * First instruction of an R graphic.
  */
+@NonNullByDefault
 public class RGraphicInitialization implements RGraphicInstruction {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java
index 5dc61a5..fa69d2a 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RGraphicInstruction.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Instruction to paint a R graphic.
@@ -22,6 +24,7 @@
  * 
  * @see RGraphic
  */
+@NonNullByDefault
 public interface RGraphicInstruction {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java
index 48bf94f..e73ee15 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLine.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Line with end points <code>(x0, y0)</code> and <code>(x1, y1)</code>.
  */
+@NonNullByDefault
 public class RLine extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java
index a795286..313fb23 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RLineSetting.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Configures line width and type.
  */
+@NonNullByDefault
 public class RLineSetting extends RPaintSetting {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java
index 68c2d8e..e6c3fa2 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPath.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Path with vertices <code>(x[1], y[1])</code>, ..., <code>(x[n-1], y[n-1])</code>.
  */
+@NonNullByDefault
 public class RPath extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java
index fea2455..3afbfbe 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolygon.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Polygon with vertices <code>(x[1], y[1])</code>, ..., <code>(x[n-1], y[n-1])</code>.
  */
+@NonNullByDefault
 public class RPolygon extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java
index d9adf44..32cb6d3 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RPolyline.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Polyline through <code>(x[0], y[0])</code>, ..., <code>(x[n-1], y[n-1])</code>.
  */
+@NonNullByDefault
 public class RPolyline extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java
index e505995..de8d61e 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRaster.java
@@ -14,10 +14,13 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Raster image.
  */
+@NonNullByDefault
 public class RRaster extends RGraphicElement {
 	
 	/**
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java
index 4a2e3d0..d00497f 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RRect.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Rectangle with the vertexes <code>(x0, y0)</code>, <code>(x0, y1)</code>,
  * <code>(x1, y1)</code>, <code>(x1, y1)</code>.
  */
+@NonNullByDefault
 public class RRect extends RGraphicElement {
 	
 	
diff --git a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java
index 496c99b..06e28ac 100644
--- a/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java
+++ b/core/org.eclipse.statet.rj.services.core/srcGraphic/org/eclipse/statet/rj/graphic/core/RText.java
@@ -14,11 +14,14 @@
 
 package org.eclipse.statet.rj.graphic.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 
 /**
  * Text at position <code>(x, y)</code>, horizontal adjusted by <code>hAdj</code>
  * [0, 1] and rotated by <code>rDeg</code>.
  */
+@NonNullByDefault
 public class RText extends RGraphicElement {
 	
 	/**
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java
index 74fc7a4..27e567a 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolCommandHandler.java
@@ -20,6 +20,8 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.ToolCommandHandler;
 import org.eclipse.statet.ecommons.ts.core.ToolService;
 
@@ -27,6 +29,7 @@
 /**
  * @since 1.2
  */
+@NonNullByDefault
 public abstract class AbstractRToolCommandHandler implements ToolCommandHandler {
 	
 	
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java
index 6f7f771..e9cb3a1 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/AbstractRToolRunnable.java
@@ -17,6 +17,8 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.Tool;
 import org.eclipse.statet.ecommons.ts.core.ToolRunnable;
 import org.eclipse.statet.ecommons.ts.core.ToolService;
@@ -30,27 +32,28 @@
  * 
  * @since 1.2
  */
+@NonNullByDefault
 public abstract class AbstractRToolRunnable implements ToolRunnable {
 	
 	
-	private final String fTypeId;
-	private final String fLabel;
+	private final String typeId;
+	private final String label;
 	
 	
 	public AbstractRToolRunnable(final String typeId, final String label) {
-		this.fTypeId= typeId;
-		this.fLabel= label;
+		this.typeId= typeId;
+		this.label= label;
 	}
 	
 	
 	@Override
 	public String getTypeId() {
-		return this.fTypeId;
+		return this.typeId;
 	}
 	
 	@Override
 	public String getLabel() {
-		return this.fLabel;
+		return this.label;
 	}
 	
 	@Override
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java
index 8e9b9db..a1309a5 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/RToolService.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.eclient.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.ToolService;
 
 import org.eclipse.statet.rj.services.RService;
@@ -22,6 +24,7 @@
 /**
  * @since 1.2
  */
+@NonNullByDefault
 public interface RToolService extends ToolService, RService {
 	
 }
diff --git a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java
index c427307..1842d98 100644
--- a/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java
+++ b/eclient/org.eclipse.statet.rj.eclient.core/src/org/eclipse/statet/rj/eclient/core/ToolFQRObjectRef.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.rj.eclient.core;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.ecommons.ts.core.Tool;
 
 import org.eclipse.statet.rj.data.RLanguage;
@@ -22,6 +24,7 @@
 import org.eclipse.statet.rj.services.FQRObjectRef;
 
 
+@NonNullByDefault
 public class ToolFQRObjectRef implements FQRObjectRef {
 	
 	
diff --git a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java
index bc021ed..e867ece 100644
--- a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java
+++ b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/internal/rj/eclient/graphics/EclipseRGraphic.java
@@ -37,6 +37,7 @@
 
 import org.eclipse.statet.jcommons.collections.CopyOnWriteIdentityListSet;
 import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ecommons.runtime.core.StatusChangeListener;
 import org.eclipse.statet.ecommons.ts.core.Tool;
@@ -1187,7 +1188,7 @@
 	}
 	
 	@Override
-	public Tool getRHandle() {
+	public @Nullable Tool getRHandle() {
 		if (this.actions != null) {
 			return this.actions.getRHandle();
 		}
diff --git a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java
index 88e3a56..b0b4864 100644
--- a/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java
+++ b/eclient/org.eclipse.statet.rj.eclient.graphics/src/org/eclipse/statet/rj/eclient/graphics/ERGraphic.java
@@ -21,6 +21,8 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.runtime.core.StatusChangeListener;
 import org.eclipse.statet.ecommons.ts.core.Tool;
 
@@ -112,7 +114,7 @@
 	@Override
 	boolean isActive();
 	
-	Tool getRHandle();
+	@Nullable Tool getRHandle();
 	
 	@Override
 	List<? extends ERGraphicInstruction> getInstructions();
diff --git a/examples/org.eclipse.statet.rj.servi.demo/.classpath b/examples/org.eclipse.statet.rj.servi.demo/.classpath
index eca7bdb..7728a88 100644
--- a/examples/org.eclipse.statet.rj.servi.demo/.classpath
+++ b/examples/org.eclipse.statet.rj.servi.demo/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath b/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath
index eca7bdb..7728a88 100644
--- a/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath
+++ b/examples/org.eclipse.statet.rj.servi.rcpdemo/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath b/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath
index eca7bdb..7728a88 100644
--- a/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath
+++ b/examples/org.eclipse.statet.rj.servi.rcpdemo2/.classpath
@@ -1,7 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java b/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java
index f0477fb..17dcd60 100644
--- a/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java
+++ b/examples/org.eclipse.statet.rj.servi.rcpdemo2/src/org/eclipse/statet/rj/servi/rcpdemo/RServiSession.java
@@ -30,6 +30,9 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.ui.statushandlers.StatusManager;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.ts.core.SystemRunnable;
 import org.eclipse.statet.ecommons.ts.core.Tool;
 import org.eclipse.statet.ecommons.ts.core.ToolQueue;
@@ -49,9 +52,10 @@
 
 
 /**
- * Implementations of ECommons Tool Service and Scheduling interfaces (org.eclipse.statet.ecommons.ts.core) for 
+ * Implementations of ECommons Tool Service and Scheduling interfaces (org.eclipse.statet.ecommons.ts.core) for
  * RServi using Eclipse jobs.
  */
+@NonNullByDefault
 public class RServiSession extends PlatformObject implements Tool {
 	
 	
@@ -132,7 +136,7 @@
 		}
 		
 		@Override
-		public void evalVoid(final String expression, final RObject envir,
+		public void evalVoid(final String expression, final @Nullable RObject envir,
 				final IProgressMonitor monitor) throws CoreException {
 			RServiSession.this.servi.evalVoid(expression, envir, monitor);
 		}
@@ -145,14 +149,14 @@
 		
 		@Override
 		public RObject evalData(final String expression,
-				final String factoryId, final int options, final int depth,
+				final @Nullable String factoryId, final int options, final int depth,
 				final IProgressMonitor monitor) throws CoreException {
 			return RServiSession.this.servi.evalData(expression, factoryId, options, depth, monitor);
 		}
 		
 		@Override
-		public RObject evalData(final String expression, final RObject envir,
-				final String factoryId, final int options, final int depth,
+		public RObject evalData(final String expression, final @Nullable RObject envir,
+				final @Nullable String factoryId, final int options, final int depth,
 				final IProgressMonitor monitor) throws CoreException {
 			return RServiSession.this.servi.evalData(expression, envir, factoryId, options, depth, monitor);
 		}
@@ -165,7 +169,7 @@
 		
 		@Override
 		public RObject evalData(final RReference reference,
-				final String factoryId, final int options, final int depth,
+				final @Nullable String factoryId, final int options, final int depth,
 				final IProgressMonitor monitor) throws CoreException {
 			return RServiSession.this.servi.evalData(reference, factoryId, options, depth, monitor);
 		}
diff --git a/servi/org.eclipse.statet.rj.servi.webapp/.classpath b/servi/org.eclipse.statet.rj.servi.webapp/.classpath
index 168a660..4aacce5 100644
--- a/servi/org.eclipse.statet.rj.servi.webapp/.classpath
+++ b/servi/org.eclipse.statet.rj.servi.webapp/.classpath
@@ -3,6 +3,7 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="owner.project.facets" value="java"/>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
diff --git a/servi/org.eclipse.statet.rj.servi/.classpath b/servi/org.eclipse.statet.rj.servi/.classpath
index b323920..0d41512 100644
--- a/servi/org.eclipse.statet.rj.servi/.classpath
+++ b/servi/org.eclipse.statet.rj.servi/.classpath
@@ -3,9 +3,14 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="owner.project.facets" value="java"/>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+			<attribute name="annotationpath" value="/org.eclipse.statet/eea/"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="srcServer"/>
 	<classpathentry kind="src" path="srcServiPool"/>
diff --git a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java
index efa126d..451367a 100644
--- a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java
+++ b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/internal/rj/servi/RServiImpl.java
@@ -30,6 +30,9 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
 import org.eclipse.statet.ecommons.runtime.core.ECommonsRuntime;
 
 import org.eclipse.statet.internal.rj.servi.server.RServiBackend;
@@ -56,6 +59,7 @@
 /**
  * Client side {@link RServi} handler
  */
+@NonNullByDefault
 public class RServiImpl implements RServi, Externalizable {
 	
 	
@@ -137,18 +141,10 @@
 		this.rjs.setServer(this.backend, 1);
 	}
 	
+	@SuppressWarnings("null")
 	public RServiImpl() {
 	}
 	
-	
-	public void setRHandle(final Object rHandle) {
-		this.rHandle= rHandle;
-	}
-	
-	public Object getRHandle() {
-		return this.rHandle;
-	}
-	
 	@Override
 	public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
 		this.accessId= in.readLong();
@@ -165,6 +161,15 @@
 	}
 	
 	
+	public void setRHandle(final Object rHandle) {
+		this.rHandle= rHandle;
+	}
+	
+	public Object getRHandle() {
+		return this.rHandle;
+	}
+	
+	
 	private void init() throws CoreException {
 		this.rjsId= RjsComConfig.registerClientComHandler(this.rjs);
 		final Map<String, Object> properties= new HashMap<>();
@@ -215,7 +220,7 @@
 	}
 	
 	@Override
-	public void evalVoid(final String expression, final RObject envir,
+	public void evalVoid(final String expression, final @Nullable RObject envir,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -233,7 +238,8 @@
 	}
 	
 	@Override
-	public RObject evalData(final String expression, final String factoryId, final int options, final int depth,
+	public RObject evalData(final String expression,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -242,8 +248,8 @@
 	}
 	
 	@Override
-	public RObject evalData(final String expression, final RObject envir,
-			final String factoryId, final int options, final int depth,
+	public RObject evalData(final String expression, final @Nullable RObject envir,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -261,7 +267,8 @@
 	}
 	
 	@Override
-	public RObject evalData(final RReference reference, final String factoryId, final int options, final int depth,
+	public RObject evalData(final RReference reference,
+			final @Nullable String factoryId, final int options, final int depth,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -279,7 +286,8 @@
 	}
 	
 	@Override
-	public void downloadFile(final OutputStream out, final String fileName, final int options,
+	public void downloadFile(final OutputStream out, final String fileName,
+			final int options,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -288,7 +296,8 @@
 	}
 	
 	@Override
-	public byte[] downloadFile(final String fileName, final int options,
+	public byte[] downloadFile(final String fileName,
+			final int options,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
@@ -297,7 +306,8 @@
 	}
 	
 	@Override
-	public void uploadFile(final InputStream in, final long length, final String fileName, final int options,
+	public void uploadFile(final InputStream in, final long length, final String fileName,
+			final int options,
 			final IProgressMonitor monitor) throws CoreException {
 		if (this.rjsId == 0) {
 			init();
diff --git a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java
index 6743190..b45d694 100644
--- a/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java
+++ b/servi/org.eclipse.statet.rj.servi/src/org/eclipse/statet/rj/servi/RServi.java
@@ -16,22 +16,24 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
 import org.eclipse.statet.rj.services.RService;
 
 
 /**
- * A RServi provides {@link RService R services} as background computing engine without an 
- * interactive R console. An RServi can be for example connected to a server side R engine or 
+ * A RServi provides {@link RService R services} as background computing engine without an
+ * interactive R console. An RServi can be for example connected to a server side R engine or
  * an R engine embedded in the local application.
  * <p>
  * How to receive an RServi instance depends on the application.
- * The RServi framework includes a server side RServi 
+ * The RServi framework includes a server side RServi
  * {@link org.eclipse.statet.rj.servi.node.RServiPool pool}
  * which can be used to provide RServi instances. To get a RServi instance
  * from such a pool which made available via RMI {@link org.eclipse.statet.rj.servi.pool.RServiUtil RServiUtil}
  * provides helper methods to request a RServi instance.</p>
  * <p>
- * In many applications it is sufficient to use an RServi for a direct 
+ * In many applications it is sufficient to use an RServi for a direct
  * sequence of executions, so that request, evaluations and closing can be
  * performed one after another in a single thread. If it is required to use
  * the RServi multiple times (e.g. a large data set should be reused),
@@ -45,13 +47,14 @@
  * After closing the RServi all resources created by it, R data objects and
  * files on the R host system are cleaned up. Client side R data objects and
  * files are not affected by the clean up. After calling this method,
- * the RServi instance can no longer be used; further function call will 
+ * the RServi instance can no longer be used; further function call will
  * throw an exception.</p>
  * <p>
  * All common guidelines of {@link RService} should be taken into account.</p>
  * 
  * @since 0.1
  */
+@NonNullByDefault
 public interface RServi extends RService {