diff --git a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntArrayMap.java b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntArrayMap.java
index f9ff29d..f583022 100644
--- a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntArrayMap.java
+++ b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntArrayMap.java
@@ -15,6 +15,7 @@
 package org.eclipse.statet.ecommons.collections;
 
 import java.lang.reflect.Array;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
@@ -144,9 +145,7 @@
 	@Override
 	public void clear() {
 		if (fSize > 0) {
-			for (int i = fArray.length-1; i >= 0; i--) {
-				fArray[i] = null;
-			}
+			Arrays.fill(fArray, null);
 			fSize = 0;
 		}
 	}
diff --git a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntHashMap.java b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntHashMap.java
index d3bf9c6..b7c9d3f 100644
--- a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntHashMap.java
+++ b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/collections/IntHashMap.java
@@ -16,6 +16,7 @@
 
 import java.nio.channels.UnsupportedAddressTypeException;
 import java.util.AbstractSet;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.Map;
@@ -310,16 +311,14 @@
 	
 	@Override
 	public void clear() {
-		for (int i = fEntries.length-1; i >= 0; i--) {
-			fEntries[i] = null;
-		}
+		Arrays.fill(fEntries, null);
 		fSize = 0;
 	}
 	
 	
 	public Set<IntEntry<V>> entryIntSet() {
 		final Set<IntEntry<V>> entries = fEntryIntSet;
-		return (entries != null) ? entries : (fEntryIntSet = new AbstractSet<IntEntry<V>>() {
+		return (entries != null) ? entries : (fEntryIntSet = new AbstractSet<>() {
 			@Override
 			public int size() {
 				return fSize;
diff --git a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText.java b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText.java
index 303ee38..5d51118 100644
--- a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText.java
+++ b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText.java
@@ -32,6 +32,8 @@
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.osgi.util.NLS;
 
+import org.eclipse.statet.jcommons.collections.ImCollections;
+
 
 /**
  * Allows string substitution of special variables with manual replacement strings
@@ -45,9 +47,9 @@
 	
 	
 	private static boolean isEscaped(final String text, final int offset) {
-		int count = 1;
-		while (offset >= count) { // offset-count >= 0
-			final char c = text.charAt(offset-count);
+		int count= 1;
+		while (offset >= count) { // offset - count >= 0
+			final char c= text.charAt(offset - count);
 			if (c == '$') {
 				count++;
 			}
@@ -63,42 +65,41 @@
 			if (region[0] == 0) {
 				return;
 			}
-			final char c1 = text.charAt(region[0]-1);
+			final char c1= text.charAt(region[0] - 1);
 			if (c1 != ':') {
 				return;
 			}
-			final int start = text.lastIndexOf("${", region[0]-1); //$NON-NLS-1$
-			if (start < 0 || text.lastIndexOf("}", region[0]-1) > start || isEscaped(text, start)) { //$NON-NLS-1$
+			final int start= text.lastIndexOf("${", region[0] - 1); //$NON-NLS-1$
+			if (start < 0 || text.lastIndexOf("}", region[0] - 1) > start || isEscaped(text, start)) { //$NON-NLS-1$
 				return;
 			}
 			
-			region[0] = start;
-			final int end = text.indexOf('}', region[1]);
+			region[0]= start;
+			final int end= text.indexOf('}', region[1]);
 			if (end >= 0) {
-				region[1] = end + 1;
+				region[1]= end + 1;
 			}
 		}
 	}
 	
-	private static final String[] LOCATION_VARIABLES = new String[] {
-		"resource_loc", "selected_resource_loc", "container_loc", "project_loc", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-	};
+	private static final List<String> LOCATION_VARIABLES= ImCollections.newList(
+			"resource_loc", "selected_resource_loc", "container_loc", "project_loc" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 	
 	
-	private String fText;
+	private String text;
 	
-	private int fState;
+	private int state;
 	
-	private final List<String> fSpecialVariablesNames;
-	private List<IDynamicVariable> fSpecialVariables;
-	private final Set<String> fUnresolvedSpecial= new HashSet<>();
-	private final Map<String, String> fLocationVariables= new HashMap<>();
+	private final List<String> specialVariablesNames;
+	private List<IDynamicVariable> specialVariables;
+	private final Set<String> unresolvedSpecial= new HashSet<>();
+	private final Map<String, String> locationVariables= new HashMap<>();
 	
 	
 	public VariableText(final String text, final List<String> specialVariablesNames) {
-		fSpecialVariablesNames = specialVariablesNames;
-		fText = text;
-		fState = 1;
+		this.specialVariablesNames= specialVariablesNames;
+		this.text= text;
+		this.state= 1;
 	}
 	
 	public VariableText(final String text, final List<IDynamicVariable> checkedVariables, final boolean useDirectly) {
@@ -106,39 +107,39 @@
 		for (final IStringVariable variable : checkedVariables) {
 			specialVariablesNames.add(variable.getName());
 		}
-		fSpecialVariablesNames = specialVariablesNames;
+		this.specialVariablesNames= specialVariablesNames;
 		if (useDirectly) {
-			fSpecialVariables = checkedVariables;
+			this.specialVariables= checkedVariables;
 		}
-		fText = text;
-		fState = 1;
+		this.text= text;
+		this.state= 1;
 	}
 	
 	
 	public String getText() {
-		return fText;
+		return this.text;
 	}
 	
 	public void performInitialStringSubstitution(final boolean reportUndefinedVariables) throws CoreException {
-		if (fState != 1) {
+		if (this.state != 1) {
 			throw new IllegalStateException();
 		}
-		String text = fText;
+		String text= this.text;
 		
 		final LinkedHashMap<String, String> specialVariables= new LinkedHashMap<>();
-		for (final String variableName : fSpecialVariablesNames) {
-			final String pattern = "${"+variableName; //$NON-NLS-1$
-			int offset = -1;
-			while ((offset = text.indexOf(pattern, offset + 1)) >= 0) {
+		for (final String variableName : this.specialVariablesNames) {
+			final String pattern= "${" + variableName; //$NON-NLS-1$
+			int offset= -1;
+			while ((offset= text.indexOf(pattern, offset + 1)) >= 0) {
 				if (!isEscaped(text, offset)) {
 					final int length;
-					switch (offset+pattern.length() < text.length() ?
+					switch (offset + pattern.length() < text.length() ?
 							text.charAt(offset + pattern.length()) : 0) {
 					case '}':
-						length = pattern.length() + 1;
+						length= pattern.length() + 1;
 						break;
 					case ':':
-						length = text.indexOf('}', offset + pattern.length()) - offset + 1;
+						length= text.indexOf('}', offset + pattern.length()) - offset + 1;
 						if (length > 0) {
 							break;
 						}
@@ -147,54 +148,54 @@
 								NLS.bind("Malformed variable expression: variable ''{0}'' not closed.",
 										variableName )));
 					}
-					fUnresolvedSpecial.add(variableName);
-					final int[] region = new int[] { offset, offset + length };
+					this.unresolvedSpecial.add(variableName);
+					final int[] region= new int[] { offset, offset + length };
 					searchSurrounding(text, region);
-					final String key = "XX-SPECIALVAR-"+specialVariables.size()+"-XX"; //$NON-NLS-1$ //$NON-NLS-2$
+					final String key= "XX-SPECIALVAR-" + specialVariables.size() + "-XX"; //$NON-NLS-1$ //$NON-NLS-2$
 					specialVariables.put(key, new String(text.substring(region[0], region[1])));
-					text = text.substring(0, region[0]) + key + text.substring(region[1], text.length());
+					text= text.substring(0, region[0]) + key + text.substring(region[1]);
 				}
 			}
 		}
 		
-		text = searchResourceVar(text, reportUndefinedVariables);
+		text= searchResourceVar(text, reportUndefinedVariables);
 		
-		text = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(text, reportUndefinedVariables);
+		text= VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(text, reportUndefinedVariables);
 		
-		final Entry<String, String>[] entries = specialVariables.entrySet().toArray(new Entry[specialVariables.size()]);
-		for (int i = entries.length - 1; i >= 0; i--) {
-			text = text.replace(entries[i].getKey(), entries[i].getValue());
+		final Entry<String, String>[] entries= specialVariables.entrySet().toArray(new Entry[specialVariables.size()]);
+		for (int i= entries.length - 1; i >= 0; i--) {
+			text= text.replace(entries[i].getKey(), entries[i].getValue());
 		}
 		
-		fText = text;
+		this.text= text;
 		
-		if (fSpecialVariables != null) {
-			for (final IDynamicVariable variable : fSpecialVariables) {
+		if (this.specialVariables != null) {
+			for (final IDynamicVariable variable : this.specialVariables) {
 				if (require(variable.getName())) {
 					set(variable);
 				}
 			}
 		}
 		
-		fState = 2;
+		this.state= 2;
 	}
 	
 	private String searchResourceVar(String text, final boolean reportUndefinedVariables) throws CoreException {
-		final IStringVariableManager variableManager = VariablesPlugin.getDefault().getStringVariableManager();
+		final IStringVariableManager variableManager= VariablesPlugin.getDefault().getStringVariableManager();
 		
 		for (final String variableName : LOCATION_VARIABLES) {
-			final String pattern = "${"+variableName; //$NON-NLS-1$
-			int offset = -1;
-			while ((offset = text.indexOf(pattern, offset+1)) >= 0) {
+			final String pattern= "${" + variableName; //$NON-NLS-1$
+			int offset= -1;
+			while ((offset= text.indexOf(pattern, offset + 1)) >= 0) {
 				if (!isEscaped(text, offset)) {
-					int end = text.indexOf('}', offset);
-					int next = offset+1;
-					while ((next = text.indexOf('{', next+1)) >= 0 && next < end) {
-						end = text.indexOf('}', end+1);
+					int end= text.indexOf('}', offset);
+					int next= offset + 1;
+					while ((next= text.indexOf('{', next + 1)) >= 0 && next < end) {
+						end= text.indexOf('}', end + 1);
 					}
-					final String key = "XX-RESOURCEVAR-" + fLocationVariables.size() + "-XX"; //$NON-NLS-1$ //$NON-NLS-2$
-					fLocationVariables.put(key, new String(variableManager.performStringSubstitution(text.substring(offset, end+1), reportUndefinedVariables)));
-					text = text.substring(0, offset) + key + text.substring(end+1, text.length());
+					final String key= "XX-RESOURCEVAR-" + this.locationVariables.size() + "-XX"; //$NON-NLS-1$ //$NON-NLS-2$
+					this.locationVariables.put(key, new String(variableManager.performStringSubstitution(text.substring(offset, end + 1), reportUndefinedVariables)));
+					text= text.substring(0, offset) + key + text.substring(end + 1);
 				}
 			}
 		}
@@ -202,39 +203,39 @@
 	}
 	
 	public boolean require(final String variableName) {
-		return fUnresolvedSpecial.contains(variableName);
+		return this.unresolvedSpecial.contains(variableName);
 	}
 	
 	public void set(final String variableName, final String value) {
-		if (fUnresolvedSpecial.remove(variableName)) {
-			final String pattern = "${"+variableName+"}"; //$NON-NLS-1$ //$NON-NLS-2$
-			String text = fText;
+		if (this.unresolvedSpecial.remove(variableName)) {
+			final String pattern= "${" + variableName + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+			String text= this.text;
 			
-			int offset = -1;
-			while ((offset = text.indexOf(pattern, offset+1)) >= 0) {
+			int offset= -1;
+			while ((offset= text.indexOf(pattern, offset + 1)) >= 0) {
 				if (!isEscaped(text, offset)) {
-					text = text.substring(0, offset) + value + text.substring(offset+pattern.length(), text.length());
+					text= text.substring(0, offset) + value + text.substring(offset + pattern.length());
 				}
 			}
 			
-			fText = text;
+			this.text= text;
 		}
 	}
 	
 	public void set(final IDynamicVariable variable) throws CoreException {
-		if (fUnresolvedSpecial.remove(variable.getName())) {
-			final String pattern = "${"+variable.getName(); //$NON-NLS-1$
-			String text = fText;
+		if (this.unresolvedSpecial.remove(variable.getName())) {
+			final String pattern= "${" + variable.getName(); //$NON-NLS-1$
+			String text= this.text;
 			
-			int offset = -1;
-			while ((offset = text.indexOf(pattern, offset+1)) >= 0) {
+			int offset= -1;
+			while ((offset= text.indexOf(pattern, offset + 1)) >= 0) {
 				if (!isEscaped(text, offset)) {
 					final int length;
 					final String value;
 					switch (text.charAt(offset + pattern.length())) {
 					case '}':
-						length = pattern.length() + 1;
-						value = variable.getValue(null);
+						length= pattern.length() + 1;
+						value= variable.getValue(null);
 						break;
 					case ':':
 						if (!variable.supportsArgument()) {
@@ -242,43 +243,43 @@
 									NLS.bind("Malformed variable expression: variable ''{0}'' doesn't support arguments.",
 											variable.getName() )));
 						}
-						length = text.indexOf('}', offset + pattern.length()) - offset + 1;
-						value = variable.getValue(
+						length= text.indexOf('}', offset + pattern.length()) - offset + 1;
+						value= variable.getValue(
 								text.substring(offset + pattern.length() + 1, offset + length - 1) );
 						break;
 					default:
 						throw new IllegalStateException();
 					}
-					text = text.substring(0, offset) + value + text.substring(offset+length, text.length());
+					text= text.substring(0, offset) + value + text.substring(offset + length);
 				}
 			}
 			
-			fText = text;
+			this.text= text;
 		}
 	}
 	
 	public void performFinalStringSubstitution(final LocationProcessor locationProcessor) throws CoreException {
-		if (!fUnresolvedSpecial.isEmpty()) {
+		if (!this.unresolvedSpecial.isEmpty()) {
 			throw new CoreException(new Status(IStatus.ERROR, ECommonsVariablesCore.BUNDLE_ID,
-					"Unresolved variable(s): " + fUnresolvedSpecial.toString() + "." ));
+					"Unresolved variable(s): " + this.unresolvedSpecial.toString() + "." ));
 		}
-		if (fState == 1) {
+		if (this.state == 1) {
 			performInitialStringSubstitution(true);
 		}
-		if (fState != 2) {
+		if (this.state != 2) {
 			throw new IllegalStateException();
 		}
-		String text = fText;
+		String text= this.text;
 		
-		text = searchResourceVar(text, true);
-		text = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(text, true);
-		for (final Entry<String, String> entry : fLocationVariables.entrySet()) {
-			final String value = (locationProcessor != null) ? locationProcessor.process(entry.getValue()) : entry.getValue();
-			text = text.replace(entry.getKey(), value);
+		text= searchResourceVar(text, true);
+		text= VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(text, true);
+		for (final Entry<String, String> entry : this.locationVariables.entrySet()) {
+			final String value= (locationProcessor != null) ? locationProcessor.process(entry.getValue()) : entry.getValue();
+			text= text.replace(entry.getKey(), value);
 		}
 		
-		fText = text;
-		fState = 3;
+		this.text= text;
+		this.state= 3;
 	}
 	
 }
diff --git a/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/DataBindingSubContext.java b/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/DataBindingSubContext.java
index 8112715..13f4f2a 100644
--- a/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/DataBindingSubContext.java
+++ b/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/DataBindingSubContext.java
@@ -62,7 +62,7 @@
 	}
 	
 	public void run(final Runnable runnable) {
-		final IListChangeListener<Binding> bindingsListener= new IListChangeListener<Binding>() {
+		final IListChangeListener<Binding> bindingsListener= new IListChangeListener<>() {
 			@Override
 			public void handleListChange(final ListChangeEvent<? extends Binding> event) {
 				for (final ListDiffEntry<? extends Binding> diff : event.diff.getDifferences()) {
diff --git a/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/conversion/ClassTypedConverter.java b/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/conversion/ClassTypedConverter.java
index 5dba9ca..e28ca53 100644
--- a/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/conversion/ClassTypedConverter.java
+++ b/ecommons/org.eclipse.statet.ecommons.databinding.core/src/org/eclipse/statet/ecommons/databinding/core/conversion/ClassTypedConverter.java
@@ -37,7 +37,7 @@
 	
 	static <F, T> ClassTypedConverter<F, T> create(final Class<F> fromType, final Class<T> toType,
 			final Function<? super F, ? extends T> function) {
-		return new ClassTypedConverter<F, T>() {
+		return new ClassTypedConverter<>() {
 			@Override
 			public Class<F> getFromType() {
 				return fromType;
@@ -55,7 +55,7 @@
 	
 	
 	static <F, T> ClassTypedConverter<F, T> createIdentity(final Class<F> fromType, final Class<T> toType) {
-		return new ClassTypedConverter<F, T>() {
+		return new ClassTypedConverter<>() {
 			@Override
 			public Class<F> getFromType() {
 				return fromType;
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ManagedConfigurationBlock.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ManagedConfigurationBlock.java
index 498b330..c805e24 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ManagedConfigurationBlock.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ManagedConfigurationBlock.java
@@ -586,7 +586,7 @@
 	}
 	
 	public <T> IObservableValue<T> createObservable(final Preference<T> pref) {
-		return new AbstractObservableValue<T>() {
+		return new AbstractObservableValue<>() {
 			@Override
 			public Object getValueType() {
 				return pref.getUsageType();
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ScopedPreferenceStore.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ScopedPreferenceStore.java
index 43d9aa4..4454adc 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ScopedPreferenceStore.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/preferences/ui/ScopedPreferenceStore.java
@@ -417,8 +417,7 @@
 	@Override
 	public boolean getBoolean(final String name) {
 		final String value = internalGet(name);
-		return value == null ? BOOLEAN_DEFAULT_DEFAULT : Boolean.valueOf(value)
-				.booleanValue();
+		return (value != null) ? Boolean.parseBoolean(value) : BOOLEAN_DEFAULT_DEFAULT;
 	}
 	
 	@Override
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/actions/ControlServicesUtil.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/actions/ControlServicesUtil.java
index ad25c75..02a375e 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/actions/ControlServicesUtil.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/actions/ControlServicesUtil.java
@@ -123,7 +123,7 @@
 	}
 	
 	private Expression initExpression(final Control control) {
-		Expression focusExpression= new FocusExpression();
+		final Expression focusExpression= new FocusExpression();
 		if (this.serviceLocator instanceof IWorkbench) {
 			final AndExpression and= new AndExpression();
 			and.add(new ActiveShellExpression(control.getShell()));
@@ -178,7 +178,7 @@
 	
 	
 	protected void dispose() {
-		IHandlerService handlerService= this.handlerService;
+		final var handlerService= this.handlerService;
 		if (handlerService != null) {
 			this.handlerService= null;
 			if (this.activatedHandlers != null) {
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/ExtensibleTextCellEditor.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/ExtensibleTextCellEditor.java
index 2430bcf..b2339d3 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/ExtensibleTextCellEditor.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/ExtensibleTextCellEditor.java
@@ -317,8 +317,7 @@
 		final boolean newValidState= isCorrect(typedValue);
 		if (!newValidState) {
 			// try to insert the current value into the error message.
-			setErrorMessage(MessageFormat.format(getErrorMessage(),
-					new Object[] { value }));
+			setErrorMessage(MessageFormat.format(getErrorMessage(), value));
 		}
 		valueChanged(oldValidState, newValidState);
 	}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/TreeAndListGroup.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/TreeAndListGroup.java
index f8402ef..3b6a535 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/TreeAndListGroup.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/components/TreeAndListGroup.java
@@ -164,7 +164,7 @@
 		
 		createTreeViewer(fSplitControl);
 		createListViewer(fSplitControl);
-		fSplitControl.setWeights(new int[] { 1, 1 });
+		fSplitControl.setWeights(1, 1);
 		
 		return fSplitControl;
 	}
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/BrowserAddressBar.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/BrowserAddressBar.java
index 6220842..3c3f562 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/BrowserAddressBar.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/BrowserAddressBar.java
@@ -91,7 +91,7 @@
 		if (this.inputHistory != null) {
 			final IObservableList<String> textItemList= WidgetProperties.items()
 					.observe(this.textControl);
-			this.urlHistoryListener= new IListChangeListener<String>() {
+			this.urlHistoryListener= new IListChangeListener<>() {
 				@Override
 				public void handleListChange(final ListChangeEvent<? extends String> event) {
 					event.diff.applyTo(textItemList);
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/ManageBookmarksDialog.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/ManageBookmarksDialog.java
index 8f653a0..11f9ad8 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/ManageBookmarksDialog.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/mpbv/ManageBookmarksDialog.java
@@ -98,7 +98,7 @@
 			this.tableViewer.setLabelProvider(new LabelProvider());
 		}
 		
-		this.buttons= new ButtonGroup<BrowserBookmark>(composite) {
+		this.buttons= new ButtonGroup<>(composite) {
 			@Override
 			protected BrowserBookmark edit1(final BrowserBookmark item, final boolean newItem, final Object parent) {
 				final EditBookmarkDialog dialog= new EditBookmarkDialog(getShell(), item);
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/UIMiscellanyPlugin.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/UIMiscellanyPlugin.java
index 348966a..7618bd3 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/UIMiscellanyPlugin.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/UIMiscellanyPlugin.java
@@ -236,7 +236,9 @@
 				final Color hotYellow = new Color(display, new RGB(252, 232, 160));
 				final Color transparent = display.getSystemColor(SWT.COLOR_MAGENTA);
 				
-				final PaletteData palette = new PaletteData(new RGB[] { transparent.getRGB(), border.getRGB(), background.getRGB(), hotRed.getRGB(), hotYellow.getRGB() });
+				final PaletteData palette = new PaletteData(transparent.getRGB(),
+						border.getRGB(), background.getRGB(),
+						hotRed.getRGB(), hotYellow.getRGB() );
 				final ImageData data = new ImageData(16, 16, 8, palette);
 				data.transparentPixel = 0;
 				
diff --git a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/UriUtils.java b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/UriUtils.java
index 1ef82cb..c554e67 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/UriUtils.java
+++ b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/UriUtils.java
@@ -182,7 +182,7 @@
 		if (jarSepIdx < containerSchemeIdx) {
 			throw new URISyntaxException(url.toString(), "missing JAR separator");
 		}
-		return ssp.substring(jarSepIdx + 2, ssp.length());
+		return ssp.substring(jarSepIdx + 2);
 	}
 	
 	/**
diff --git a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/net/PortRange.java b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/net/PortRange.java
index 90b6f86..3b33487 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/net/PortRange.java
+++ b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/net/PortRange.java
@@ -33,7 +33,7 @@
 			if (idx != -1) {
 				return new PortRange(
 						Integer.parseInt(s.substring(0, idx)),
-						Integer.parseInt(s.substring(idx + 1, s.length())) );
+						Integer.parseInt(s.substring(idx + 1)) );
 			}
 		}
 		if (s.length() > 0) {
