diff --git a/build/org.eclipse.e4.core.tools.update/category.xml b/build/org.eclipse.e4.core.tools.update/category.xml
index 232d692..2100b66 100644
--- a/build/org.eclipse.e4.core.tools.update/category.xml
+++ b/build/org.eclipse.e4.core.tools.update/category.xml
@@ -6,25 +6,15 @@
    <feature url="features/org.eclipse.e4.tools.bundle.spy.feature_0.1.0.qualifier.jar" id="org.eclipse.e4.tools.bundle.spy.feature" version="0.1.0.qualifier">
       <category name="org.eclipse.e4.tools.bundle.spy"/>
    </feature>
-   <feature url="features/org.eclipse.e4.tools.preference.spy.feature_0.1.0.qualifier.jar" id="org.eclipse.e4.tools.preference.spy.feature" version="0.1.0.qualifier">
-      <category name="org.eclipse.e4.tools.preference.spy"/>
-   </feature>
-   <feature url="features/org.eclipse.e4.tools.spies.feature_0.18.0.qualifier.jar" id="org.eclipse.e4.tools.spies.feature" version="0.18.0.qualifier">
-      <category name="org.eclipse.e4.tools.spies.feature"/>
-   </feature>
    <feature id="org.eclipse.e4.tools.spies.feature.source">
       <category name="org.eclipse.e4.tools.spies.feature"/>
    </feature>
-   <feature url="features/org.eclipse.e4.tools.css.spy.feature_0.14.0.qualifier.jar" id="org.eclipse.e4.tools.css.spy.feature" version="0.14.0.qualifier">
-      <category name="org.eclipse.e4.tools.css.spy"/>
-   </feature>
    <feature url="features/org.eclipse.e4.tools.event.spy.feature_0.15.0.qualifier.jar" id="org.eclipse.e4.tools.event.spy.feature" version="0.15.0.qualifier">
       <category name="org.eclipse.e4.tools.event.spy"/>
    </feature>
-   <feature url="features/org.eclipse.e4.tools.model.spy.feature_0.1.100.qualifier.jar" id="org.eclipse.e4.tools.model.spy.feature" version="0.1.100.qualifier">
-      <category name="org.eclipse.e4.tools.model.spy"/>
+   <feature id="org.eclipse.e4.tools.spies.feature">
+      <category name="org.eclipse.e4.tools.spies.feature"/>
    </feature>
-   <category-def name="org.eclipse.e4.tools.css.spy" label="Eclipse 4 - CSS Spy"/>
    <category-def name="org.eclipse.e4.tools.event.spy" label="Eclipse 4 - Event Spy"/>
    <category-def name="org.eclipse.e4.tools.context.spy" label="Eclipse 4 - Context Spy"/>
    <category-def name="org.eclipse.e4.tools.spies.feature" label="Eclipse 4 - All Spies">
@@ -32,19 +22,9 @@
          Feature to group all spies into one feature.
       </description>
    </category-def>
-   <category-def name="org.eclipse.e4.tools.model.spy" label="Eclipse 4 - Model Spy">
-      <description>
-         A spy to investigate and alter the Eclipse 4 runtime model. Formerly known as the &quot;Live Editor&quot;.
-      </description>
-   </category-def>
    <category-def name="org.eclipse.e4.tools.bundle.spy" label="Eclipse 4 - Bundle Spy">
       <description>
          A spy to display all the bundles running in the application and to start or stop some of them.
       </description>
    </category-def>
-   <category-def name="org.eclipse.e4.tools.preference.spy" label="Eclipse 4 - Preference Spy">
-      <description>
-         A spy to display recently changed or even all the preferences of the running application. You can see the notepaths, keys, new and old values of these preferences. See http://blog.vogella.com/2014/12/28/preferences-spy-for-eclipse-ide-and-rcp/
-      </description>
-   </category-def>
 </site>
diff --git a/build/org.eclipse.e4.core.tools.update/pom.xml b/build/org.eclipse.e4.core.tools.update/pom.xml
index 35481e2..3f0c9bd 100644
--- a/build/org.eclipse.e4.core.tools.update/pom.xml
+++ b/build/org.eclipse.e4.core.tools.update/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
diff --git a/bundles/org.eclipse.e4.tools.bundle.spy/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.bundle.spy/META-INF/MANIFEST.MF
index 16f9c4a..8eea196 100644
--- a/bundles/org.eclipse.e4.tools.bundle.spy/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.tools.bundle.spy/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Bundle Spy
 Bundle-SymbolicName: org.eclipse.e4.tools.bundle.spy;singleton:=true
-Bundle-Version: 0.18.0.qualifier
+Bundle-Version: 0.19.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.10.0",
  org.eclipse.jface;bundle-version="3.10.1",
diff --git a/bundles/org.eclipse.e4.tools.bundle.spy/pom.xml b/bundles/org.eclipse.e4.tools.bundle.spy/pom.xml
index c67e181..926161a 100644
--- a/bundles/org.eclipse.e4.tools.bundle.spy/pom.xml
+++ b/bundles/org.eclipse.e4.tools.bundle.spy/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
diff --git a/bundles/org.eclipse.e4.tools.context.spy/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.context.spy/META-INF/MANIFEST.MF
index cc36fe3..f4cc51e 100644
--- a/bundles/org.eclipse.e4.tools.context.spy/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.tools.context.spy/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Context Spy
 Bundle-SymbolicName: org.eclipse.e4.tools.context.spy;singleton:=true
-Bundle-Version: 0.17.0.qualifier
+Bundle-Version: 0.19.0.qualifier
 Bundle-Vendor: Eclipse Foundation
 Export-Package: org.eclipse.e4.tools.context.spy
 Require-Bundle: javax.inject;bundle-version="1.0.0",
diff --git a/bundles/org.eclipse.e4.tools.context.spy/pom.xml b/bundles/org.eclipse.e4.tools.context.spy/pom.xml
index 2f2088e..076f780 100644
--- a/bundles/org.eclipse.e4.tools.context.spy/pom.xml
+++ b/bundles/org.eclipse.e4.tools.context.spy/pom.xml
@@ -4,13 +4,13 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
   <groupId>org.eclipse.e4</groupId>
   <artifactId>org.eclipse.e4.tools.context.spy</artifactId>
-  <version>0.17.0-SNAPSHOT</version>
+  <version>0.19.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>
diff --git a/bundles/org.eclipse.e4.tools.context.spy/src/org/eclipse/e4/internal/tools/context/spy/ContextSpyProvider.java b/bundles/org.eclipse.e4.tools.context.spy/src/org/eclipse/e4/internal/tools/context/spy/ContextSpyProvider.java
index ba98d98..dc660da 100644
--- a/bundles/org.eclipse.e4.tools.context.spy/src/org/eclipse/e4/internal/tools/context/spy/ContextSpyProvider.java
+++ b/bundles/org.eclipse.e4.tools.context.spy/src/org/eclipse/e4/internal/tools/context/spy/ContextSpyProvider.java
@@ -13,7 +13,10 @@
  *******************************************************************************/
 package org.eclipse.e4.internal.tools.context.spy;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 
 import javax.inject.Inject;
 
@@ -67,10 +70,14 @@
 
 	@Override
 	public Object[] getChildren(Object parentElement) {
+		List<EclipseContext> children = Collections.emptyList();
+
 		if (parentElement instanceof EclipseContext) {
-			return ((EclipseContext) parentElement).getChildren().toArray();
+			Iterable<EclipseContext> it = ((EclipseContext) parentElement).getChildren();
+			children = new ArrayList<EclipseContext>();
+			it.forEach(children::add);
 		}
-		return null;
+		return children.toArray();
 	}
 
 	@Override
@@ -83,7 +90,7 @@
 
 	@Override
 	public boolean hasChildren(Object element) {
-		return ((element instanceof EclipseContext) && !(((EclipseContext) element).getChildren().isEmpty()));
+		return getChildren(element).length > 0;
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.e4.tools.css.spy/.classpath b/bundles/org.eclipse.e4.tools.css.spy/.classpath
deleted file mode 100644
index e801ebf..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?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-11"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.e4.tools.css.spy/.project b/bundles/org.eclipse.e4.tools.css.spy/.project
deleted file mode 100644
index f29584d..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.css.spy</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.core.runtime.prefs b/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 2f55e9a..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,315 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
-org.eclipse.jdt.core.compiler.compliance=11
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=120
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index c15b52b..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,62 +0,0 @@
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile
-formatter_settings_version=12
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=true
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=true
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
-sp_cleanup.use_type_arguments=false
diff --git a/bundles/org.eclipse.e4.tools.css.spy/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.css.spy/META-INF/MANIFEST.MF
deleted file mode 100644
index edd7961..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,30 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: CSS Spy
-Bundle-SymbolicName: org.eclipse.e4.tools.css.spy;singleton:=true
-Bundle-Version: 0.18.0.qualifier
-Bundle-Vendor: Eclipse.org
-Require-Bundle: org.eclipse.core.runtime;bundle-version="3.6.0",
- org.eclipse.e4.ui.workbench;bundle-version="0.9.0";resolution:=optional,
- org.eclipse.e4.ui.css.core;bundle-version="0.9.0",
- org.eclipse.swt;bundle-version="3.6.0",
- org.eclipse.jface;bundle-version="3.8.0",
- org.eclipse.e4.ui.css.swt;bundle-version="0.10.0",
- org.eclipse.e4.ui.css.swt.theme;bundle-version="0.9.201",
- org.eclipse.e4.ui.widgets;bundle-version="0.11.0",
- org.eclipse.e4.ui.model.workbench;bundle-version="0.9.1",
- org.eclipse.e4.tools.spy;bundle-version="0.1.0",
- org.eclipse.e4.ui.di,
- org.eclipse.e4.core.di.extensions
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Bundle-ActivationPolicy: lazy
-Import-Package: javax.annotation;version="1.2.0",
- javax.inject,
- org.eclipse.e4.core.contexts,
- org.eclipse.e4.core.di.annotations,
- org.eclipse.e4.core.services.log,
- org.eclipse.e4.core.services.statusreporter,
- org.eclipse.e4.ui.bindings,
- org.eclipse.e4.ui.services,
- org.w3c.css.sac;version="1.3.0"
-Automatic-Module-Name: org.eclipse.e4.tools.css.spy
diff --git a/bundles/org.eclipse.e4.tools.css.spy/build.properties b/bundles/org.eclipse.e4.tools.css.spy/build.properties
deleted file mode 100644
index 5e4181d..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               icons/,\
-               css/
diff --git a/bundles/org.eclipse.e4.tools.css.spy/css/dark-theme.css b/bundles/org.eclipse.e4.tools.css.spy/css/dark-theme.css
deleted file mode 100644
index db401ee..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/css/dark-theme.css
+++ /dev/null
@@ -1,3 +0,0 @@
-#css-spy {
-	background-color: red;
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.css.spy/forceQualifierUpdate.txt b/bundles/org.eclipse.e4.tools.css.spy/forceQualifierUpdate.txt
deleted file mode 100644
index 396f087..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/forceQualifierUpdate.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# To force a version qualifier update add the bug here
-Bug 403237 - o.e.e4.tools cannot be build with "mvn clean install"
diff --git a/bundles/org.eclipse.e4.tools.css.spy/icons/css_scratchpad.png b/bundles/org.eclipse.e4.tools.css.spy/icons/css_scratchpad.png
deleted file mode 100644
index 7c8f5bc..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/icons/css_scratchpad.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.css.spy/icons/css_scratchpad@2x.png b/bundles/org.eclipse.e4.tools.css.spy/icons/css_scratchpad@2x.png
deleted file mode 100644
index 28c950c..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/icons/css_scratchpad@2x.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.css.spy/icons/cssspy.png b/bundles/org.eclipse.e4.tools.css.spy/icons/cssspy.png
deleted file mode 100644
index 153d48a..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/icons/cssspy.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.css.spy/icons/cssspy@2x.png b/bundles/org.eclipse.e4.tools.css.spy/icons/cssspy@2x.png
deleted file mode 100644
index 05e4d82..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/icons/cssspy@2x.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.css.spy/plugin.xml b/bundles/org.eclipse.e4.tools.css.spy/plugin.xml
deleted file mode 100644
index cda001e..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/plugin.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-   <extension
-         point="org.eclipse.e4.tools.spy.spyPart">
-      <spyPart
-            description="Open Css Spy"
-            icon="icons/cssspy.png"
-            name="CSS Spy"
-            part="org.eclipse.e4.tools.css.spy.CssSpyPart"
-            shortcut="M2+M3+F5"></spyPart>
-      <spyPart
-            description="Open Css Scratch Pad"
-            icon="icons/css_scratchpad.png"
-            name="CSS Scratch pad"
-            part="org.eclipse.e4.tools.css.spy.CSSScratchPadPart"
-            shortcut="M2+M3+F6">
-      </spyPart>
-   </extension>
-   <extension
-         point="org.eclipse.e4.ui.css.swt.theme">
-      <stylesheet
-            uri="css/dark-theme.css">
-         <themeid
-               refid="org.eclipse.e4.ui.css.theme.e4_dark"></themeid>
-      </stylesheet>
-   </extension>
-
-</plugin>
diff --git a/bundles/org.eclipse.e4.tools.css.spy/pom.xml b/bundles/org.eclipse.e4.tools.css.spy/pom.xml
deleted file mode 100644
index 6ab98c7..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/pom.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <version>0.18.0-SNAPSHOT</version>
-  <artifactId>org.eclipse.e4.tools.css.spy</artifactId>
-  <packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSPropertiesContentProvider.java b/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSPropertiesContentProvider.java
deleted file mode 100644
index 6a78acb..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSPropertiesContentProvider.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 Manumitting Technologies, Inc.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Brian de Alwis (MT) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.css.spy;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
-import org.eclipse.e4.ui.css.core.engine.CSSEngine;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.widgets.Widget;
-
-public class CSSPropertiesContentProvider implements IStructuredContentProvider {
-
-	protected CSSEngine cssEngine;
-	protected CSSStylableElement input;
-
-	@Override
-	public void dispose() {
-		cssEngine = null;
-		input = null;
-	}
-
-	@Override
-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		if (newInput instanceof CSSStylableElement) {
-			this.input = (CSSStylableElement) newInput;
-			this.cssEngine = CssSpyPart.getCSSEngine(input.getNativeWidget());
-		} else if (newInput instanceof Widget) {
-			this.cssEngine = CssSpyPart.getCSSEngine(newInput);
-			this.input = (CSSStylableElement) cssEngine.getElement(newInput);
-		}
-	}
-
-	@Override
-	public Object[] getElements(Object inputElement) {
-		Collection<String> propertyNames = cssEngine.getCSSProperties(input);
-		List<CSSPropertyProvider> properties = new ArrayList<>(propertyNames.size());
-		for (String propertyName : propertyNames) {
-			properties.add(new CSSPropertyProvider(propertyName, input, cssEngine));
-		}
-		return properties.toArray();
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSPropertyProvider.java b/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSPropertyProvider.java
deleted file mode 100644
index eef0e42..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSPropertyProvider.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 Manumitting Technologies, Inc.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Brian de Alwis (MT) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.css.spy;
-
-import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
-import org.eclipse.e4.ui.css.core.engine.CSSEngine;
-import org.w3c.dom.css.CSSValue;
-
-/**
- * A getter and setter of a particular CSS property for a particular element.
- */
-public class CSSPropertyProvider {
-
-	private String propertyName;
-	private CSSStylableElement element;
-	private CSSEngine engine;
-
-	public CSSPropertyProvider(String propertyName, CSSStylableElement element, CSSEngine engine) {
-		this.propertyName = propertyName;
-		this.element = element;
-		this.engine = engine;
-	}
-
-	public String getPropertyName() {
-		return propertyName;
-	}
-
-	public String getValue() throws Exception {
-		return engine.retrieveCSSProperty(element, propertyName, "");
-	}
-
-	public void setValue(String value) throws Exception {
-		CSSValue v = engine.parsePropertyValue(value);
-		engine.applyCSSProperty(element, propertyName, v, "");
-	}
-
-	@Override
-	public String toString() {
-		return propertyName;
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSScratchPadPart.java b/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSScratchPadPart.java
deleted file mode 100644
index e235a8d..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CSSScratchPadPart.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package org.eclipse.e4.tools.css.spy;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.eclipse.e4.core.di.annotations.Optional;
-import org.eclipse.e4.ui.css.core.dom.ExtendedDocumentCSS;
-import org.eclipse.e4.ui.css.core.engine.CSSEngine;
-import org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngine;
-import org.eclipse.e4.ui.css.swt.theme.IThemeEngine;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.w3c.css.sac.CSSParseException;
-import org.w3c.dom.stylesheets.StyleSheet;
-import org.w3c.dom.stylesheets.StyleSheetList;
-
-@SuppressWarnings("restriction")
-public class CSSScratchPadPart {
-	@Inject
-	@Optional
-	private IThemeEngine themeEngine;
-
-	/*
-	 * public CSSScratchPadPart(Shell parentShell, IThemeEngine themeEngine) {
-	 * super(parentShell); this.themeEngine = themeEngine;
-	 * setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE/* | SWT.PRIMARY_MODAL
-	 */
-	// );
-	// setShellStyle(SWT.DIALOG_TRIM | SWT.MAX | SWT.RESIZE
-	// | getDefaultOrientation());
-	// }
-
-	/*
-	 * @Override protected void configureShell(Shell newShell) {
-	 * super.configureShell(newShell); newShell.setText("CSS Scratchpad"); }
-	 */
-
-	private static final int APPLY_ID = IDialogConstants.OK_ID + 100;
-	/**
-	 * Collection of buttons created by the <code>createButton</code> method.
-	 */
-	private HashMap<Integer, Button> buttons = new HashMap<>();
-
-	private Text cssText;
-	private Text exceptions;
-
-	@PostConstruct
-	protected Control createDialogArea(Composite parent) {
-
-		Composite outer = parent;
-		outer.setLayout(new GridLayout());
-		outer.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		SashForm sashForm = new SashForm(outer, SWT.VERTICAL);
-
-		cssText = new Text(sashForm, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
-
-		exceptions = new Text(sashForm, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY);
-
-		GridDataFactory.fillDefaults().grab(true, true).applyTo(sashForm);
-		sashForm.setWeights(new int[] { 80, 20 });
-
-		createButtonsForButtonBar(parent);
-		return outer;
-	}
-
-	private void createButtonsForButtonBar(Composite parent) {
-		createButton(parent, APPLY_ID, "Apply", true);
-		createButton(parent, IDialogConstants.OK_ID, "Close", false);
-		// createButton(parent, IDialogConstants.CANCEL_ID,
-		// IDialogConstants.CANCEL_LABEL, false);
-	}
-
-	protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
-		// increment the number of columns in the button bar
-		((GridLayout) parent.getLayout()).numColumns++;
-		Button button = new Button(parent, SWT.PUSH);
-		button.setText(label);
-		button.setFont(JFaceResources.getDialogFont());
-		button.setData(Integer.valueOf(id));
-		button.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent event) {
-				buttonPressed(((Integer) event.widget.getData()).intValue());
-			}
-		});
-		if (defaultButton) {
-			Shell shell = parent.getShell();
-			if (shell != null) {
-				shell.setDefaultButton(button);
-			}
-		}
-		buttons.put(Integer.valueOf(id), button);
-		// setButtonLayoutData(button);
-		return button;
-	}
-
-	protected void buttonPressed(int buttonId) {
-		switch (buttonId) {
-		case APPLY_ID:
-			applyCSS();
-			break;
-		default:
-			break;
-		}
-	}
-
-	private void applyCSS() {
-		if (themeEngine == null) {
-			exceptions.setText("No theme engine available!");
-			return;
-		}
-		long start = System.nanoTime();
-		exceptions.setText("");
-
-		StringBuilder sb = new StringBuilder();
-
-		// FIXME: expose these new protocols: resetCurrentTheme() and
-		// getCSSEngines()
-		((ThemeEngine) themeEngine).resetCurrentTheme();
-
-		int count = 0;
-		for (CSSEngine engine : ((ThemeEngine) themeEngine).getCSSEngines()) {
-			if (count++ > 0) {
-				sb.append("\n\n");
-			}
-			sb.append("Engine[").append(engine.getClass().getSimpleName()).append("]");
-			ExtendedDocumentCSS doc = (ExtendedDocumentCSS) engine.getDocumentCSS();
-			List<StyleSheet> sheets = new ArrayList<>();
-			StyleSheetList list = doc.getStyleSheets();
-			for (int i = 0; i < list.getLength(); i++) {
-				sheets.add(list.item(i));
-			}
-
-			try {
-				Reader reader = new StringReader(cssText.getText());
-				sheets.add(0, engine.parseStyleSheet(reader));
-				doc.removeAllStyleSheets();
-				for (StyleSheet sheet : sheets) {
-					doc.addStyleSheet(sheet);
-				}
-				engine.reapply();
-
-				long nanoDiff = System.nanoTime() - start;
-				sb.append("\nTime: ").append(nanoDiff / 1000000).append("ms");
-			} catch (CSSParseException e) {
-				sb.append("\nError: line ").append(e.getLineNumber()).append(" col ").append(e.getColumnNumber())
-						.append(": ").append(e.getLocalizedMessage());
-			} catch (IOException e) {
-				sb.append("\nError: ").append(e.getLocalizedMessage());
-			}
-		}
-		exceptions.setText(sb.toString());
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CssSpyPart.java b/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CssSpyPart.java
deleted file mode 100644
index 8a97413..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/CssSpyPart.java
+++ /dev/null
@@ -1,912 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Manumitting Technologies, Inc.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Brian de Alwis (MT) - initial API and implementation
- *     Olivier Prouvost <olivier.prouvost@opcoach.com> - Bug 428903
- *******************************************************************************/
-package org.eclipse.e4.tools.css.spy;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
-import org.eclipse.e4.ui.css.core.engine.CSSEngine;
-import org.eclipse.e4.ui.css.swt.dom.WidgetElement;
-import org.eclipse.e4.ui.css.swt.engine.CSSSWTEngineImpl;
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-import org.eclipse.e4.ui.services.IServiceConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.layout.GridLayoutFactory;
-import org.eclipse.jface.layout.TableColumnLayout;
-import org.eclipse.jface.layout.TreeColumnLayout;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.ColumnViewerEditor;
-import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
-import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
-import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.EditingSupport;
-import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.TableViewerEditor;
-import org.eclipse.jface.viewers.TableViewerFocusCellManager;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.TreeViewerColumn;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.swt.widgets.Widget;
-import org.w3c.css.sac.CSSParseException;
-import org.w3c.css.sac.SelectorList;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.css.CSSStyleDeclaration;
-import org.w3c.dom.css.CSSValue;
-
-@SuppressWarnings("restriction")
-public class CssSpyPart {
-
-	@Inject
-	@Named(IServiceConstants.ACTIVE_SHELL)
-	private Shell activeShell;
-
-	/**
-	 * @return the CSS element corresponding to the argument, or null if none
-	 */
-	public static CSSStylableElement getCSSElement(Object o) {
-		if (o instanceof CSSStylableElement) {
-			return (CSSStylableElement) o;
-		} else {
-			CSSEngine engine = getCSSEngine(o);
-			if (engine != null) {
-				return (CSSStylableElement) engine.getElement(o);
-			}
-		}
-		return null;
-	}
-
-	/** @return the CSS engine governing the argument, or null if none */
-	public static CSSEngine getCSSEngine(Object o) {
-		CSSEngine engine = null;
-		if (o instanceof CSSStylableElement) {
-			CSSStylableElement element = (CSSStylableElement) o;
-			engine = WidgetElement.getEngine((Widget) element.getNativeWidget());
-		}
-		if (engine == null && o instanceof Widget) {
-			if (((Widget) o).isDisposed()) {
-				return null;
-			}
-			engine = WidgetElement.getEngine((Widget) o);
-		}
-		if (engine == null && Display.getCurrent() != null) {
-			engine = new CSSSWTEngineImpl(Display.getCurrent());
-		}
-		return engine;
-	}
-
-	@Inject
-	private Display display;
-
-	private Widget specimen; // specimen (can be reused if reopened)
-
-	@Inject
-	IEclipseContext mpartContext; // Used to remember of last specimen.
-
-	private Widget shown;
-
-	private TreeViewer widgetTreeViewer;
-	private WidgetTreeProvider widgetTreeProvider;
-	private Button followSelection;
-	private Button showAllShells;
-	private TableViewer cssPropertiesViewer;
-	private Text cssRules;
-
-	private List<Shell> highlights = new LinkedList<>();
-	private List<Region> highlightRegions = new LinkedList<>();
-	private Text cssSearchBox;
-	private Button showUnsetProperties;
-	private Button showCssFragment;
-
-	protected ViewerFilter unsetPropertyFilter = new ViewerFilter() {
-
-		@Override
-		public boolean select(Viewer viewer, Object parentElement, Object element) {
-			if (element instanceof CSSPropertyProvider) {
-				try {
-					return ((CSSPropertyProvider) element).getValue() != null;
-				} catch (Exception e) {
-					return false;
-				}
-			}
-			return false;
-		}
-	};
-
-	private Composite outer;
-
-	public Widget getSpecimen() {
-		return specimen;
-	}
-
-	private boolean isLive() {
-		return specimen == null;
-	}
-
-	public void setSpecimen(Widget specimen) {
-		this.specimen = specimen;
-		update();
-	}
-
-	private Widget getActiveSpecimen() {
-		if (specimen != null) {
-			return specimen;
-		}
-		return display.getCursorControl();
-	}
-
-	protected void update() {
-		if (activeShell == null) {
-			return;
-		}
-		Widget current = getActiveSpecimen();
-		if (shown == current) {
-			return;
-		}
-		shown = current;
-
-		CSSEngine engine = getCSSEngine(shown);
-		CSSStylableElement element = (CSSStylableElement) engine.getElement(shown);
-		if (element == null) {
-			return;
-		}
-
-		updateWidgetTreeInput();
-		revealAndSelect(Collections.singletonList(shown));
-	}
-
-	private <T> void revealAndSelect(List<T> elements) {
-		widgetTreeViewer.setSelection(new StructuredSelection(elements), true);
-	}
-
-	private void updateForWidgetSelection(ISelection sel) {
-		disposeHighlights();
-		if (sel.isEmpty()) {
-			return;
-		}
-		StructuredSelection selection = (StructuredSelection) sel;
-		for (Object s : selection.toList()) {
-			if (s instanceof Widget) {
-				highlightWidget((Widget) s);
-			}
-		}
-		populate(selection.size() == 1 && selection.getFirstElement() instanceof Widget
-				? (Widget) selection.getFirstElement() : null);
-	}
-
-	private void updateWidgetTreeInput() {
-		if (showAllShells.getSelection()) {
-			widgetTreeViewer.setInput(display);
-		} else {
-			widgetTreeViewer.setInput(new Object[] { shown instanceof Control ? ((Control) shown).getShell() : shown });
-		}
-		performCSSSearch(new NullProgressMonitor());
-	}
-
-	protected void populate(Widget selected) {
-		if (selected == null) {
-			cssPropertiesViewer.setInput(null);
-			cssRules.setText("");
-			return;
-		}
-		if (selected.isDisposed()) {
-			cssPropertiesViewer.setInput(null);
-			cssRules.setText("*DISPOSED*");
-			return;
-		}
-
-		CSSStylableElement element = getCSSElement(selected);
-		if (element == null) {
-			cssPropertiesViewer.setInput(null);
-			cssRules.setText("Not a stylable element");
-			return;
-		}
-
-		cssPropertiesViewer.setInput(selected);
-
-		StringBuilder sb = new StringBuilder();
-		CSSEngine engine = getCSSEngine(element);
-		CSSStyleDeclaration decl = engine.getViewCSS().getComputedStyle(element, null);
-
-		if (element.getCSSStyle() != null) {
-			sb.append("\nCSS Inline Style(s):\n  ");
-			Util.join(sb, element.getCSSStyle().split(";"), ";\n  ");
-		}
-
-		if (decl != null) {
-			sb.append("\n\nCSS Properties:\n");
-			try {
-				if (decl != null) {
-					sb.append(decl.getCssText());
-				}
-			} catch (Exception e) {
-				sb.append(e);
-			}
-		}
-		if (element.getStaticPseudoInstances().length > 0) {
-			sb.append("\n\nStatic Pseudoinstances:\n  ");
-			Util.join(sb, element.getStaticPseudoInstances(), "\n  ");
-		}
-
-		if (element.getCSSClass() != null) {
-			sb.append("\n\nCSS Classes:\n  ");
-			Util.join(sb, element.getCSSClass().split(" +"), "\n  ");
-		}
-
-		if (element.getCSSId() != null) {
-			sb.append("\n\nCSS ID:\n  ");
-			Util.join(sb, element.getCSSId().split(" +"), "\n  ");
-		}
-
-		if (element.getAttribute("style") != null) {
-			sb.append("\n\nSWT Style Bits:\n  ");
-			Util.join(sb, element.getAttribute("style").split(" +"), "\n  ");
-		}
-
-		sb.append("\n\nCSS Class Element:\n  ").append(element.getClass().getName());
-
-		// this is useful for diagnosing issues
-		if (element.getNativeWidget() instanceof Shell && ((Shell) element.getNativeWidget()).getParent() != null) {
-			Shell nw = (Shell) element.getNativeWidget();
-			sb.append("\n\nShell parent: ").append(nw.getParent());
-		}
-		if (element.getNativeWidget() instanceof Composite) {
-			Composite nw = (Composite) element.getNativeWidget();
-			sb.append("\n\nSWT Layout: ").append(nw.getLayout());
-		}
-		Rectangle bounds = getBounds(selected);
-		if (bounds != null) {
-			sb.append("\nBounds: x=").append(bounds.x).append(" y=").append(bounds.y);
-			sb.append(" h=").append(bounds.height).append(" w=").append(bounds.width);
-		}
-
-		if (element.getNativeWidget() instanceof Widget) {
-			Widget w = (Widget) element.getNativeWidget();
-			if (w.getData() != null) {
-				sb.append("\nWidget data: ").append(w.getData());
-			}
-			if (w.getData(SWT.SKIN_ID) != null) {
-				sb.append("\nWidget Skin ID (").append(SWT.SKIN_ID).append("): ").append(w.getData(SWT.SKIN_ID));
-			}
-			if (w.getData(SWT.SKIN_CLASS) != null) {
-				sb.append("\nWidget Skin Class (").append(SWT.SKIN_CLASS).append("): ")
-						.append(w.getData(SWT.SKIN_CLASS));
-			}
-		}
-
-		cssRules.setText(sb.toString().trim());
-
-		disposeHighlights();
-		highlightWidget(selected);
-	}
-
-	private Shell getShell(Widget widget) {
-		if (widget instanceof Control) {
-			return ((Control) widget).getShell();
-		}
-		return null;
-	}
-
-	/** Add a highlight-rectangle for the selected widget */
-	private void highlightWidget(Widget selected) {
-		if (selected == null || selected.isDisposed()) {
-			return;
-		}
-
-		Rectangle bounds = getBounds(selected); // relative to absolute display,
-												// not the widget
-		if (bounds == null /* || bounds.height == 0 || bounds.width == 0 */) {
-			return;
-		}
-		// emulate a transparent background as per SWT Snippet180
-		Shell selectedShell = getShell(selected);
-		// create the highlight; want it to appear on top
-		Shell highlight = new Shell(selectedShell, SWT.NO_TRIM | SWT.MODELESS | SWT.NO_FOCUS | SWT.ON_TOP);
-		highlight.setBackground(display.getSystemColor(SWT.COLOR_RED));
-		// set CSS ID for the dark theme
-		highlight.setData("org.eclipse.e4.ui.css.id", "css-spy");
-		Region highlightRegion = new Region();
-		highlightRegion.add(0, 0, 1, bounds.height + 2);
-		highlightRegion.add(0, 0, bounds.width + 2, 1);
-		highlightRegion.add(bounds.width + 1, 0, 1, bounds.height + 2);
-		highlightRegion.add(0, bounds.height + 1, bounds.width + 2, 1);
-		highlight.setRegion(highlightRegion);
-		highlight.setBounds(bounds.x - 1, bounds.y - 1, bounds.width + 2, bounds.height + 2);
-		highlight.setEnabled(false);
-		highlight.setVisible(true); // not open(): setVisible() prevents taking
-									// focus
-
-		highlights.add(highlight);
-		highlightRegions.add(highlightRegion);
-	}
-
-	private void disposeHighlights() {
-		for (Shell highlight : highlights) {
-			highlight.dispose();
-		}
-		highlights.clear();
-		for (Region region : highlightRegions) {
-			region.dispose();
-		}
-		highlightRegions.clear();
-	}
-
-	private Rectangle getBounds(Widget widget) {
-		if (widget instanceof Shell) {
-			// Shell bounds are already in display coordinates
-			return ((Shell) widget).getBounds();
-		} else if (widget instanceof Control) {
-			Control control = (Control) widget;
-			Rectangle bounds = control.getBounds();
-			return control.getDisplay().map(control.getParent(), null, bounds);
-		} else if (widget instanceof ToolItem) {
-			ToolItem item = (ToolItem) widget;
-			Rectangle bounds = item.getBounds();
-			return item.getDisplay().map(item.getParent(), null, bounds);
-		} else if (widget instanceof CTabItem) {
-			CTabItem item = (CTabItem) widget;
-			Rectangle bounds = item.getBounds();
-			return item.getDisplay().map(item.getParent(), null, bounds);
-		}
-		// FIXME: figure out how to map items to a position
-		return null;
-	}
-
-	/**
-	 * Create contents of the spy.
-	 *
-	 * @param parent
-	 */
-	@PostConstruct
-	protected Control createDialogArea(Composite parent, IEclipseContext ctx) {
-		outer = parent;
-		outer.setLayout(new GridLayout());
-		outer.setLayoutData(new GridData(GridData.FILL_BOTH));
-
-		Composite top = new Composite(outer, SWT.NONE);
-		GridLayoutFactory.swtDefaults().numColumns(3).applyTo(top);
-		cssSearchBox = new Text(top, SWT.SEARCH | SWT.ICON_SEARCH | SWT.ICON_CANCEL);
-		cssSearchBox.setMessage("CSS Selector");
-		cssSearchBox.setToolTipText("Highlight matching widgets");
-		GridDataFactory.fillDefaults().grab(true, false).applyTo(cssSearchBox);
-
-		followSelection = new Button(top, SWT.CHECK);
-		followSelection.setSelection(true);
-		followSelection.setText("Follow UI Selection");
-		GridDataFactory.swtDefaults().applyTo(followSelection);
-
-		showAllShells = new Button(top, SWT.CHECK);
-		showAllShells.setText("All shells");
-		GridDataFactory.swtDefaults().applyTo(showAllShells);
-
-		GridDataFactory.fillDefaults().applyTo(top);
-
-		SashForm sashForm = new SashForm(outer, SWT.VERTICAL);
-		sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-
-		// / THE WIDGET TREE
-		Composite widgetsComposite = new Composite(sashForm, SWT.NONE);
-
-		widgetTreeViewer = new TreeViewer(widgetsComposite, SWT.BORDER | SWT.MULTI);
-		widgetTreeProvider = new WidgetTreeProvider();
-		widgetTreeViewer.setContentProvider(widgetTreeProvider);
-		widgetTreeViewer.setAutoExpandLevel(0);
-		widgetTreeViewer.getTree().setLinesVisible(true);
-		widgetTreeViewer.getTree().setHeaderVisible(true);
-		ColumnViewerToolTipSupport.enableFor(widgetTreeViewer);
-
-		TreeViewerColumn widgetTypeColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
-		widgetTypeColumn.getColumn().setWidth(100);
-		widgetTypeColumn.getColumn().setText("Widget");
-		widgetTypeColumn.setLabelProvider(new ColumnLabelProvider() {
-			@Override
-			public String getText(Object item) {
-				CSSStylableElement element = CssSpyPart.getCSSElement(item);
-				return element.getLocalName() + " (" + element.getNamespaceURI() + ")";
-			}
-		});
-
-		TreeViewerColumn widgetClassColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
-		widgetClassColumn.getColumn().setText("CSS Class");
-		widgetClassColumn.getColumn().setWidth(100);
-		widgetClassColumn.setLabelProvider(new ColumnLabelProvider() {
-			@Override
-			public String getText(Object item) {
-				CSSStylableElement element = CssSpyPart.getCSSElement(item);
-				if (element.getCSSClass() == null) {
-					return null;
-				}
-				String classes[] = element.getCSSClass().split(" +");
-				return classes.length <= 1 ? classes[0] : classes[0] + " (+" + (classes.length - 1) + " others)";
-			}
-
-			@Override
-			public String getToolTipText(Object item) {
-				CSSStylableElement element = CssSpyPart.getCSSElement(item);
-				if (element == null) {
-					return null;
-				}
-				StringBuilder sb = new StringBuilder();
-				sb.append(element.getLocalName()).append(" (").append(element.getNamespaceURI()).append(")");
-				if (element.getCSSClass() != null) {
-					sb.append("\nClasses:\n  ");
-					Util.join(sb, element.getCSSClass().split(" +"), "\n  ");
-				}
-				return sb.toString();
-			}
-		});
-
-		TreeViewerColumn widgetIdColumn = new TreeViewerColumn(widgetTreeViewer, SWT.NONE);
-		widgetIdColumn.getColumn().setWidth(100);
-		widgetIdColumn.getColumn().setText("CSS Id");
-		widgetIdColumn.setLabelProvider(new ColumnLabelProvider() {
-			@Override
-			public String getText(Object item) {
-				CSSStylableElement element = CssSpyPart.getCSSElement(item);
-				return element.getCSSId();
-			}
-		});
-
-		TreeColumnLayout widgetsTableLayout = new TreeColumnLayout();
-		widgetsTableLayout.setColumnData(widgetTypeColumn.getColumn(), new ColumnWeightData(50));
-		widgetsTableLayout.setColumnData(widgetIdColumn.getColumn(), new ColumnWeightData(40));
-		widgetsTableLayout.setColumnData(widgetClassColumn.getColumn(), new ColumnWeightData(40));
-		widgetsComposite.setLayout(widgetsTableLayout);
-
-		// / HEADERS
-		Composite container = new Composite(sashForm, SWT.NONE);
-		container.setLayout(new GridLayout(2, true));
-
-		Label lblCssProperties = new Label(container, SWT.NONE);
-		lblCssProperties.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
-		lblCssProperties.setText("CSS Properties");
-
-		Label lblCssRules = new Label(container, SWT.NONE);
-		lblCssRules.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
-		lblCssRules.setText("CSS Rules");
-
-		// // THE CSS PROPERTIES TABLE
-		Composite propsComposite = new Composite(container, SWT.BORDER);
-		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
-		gridData.minimumHeight = 50;
-		propsComposite.setLayoutData(gridData);
-
-		cssPropertiesViewer = new TableViewer(propsComposite,
-				SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
-		cssPropertiesViewer.setContentProvider(new CSSPropertiesContentProvider());
-		cssPropertiesViewer.getTable().setLinesVisible(true);
-		cssPropertiesViewer.getTable().setHeaderVisible(true);
-		cssPropertiesViewer.setComparator(new ViewerComparator());
-
-		final TextCellEditor textCellEditor = new TextCellEditor(cssPropertiesViewer.getTable());
-		TableViewerEditor.create(cssPropertiesViewer,
-				new TableViewerFocusCellManager(cssPropertiesViewer,
-						new FocusCellOwnerDrawHighlighter(cssPropertiesViewer)),
-				new ColumnViewerEditorActivationStrategy(cssPropertiesViewer),
-				ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
-						| ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
-
-		TableViewerColumn propName = new TableViewerColumn(cssPropertiesViewer, SWT.NONE);
-		propName.getColumn().setWidth(100);
-		propName.getColumn().setText("Property");
-		propName.setLabelProvider(new ColumnLabelProvider() {
-			@Override
-			public String getText(Object element) {
-				return ((CSSPropertyProvider) element).getPropertyName();
-			}
-		});
-
-		TableViewerColumn propValue = new TableViewerColumn(cssPropertiesViewer, SWT.NONE);
-		propValue.getColumn().setWidth(100);
-		propValue.getColumn().setText("Value");
-		propValue.setLabelProvider(new ColumnLabelProvider() {
-			@Override
-			public String getText(Object element) {
-				try {
-					return ((CSSPropertyProvider) element).getValue();
-				} catch (Exception e) {
-					System.err.println("Error fetching property: " + element + ": " + e);
-					return null;
-				}
-			}
-		});
-		propValue.setEditingSupport(new EditingSupport(cssPropertiesViewer) {
-			@Override
-			protected CellEditor getCellEditor(Object element) {
-				// do the fancy footwork here to return an appropriate
-				// editor to
-				// the value-type
-				return textCellEditor;
-			}
-
-			@Override
-			protected boolean canEdit(Object element) {
-				return true;
-			}
-
-			@Override
-			protected Object getValue(Object element) {
-				try {
-					String value = ((CSSPropertyProvider) element).getValue();
-					return value == null ? "" : value;
-				} catch (Exception e) {
-					return "";
-				}
-			}
-
-			@Override
-			protected void setValue(Object element, Object value) {
-				try {
-					if (value == null || ((String) value).trim().length() == 0) {
-						return;
-					}
-					CSSPropertyProvider provider = (CSSPropertyProvider) element;
-					provider.setValue((String) value);
-				} catch (Exception e) {
-					MessageDialog.openError(activeShell, "Error", "Unable to set property:\n\n" + e.getMessage());
-				}
-				cssPropertiesViewer.update(element, null);
-			}
-		});
-
-		TableColumnLayout propsTableLayout = new TableColumnLayout();
-		propsTableLayout.setColumnData(propName.getColumn(), new ColumnWeightData(50));
-		propsTableLayout.setColumnData(propValue.getColumn(), new ColumnWeightData(50));
-		propsComposite.setLayout(propsTableLayout);
-
-		// / THE CSS RULES
-		cssRules = new Text(container, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);
-		cssRules.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
-
-		// / THE CSS PROPERTIES TABLE (again)
-		showUnsetProperties = new Button(container, SWT.CHECK);
-		showUnsetProperties.setText("Show unset properties");
-		showCssFragment = new Button(container, SWT.PUSH);
-		showCssFragment.setText("Show CSS fragment");
-		showCssFragment.setToolTipText("Generates CSS rule block for the selected widget");
-
-		// and for balance
-		new Label(container, SWT.NONE);
-
-		// / The listeners
-
-		cssSearchBox.addModifyListener(new ModifyListener() {
-			private Runnable updater;
-			private IProgressMonitor monitor;
-
-			@Override
-			public void modifyText(ModifyEvent e) {
-				if (monitor != null) {
-					monitor.setCanceled(false);
-				}
-				display.timerExec(200, updater = new Runnable() {
-					@Override
-					public void run() {
-						if (updater == this) {
-							performCSSSearch(monitor = new NullProgressMonitor());
-						}
-					}
-				});
-			}
-		});
-		cssSearchBox.addKeyListener(new KeyAdapter() {
-			@Override
-			public void keyPressed(KeyEvent e) {
-				if (e.keyCode == SWT.ARROW_DOWN && (e.stateMask & SWT.MODIFIER_MASK) == 0) {
-					widgetTreeViewer.getControl().setFocus();
-				}
-			}
-		});
-
-		widgetTreeViewer.addSelectionChangedListener(event -> {
-			updateForWidgetSelection(event.getSelection());
-			showCssFragment.setEnabled(!event.getSelection().isEmpty());
-		});
-		if (isLive()) {
-			container.addMouseMoveListener(e -> {
-				if (followSelection.getSelection()) {
-					update();
-				}
-			}
-			);
-		}
-
-		showAllShells.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				updateWidgetTreeInput();
-			}
-		});
-
-		outer.addDisposeListener(e -> dispose());
-
-		showUnsetProperties.setSelection(true);
-		showUnsetProperties.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				if (showUnsetProperties.getSelection()) {
-					cssPropertiesViewer.removeFilter(unsetPropertyFilter);
-				} else {
-					cssPropertiesViewer.addFilter(unsetPropertyFilter);
-				}
-			}
-		});
-
-		showCssFragment.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				showCssFragment();
-			}
-
-			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-				widgetSelected(e);
-			}
-		});
-
-		sashForm.setWeights(new int[] { 50, 50 });
-		widgetTreeViewer.getControl().setFocus();
-
-		return outer;
-	}
-
-	/**
-	 * This method listen to current part and adapt the contents of spy part.
-	 */
-	@Inject
-	protected void reactOnActivate(@Named(IServiceConstants.ACTIVE_PART) MPart p, MPart cssPart,
-			@Named(IServiceConstants.ACTIVE_SHELL) Shell s) {
-		if (followSelection == null || !followSelection.getSelection()) {
-			return;
-		}
-		if (outer == null) {
-			// Do nothing if no UI created.
-			return;
-		}
-		activeShell = s;
-
-		// Check if control is in the css spy part shell.
-		Control control = display.getCursorControl();
-
-		Shell controlShell = (control == null) ? display.getActiveShell() : control.getShell();
-		Shell spyPartShell = outer.getShell();
-
-		if (p != cssPart) {
-			// Must remove the highlights if selected
-			disposeHighlights();
-
-		} else if (spyPartShell != controlShell) {
-			// A widget has been selected in another shell.. We can display the
-			// corresponding control as a specimen
-			shown = null;
-			setSpecimen(control);
-		}
-
-	}
-
-	protected void showCssFragment() {
-		if (!(widgetTreeViewer.getSelection() instanceof IStructuredSelection)
-				|| widgetTreeViewer.getSelection().isEmpty()) {
-			return;
-		}
-
-		StringBuilder sb = new StringBuilder();
-		for (Object o : ((IStructuredSelection) widgetTreeViewer.getSelection()).toArray()) {
-			if (o instanceof Widget) {
-				if (sb.length() > 0) {
-					sb.append('\n');
-				}
-				addCssFragment((Widget) o, sb);
-			}
-		}
-		TextPopupDialog tpd = new TextPopupDialog(widgetTreeViewer.getControl().getShell(), "CSS", sb.toString(), true,
-				"Escape to dismiss");
-		tpd.open();
-	}
-
-	private void addCssFragment(Widget w, StringBuilder sb) {
-		CSSStylableElement element = getCSSElement(w);
-		if (element == null) {
-			return;
-		}
-
-		sb.append(element.getLocalName());
-		if (element.getCSSId() != null) {
-			sb.append("#").append(element.getCSSId());
-		}
-		sb.append(" {");
-
-		CSSEngine engine = getCSSEngine(element);
-		// we first check the viewCSS and then the property values
-		CSSStyleDeclaration decl = engine.getViewCSS().getComputedStyle(element, null);
-
-		List<String> propertyNames = new ArrayList<>(engine.getCSSProperties(element));
-		Collections.sort(propertyNames);
-
-		int count = 0;
-
-		// First list the generated properties
-		for (Iterator<String> iter = propertyNames.iterator(); iter.hasNext();) {
-			String propertyName = iter.next();
-			String genValue = trim(engine.retrieveCSSProperty(element, propertyName, ""));
-			String declValue = null;
-
-			if (genValue == null) {
-				continue;
-			}
-
-			if (decl != null) {
-				CSSValue cssValue = decl.getPropertyCSSValue(propertyName);
-				if (cssValue != null) {
-					declValue = trim(cssValue.getCssText());
-				}
-			}
-			if (count == 0) {
-				sb.append("\n  /* actual values */");
-			}
-			sb.append("\n  ").append(propertyName).append(": ").append(genValue).append(";");
-			if (declValue != null) {
-				sb.append("\t/* declared in CSS: ").append(declValue).append(" */");
-			}
-			count++;
-			iter.remove(); // remove so we don't re-report below
-		}
-
-		// then list any declared properties; generated properties already
-		// removed
-		if (decl != null) {
-			int declCount = 0;
-			for (String propertyName : propertyNames) {
-				String declValue = null;
-				CSSValue cssValue = decl.getPropertyCSSValue(propertyName);
-				if (cssValue != null) {
-					declValue = trim(cssValue.getCssText());
-				}
-				if (declValue == null) {
-					continue;
-				}
-				if (declCount == 0) {
-					sb.append("\n\n  /* declared in CSS rules */");
-				}
-				sb.append("\n  ").append(propertyName).append(": ").append(declValue).append(";");
-				count++;
-				declCount++;
-			}
-		}
-		sb.append(count > 0 ? "\n}" : "}");
-	}
-
-	/** Trim the string; return null if empty */
-	private String trim(String s) {
-		if (s == null) {
-			return null;
-		}
-		s = s.trim();
-		return s.length() > 0 ? s : null;
-	}
-
-	protected void performCSSSearch(IProgressMonitor progress) {
-		List<Widget> widgets = new ArrayList<>();
-		performCSSSearch(progress, cssSearchBox.getText(), widgets);
-		if (!progress.isCanceled()) {
-			revealAndSelect(widgets);
-		}
-	}
-
-	private void performCSSSearch(IProgressMonitor monitor, String text, Collection<Widget> results) {
-		if (text.trim().length() == 0) {
-			return;
-		}
-		widgetTreeViewer.collapseAll();
-		Object[] roots = widgetTreeProvider.getElements(widgetTreeViewer.getInput());
-		monitor.beginTask("Searching for \"" + text + "\"", roots.length * 10);
-		for (Object root : roots) {
-			if (monitor.isCanceled()) {
-				return;
-			}
-
-			CSSStylableElement element = getCSSElement(root);
-			if (element == null) {
-				continue;
-			}
-
-			CSSEngine engine = getCSSEngine(root);
-			try {
-				SelectorList selectors = engine.parseSelectors(text);
-				monitor.worked(2);
-				processCSSSearch(new SubProgressMonitor(monitor, 8), engine, selectors, element, null, results);
-			} catch (CSSParseException | IOException e) {
-				System.out.println(e.toString());
-			}
-		}
-		monitor.done();
-	}
-
-	private void processCSSSearch(IProgressMonitor monitor, CSSEngine engine, SelectorList selectors,
-			CSSStylableElement element, String pseudo, Collection<Widget> results) {
-		if (monitor.isCanceled()) {
-			return;
-		}
-		NodeList children = element.getChildNodes();
-		monitor.beginTask("Searching", 5 + 5 * children.getLength());
-		boolean matched = false;
-		for (int i = 0; i < selectors.getLength(); i++) {
-			if (matched = engine.matches(selectors.item(i), element, pseudo)) {
-				break;
-			}
-		}
-		if (matched) {
-			results.add((Widget) element.getNativeWidget());
-		}
-		monitor.worked(5);
-		for (int i = 0; i < children.getLength(); i++) {
-			if (monitor.isCanceled()) {
-				return;
-			}
-			processCSSSearch(new SubProgressMonitor(monitor, 5), engine, selectors,
-					(CSSStylableElement) children.item(i), pseudo, results);
-		}
-		monitor.done();
-	}
-
-	protected void dispose() {
-		disposeHighlights();
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/TextPopupDialog.java b/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/TextPopupDialog.java
deleted file mode 100644
index 32174c3..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/TextPopupDialog.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.eclipse.e4.tools.css.spy;
-
-import org.eclipse.jface.dialogs.PopupDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-public class TextPopupDialog extends PopupDialog {
-
-	private String content;
-	private boolean contentEditable;
-
-	public TextPopupDialog(Shell shell, String title, String content, boolean editable, String infoText) {
-		super(shell, SWT.RESIZE | SWT.ON_TOP, true, true, true, false, false, title, infoText);
-		this.content = content;
-		this.contentEditable = editable;
-	}
-
-	@Override
-	protected Control createDialogArea(Composite parent) {
-		Composite container = (Composite) super.createDialogArea(parent);
-		int styleBits = SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL;
-		if (!contentEditable) {
-			styleBits |= SWT.READ_ONLY;
-		}
-		Text textWidget = new Text(container, styleBits);
-		textWidget.setText(content);
-		return container;
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/Util.java b/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/Util.java
deleted file mode 100644
index 9ff2b11..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/Util.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2016 Manumitting Technologies, Inc.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Brian de Alwis (MT) - initial API and implementation
- *     Lars Vogel <Lars.Vogel@vogella.com> - Bug 509506
- *******************************************************************************/
-package org.eclipse.e4.tools.css.spy;
-
-public class Util {
-
-	public static void join(StringBuilder sb, String[] elements, String glue) {
-		for (int i = 0; i < elements.length; i++) {
-			sb.append(elements[i]);
-			if (i < elements.length - 1) {
-				sb.append(glue);
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/WidgetTreeProvider.java b/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/WidgetTreeProvider.java
deleted file mode 100644
index 9b2cef0..0000000
--- a/bundles/org.eclipse.e4.tools.css.spy/src/org/eclipse/e4/tools/css/spy/WidgetTreeProvider.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 Manumitting Technologies, Inc.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Brian de Alwis (MT) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.css.spy;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.e4.ui.css.core.dom.CSSStylableElement;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolItem;
-import org.w3c.dom.NodeList;
-
-public class WidgetTreeProvider implements ITreeContentProvider {
-	private static final Object[] EMPTY_ARRAY = new Object[0];
-
-	@Override
-	public Object[] getElements(Object inputElement) {
-		if (inputElement instanceof Object[]) {
-			return (Object[]) inputElement;
-		} else if (inputElement instanceof Collection<?>) {
-			return ((Collection<?>) inputElement).toArray();
-		}
-		return getChildren(inputElement);
-	}
-
-	@Override
-	public Object[] getChildren(Object parentElement) {
-		if (parentElement instanceof Display) {
-			List<Shell> shells = new ArrayList<>();
-			for (Shell s : ((Display) parentElement).getShells()) {
-				if (!s.isDisposed()) {
-					shells.add(s);
-				}
-			}
-			return shells.toArray();
-		}
-		CSSStylableElement element = CssSpyPart.getCSSElement(parentElement);
-		if (element == null) {
-			return EMPTY_ARRAY;
-		}
-		NodeList kids = element.getChildNodes();
-		ArrayList<Object> children = new ArrayList<>(kids.getLength());
-		for (int i = 0; i < kids.getLength(); i++) {
-			children.add(((CSSStylableElement) kids.item(i)).getNativeWidget());
-		}
-		return children.toArray();
-	}
-
-	@Override
-	public Object getParent(Object element) {
-		if (element instanceof Control) {
-			Control control = (Control) element;
-			return control.isDisposed() ? null : control.getParent();
-		} else if (element instanceof CTabItem) {
-			return ((CTabItem) element).getParent();
-		} else if (element instanceof ToolItem) {
-			return ((ToolItem) element).getParent();
-		}
-		return null;
-	}
-
-	@Override
-	public boolean hasChildren(Object element) {
-		return getChildren(element).length > 0;
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.classpath b/bundles/org.eclipse.e4.tools.emf.ui.script.js/.classpath
deleted file mode 100644
index ad32c83..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?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.6"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.project b/bundles/org.eclipse.e4.tools.emf.ui.script.js/.project
deleted file mode 100644
index 84e8de7..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.emf.ui.script.js</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ds.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.settings/org.eclipse.core.runtime.prefs b/bundles/org.eclipse.e4.tools.emf.ui.script.js/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.e4.tools.emf.ui.script.js/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 0eedf3d..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-#Wed Mar 09 00:55:47 CET 2011
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.emf.ui.script.js/META-INF/MANIFEST.MF
deleted file mode 100644
index 99e8a9c..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,22 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Js
-Bundle-SymbolicName: org.eclipse.e4.tools.emf.ui.script.js;singleton:=true
-Bundle-Version: 0.12.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Require-Bundle: org.eclipse.e4.tools.emf.ui;bundle-version="0.9.0",
- org.eclipse.jface;bundle-version="3.7.0",
- org.mozilla.javascript;bundle-version="1.7.2",
- org.eclipse.e4.ui.services;bundle-version="0.9.1",
- org.eclipse.e4.core.contexts;bundle-version="0.9.0",
- org.eclipse.e4.core.services;bundle-version="0.9.1",
- org.eclipse.e4.core.di;bundle-version="0.9.0",
- org.eclipse.osgi;bundle-version="3.7.0",
- org.eclipse.jface.text;bundle-version="3.7.0",
- org.eclipse.e4.tools.services;bundle-version="0.11.0"
-Bundle-ActivationPolicy: lazy
-Service-Component: OSGI-INF/resourceprovider.xml
-Import-Package: javax.inject;version="1.0.0"
-Export-Package: org.eclipse.e4.tools.emf.ui.script.js;x-internal:=true,
- org.eclipse.e4.tools.emf.ui.script.js.text;x-internal:=true,
- org.eclipse.e4.tools.emf.ui.script.js.text.scanners;x-internal:=true
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/OSGI-INF/resourceprovider.xml b/bundles/org.eclipse.e4.tools.emf.ui.script.js/OSGI-INF/resourceprovider.xml
deleted file mode 100644
index 51ac612..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/OSGI-INF/resourceprovider.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.e4.tools.emf.ui.script.js">
-   <implementation class="org.eclipse.e4.tools.emf.ui.script.js.ResourceProvider"/>
-   <service>
-      <provide interface="org.eclipse.e4.tools.services.IResourceProviderService"/>
-   </service>
-   <properties entry="OSGI-INF/resources.properties"/>
-</scr:component>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/OSGI-INF/resources.properties b/bundles/org.eclipse.e4.tools.emf.ui.script.js/OSGI-INF/resources.properties
deleted file mode 100644
index 3265af2..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/OSGI-INF/resources.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-IMG_org.eclipse.e4.tools.emf.ui.script.js.wizban_javascript = /icons/full/wizban/newsbook_wiz.png
-
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_multi_line_comment = rgb(102,153,102)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_single_line_comment = rgb(102,153,102)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_string = rgb(51,0,255)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_default = rgb(51,102,204)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_keyword = rgb(51,102,204)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_link = rgb(255,0,255)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_tag = rgb(255,255,0)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_comment_task_tag = rgb(255,100,0)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_keyword = rgb(153,51,102)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_default = rgb(0,0,0)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_keyword_return = rgb(153,51,102)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_operator = rgb(0,0,0)
-COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_bracket = rgb(0,0,0)
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/build.properties b/bundles/org.eclipse.e4.tools.emf.ui.script.js/build.properties
deleted file mode 100644
index bbb39d9..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               OSGI-INF/,\
-               icons/
-source.. = src/
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/forceQualifierUpdate.txt b/bundles/org.eclipse.e4.tools.emf.ui.script.js/forceQualifierUpdate.txt
deleted file mode 100644
index 396f087..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/forceQualifierUpdate.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# To force a version qualifier update add the bug here
-Bug 403237 - o.e.e4.tools cannot be build with "mvn clean install"
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/icons/full/wizban/newsbook_wiz.png b/bundles/org.eclipse.e4.tools.emf.ui.script.js/icons/full/wizban/newsbook_wiz.png
deleted file mode 100644
index cd3b162..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/icons/full/wizban/newsbook_wiz.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/plugin.xml b/bundles/org.eclipse.e4.tools.emf.ui.script.js/plugin.xml
deleted file mode 100644
index b693455..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/plugin.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-   <extension
-         point="org.eclipse.e4.tools.emf.ui.scripting">
-      <scripting
-            class="org.eclipse.e4.tools.emf.ui.script.js.JavaScriptSupport"
-            label="JavaScript">
-      </scripting>
-   </extension>
-
-</plugin>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/pom.xml b/bundles/org.eclipse.e4.tools.emf.ui.script.js/pom.xml
deleted file mode 100644
index 416cc21..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/pom.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <artifactId>org.eclipse.e4.tools.emf.ui.script.js</artifactId>
-  <version>0.12.0-SNAPSHOT</version>
-  <packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/JavaScriptSupport.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/JavaScriptSupport.java
deleted file mode 100644
index e96205a..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/JavaScriptSupport.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 BestSolution.at and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- ******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.annotation.Annotation;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.eclipse.e4.core.contexts.ContextInjectionFactory;
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.tools.emf.ui.common.IScriptingSupport;
-import org.eclipse.e4.tools.emf.ui.script.js.text.JavaScriptEditor;
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.e4.ui.services.IStylingEngine;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.TitleAreaDialog;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Widget;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-import org.mozilla.javascript.ScriptableObject;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-@SuppressWarnings({ "restriction", "deprecation" })
-public class JavaScriptSupport implements IScriptingSupport {
-	@Override
-	public void openEditor(Shell shell, final Object mainElement, final IEclipseContext context) {
-		final IEclipseContext childContext = context.createChild();
-
-		TitleAreaDialog dialog = new TitleAreaDialog(shell) {
-			private JavaScriptEditor editor;
-			private Logger logger;
-
-			@Override
-			protected Control createDialogArea(Composite parent) {
-				Composite container = (Composite) super.createDialogArea(parent);
-				logger = new Logger(getShell());
-				getShell().setText("Execute JavaScript");
-				setTitle("Execute JavaScript");
-				setMessage("Enter some JavaScript and execute it");
-				setTitleImage(childContext.get(IResourcePool.class).getImageUnchecked(ResourceProvider.IMG_WIZBAN_JAVASCRIPT));
-
-				childContext.set(Composite.class, container);
-
-				editor = ContextInjectionFactory.make(JavaScriptEditor.class, childContext);
-				GridData gd = new GridData(GridData.FILL_BOTH);
-				gd.minimumHeight = 350;
-				gd.minimumWidth = 400;
-				editor.getControl().setLayoutData(gd);
-				return container;
-			}
-
-			@Override
-			protected void okPressed() {
-				execute(logger, mainElement, context, editor.getContent());
-			}
-
-
-			@Override
-			protected Button createButton(Composite parent, int id,
-					String label, boolean defaultButton) {
-				return super.createButton(parent, id, id == IDialogConstants.OK_ID ? "Execute" : label, defaultButton);
-			}
-		};
-
-		dialog.open();
-		childContext.dispose();
-	}
-
-	private void execute(Logger logger, Object mainElement, IEclipseContext context, String script) {
-		Context cx = Context.enter();
-		Scriptable sc = cx.initStandardObjects();
-
-		ScriptableObject.putProperty(sc, "mainObject", mainElement);
-		ScriptableObject.putProperty(sc, "eclipseContext", context);
-		ScriptableObject.putProperty(sc, "swt", new SWTSupport(Display.getCurrent()));
-		ScriptableObject.putProperty(sc, "service", new ServiceProvider(context));
-		ScriptableObject.putProperty(sc, "di", new DiProvider(context));
-		ScriptableObject.putProperty(sc, "log", logger);
-
-		try {
-			cx.evaluateString(sc, script, "<cmd>", 1, null);
-		} catch (Exception e) {
-			try {
-				logger.error(e);
-			} catch (Exception e1) {
-			}
-		}
-	}
-
-	public static class DiProvider {
-		private IEclipseContext context;
-		private PackageAdmin packageAdmin;
-
-		public DiProvider(IEclipseContext context) {
-			this.context = context;
-		}
-
-		public Object newInstance(String bundlename, String className) throws ClassNotFoundException {
-			Bundle bundle = getBundle(bundlename);
-			if( bundle != null ) {
-				Class<?> clazz = bundle.loadClass(className);
-				return ContextInjectionFactory.make(clazz, context);
-			}
-			return new IllegalArgumentException("Bundle '"+bundlename+"' is not known");
-		}
-
-		public Object execute(Object object) {
-			return ContextInjectionFactory.invoke(object, Execute.class, context);
-		}
-
-		public Object invokeByAnnotation(Object object, String bundlename, String className) throws ClassNotFoundException {
-			Bundle bundle = getBundle(bundlename);
-			if( bundle != null ) {
-				@SuppressWarnings("unchecked")
-				Class<? extends Annotation> clazz = (Class<? extends Annotation>) bundle.loadClass(className);
-				return ContextInjectionFactory.invoke(object, clazz, context);
-			}
-			return new IllegalArgumentException("Bundle '"+bundlename+"' is not known");
-		}
-
-		private Bundle getBundle(String bundlename) {
-			if( packageAdmin == null ) {
-				Bundle bundle =  FrameworkUtil.getBundle(getClass());
-				BundleContext context = bundle.getBundleContext();
-				ServiceReference<PackageAdmin> reference = context.getServiceReference(PackageAdmin.class);
-				packageAdmin = context.getService(reference);
-			}
-
-			Bundle[] bundles = packageAdmin.getBundles(bundlename, null);
-			if (bundles == null)
-				return null;
-			// Return the first bundle that is not installed or uninstalled
-			for (int i = 0; i < bundles.length; i++) {
-				if ((bundles[i].getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) {
-					return bundles[i];
-				}
-			}
-			return null;
-		}
-	}
-
-	public static class ServiceProvider {
-		private IEclipseContext context;
-
-		public ServiceProvider(IEclipseContext context) {
-			this.context = context;
-		}
-
-		public Object getStyleEngine() {
-			return context.get(IStylingEngine.class);
-		}
-
-		public Object getPartService() {
-			return context.get("org.eclipse.e4.ui.workbench.modeling.EPartService");
-		}
-
-		public Object getModelService() {
-			return context.get("org.eclipse.e4.ui.workbench.modeling.EModelService");
-		}
-	}
-
-	public static class Logger {
-		private Shell parentShell;
-
-		private Shell shell;
-		private Text text;
-
-		private static SimpleDateFormat DATEFORMAT = new SimpleDateFormat("hh:mm:ss.SSS");
-
-		public Logger(Shell parentShell) {
-			this.parentShell = parentShell;
-		}
-
-		public void openLog() {
-			if( shell == null ) {
-				shell = new Shell(parentShell,SWT.SHELL_TRIM);
-				shell.setLayout(new GridLayout());
-				text = new Text(shell, SWT.MULTI|SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
-				text.setLayoutData(new GridData(GridData.FILL_BOTH));
-				text.setFont(JFaceResources.getTextFont());
-				text.setEditable(false);
-				shell.setVisible(true);
-				shell.addDisposeListener(new DisposeListener() {
-
-					@Override
-					public void widgetDisposed(DisposeEvent e) {
-						shell = null;
-						text = null;
-					}
-				});
-			}
-		}
-
-		public void error(Object data) throws Exception {
-			_log(1, data);
-		}
-
-		public void debug(Object data) throws Exception {
-			_log(0, data);
-		}
-
-		private void _log(int type, Object data) throws Exception {
-			if( shell == null ) {
-				openLog();
-			}
-			shell.setVisible(true);
-			if( data instanceof Throwable ) {
-				StringWriter w = new StringWriter();
-				PrintWriter pw = new PrintWriter(w);
-				((Throwable)data).printStackTrace(pw);
-				text.append(DATEFORMAT.format(new Date()) + " - " + w + "\n");
-				pw.close();
-				w.close();
-			} else {
-				text.append(DATEFORMAT.format(new Date()) + " - " + data + "\n");
-			}
-
-		}
-
-		public void clearLog() {
-			if( text != null ) {
-				text.setText("");
-			}
-		}
-
-		public void closeLog() {
-			shell.dispose();
-			shell = null;
-			text = null;
-		}
-	}
-
-	public static class SWTSupport {
-		private Display d;
-
-		public static SWT SWT = new SWT();
-
-		public SWTSupport(Display d) {
-			this.d = d;
-		}
-
-		public Color newColor(String color) {
-			if( color.startsWith("#") ) {
-				if( color.length() == 7 ) {
-					return new Color(d, new RGB(
-							Integer.parseInt(color.substring(1,3), 16),
-							Integer.parseInt(color.substring(3,5), 16),
-							Integer.parseInt(color.substring(5,7), 16)));
-				} else {
-					return new Color(d, new RGB(
-							Integer.parseInt( color.charAt(1) + "" +color.charAt(1), 16),
-							Integer.parseInt( color.charAt(2) + "" +color.charAt(2), 16),
-							Integer.parseInt( color.charAt(3) + "" +color.charAt(3), 16)));
-				}
-			}
-			return null;
-		}
-
-		public Text newText(Composite parent, int style) {
-			return new Text(parent, style);
-		}
-
-		public Widget newLabel(Composite parent, int style) {
-			return new Label(parent, style);
-		}
-
-		public GridData newGridData() {
-			return new GridData();
-		}
-
-		public Combo newCombo(Composite parent, int style) {
-			return new Combo(parent, style);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/ResourceProvider.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/ResourceProvider.java
deleted file mode 100644
index 9e84b5b..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/ResourceProvider.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 BestSolution.at
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js;
-
-import org.eclipse.e4.tools.services.BasicResourceProvider;
-
-public class ResourceProvider extends BasicResourceProvider {
-	public static String IMG_WIZBAN_JAVASCRIPT = "IMG_org.eclipse.e4.tools.emf.ui.script.js.wizban_javascript";
-
-	public static String JAVA_KEYWORD = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_keyword"; //$NON-NLS-1$
-
-	public static String JAVA_DEFAULT = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_default"; //$NON-NLS-1$
-
-	public static String JAVA_KEYWORD_RETURN = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_keyword_return"; //$NON-NLS-1$
-
-	public static String JAVA_OPERATOR = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_operator"; //$NON-NLS-1$
-
-	public static String JAVA_BRACKET = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_bracket"; //$NON-NLS-1$
-
-	public static String TASK_TAG = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_comment_task_tag"; //$NON-NLS-1$
-
-	public static String JAVA_MULTI_LINE_COMMENT = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_multi_line_comment"; //$NON-NLS-1$
-
-	public static String JAVA_SINGLE_LINE_COMMENT = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_single_line_comment"; //$NON-NLS-1$
-
-	public static String JAVA_STRING = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_string"; //$NON-NLS-1$
-
-	public static String JAVADOC_KEYWORD = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_keyword"; //$NON-NLS-1$
-
-	public static String JAVADOC_TAG = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_tag"; //$NON-NLS-1$
-
-	public static String JAVADOC_LINK = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_link"; //$NON-NLS-1$
-
-	public static String JAVADOC_DEFAULT = "COLOR_org.eclipse.e4.tools.emf.ui.script.js.java_doc_default"; //$NON-NLS-1$
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/JavaScriptEditor.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/JavaScriptEditor.java
deleted file mode 100644
index ad9fbb4..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/JavaScriptEditor.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 BestSolution.at
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text;
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.tools.emf.ui.script.js.ResourceProvider;
-import org.eclipse.e4.tools.emf.ui.script.js.text.scanners.IJavaScriptPartitions;
-import org.eclipse.e4.tools.emf.ui.script.js.text.scanners.JavaScriptSourceViewerConfiguration;
-import org.eclipse.e4.tools.emf.ui.script.js.text.scanners.JavaScriptTextTools;
-import org.eclipse.e4.tools.emf.ui.script.js.text.scanners.PreferenceConstants;
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.jface.preference.PreferenceStore;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.text.source.VerticalRuler;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-public class JavaScriptEditor {
-	private static final int VERTICAL_RULER_WIDTH = 12;
-
-	private static PreferenceStore store = new PreferenceStore();
-
-	private Document document;
-
-	private SourceViewer viewer;
-
-	static {
-		store.setDefault(ResourceProvider.JAVADOC_KEYWORD+PreferenceConstants.EDITOR_BOLD_SUFFIX, true);
-		store.setDefault(ResourceProvider.JAVA_KEYWORD+PreferenceConstants.EDITOR_BOLD_SUFFIX, true);
-		store.setDefault(ResourceProvider.JAVA_KEYWORD_RETURN+PreferenceConstants.EDITOR_BOLD_SUFFIX, true);
-	}
-
-	@Inject
-	public JavaScriptEditor(Composite parent, IResourcePool pool) {
-		this.document = new Document();
-		VerticalRuler verticalRuler = new VerticalRuler(VERTICAL_RULER_WIDTH);
-
-		int styles= SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION;
-		viewer = new SourceViewer(parent, verticalRuler, styles);
-
-		Font f = null;
-		if( ! JFaceResources.getFontRegistry().hasValueFor("JavaEditorFont") ) {
-			if( SWT.getPlatform().equals("carbon") || SWT.getPlatform().equals("cocoa") ) {
-				JFaceResources.getFontRegistry().put("JavaEditorFont", new FontData[] {new FontData("Monaco",11,SWT.NONE)});
-			}
-		}
-
-		f = JFaceResources.getFontRegistry().get("JavaEditorFont");
-		viewer.getTextWidget().setFont(f);
-
-		JavaScriptTextTools textTools = new JavaScriptTextTools(pool, store);
-		viewer.configure(new JavaScriptSourceViewerConfiguration(textTools));
-
-		textTools.setupJavaDocumentPartitioner(document, IJavaScriptPartitions.JAVA_PARTITIONING);
-		viewer.setDocument(document);
-	}
-
-	public Control getControl() {
-		return viewer.getControl();
-	}
-
-	public String getContent() {
-		return document.get();
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/AbstractJavaScanner.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/AbstractJavaScanner.java
deleted file mode 100644
index 4b47b90..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/AbstractJavaScanner.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.StringConverter;
-import org.eclipse.jface.text.TextAttribute;
-import org.eclipse.jface.text.rules.BufferedRuleBasedScanner;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.Token;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Display;
-
-
-/**
- * Initialized with a color manager and a preference store, its subclasses are
- * only responsible for providing a list of preference keys for based on which tokens
- * are generated and to use this tokens to define the rules controlling this scanner.
- * <p>
- * This scanner stores the color defined by the color preference key into
- * the color manager under the same key.
- * </p>
- * <p>
- * Preference color key + {@link PreferenceConstants#EDITOR_BOLD_SUFFIX} are used
- * to retrieve whether the token is rendered in bold.
- * </p>
- * <p>
- * Preference color key + {@link PreferenceConstants#EDITOR_ITALIC_SUFFIX} are used
- * to retrieve whether the token is rendered in italic.
- * </p>
- * <p>
- * Preference color key + {@link PreferenceConstants#EDITOR_STRIKETHROUGH_SUFFIX} are used
- * to retrieve whether the token is rendered in strikethrough.
- * </p>
- * <p>
- * Preference color key + {@link PreferenceConstants#EDITOR_UNDERLINE_SUFFIX} are used
- * to retrieve whether the token is rendered in underline.
- * </p>
- */
-public abstract class AbstractJavaScanner extends BufferedRuleBasedScanner {
-
-
-	private IResourcePool fColorManager;
-	private IPreferenceStore fPreferenceStore;
-
-	private Map<String,Token> fTokenMap= new HashMap<String,Token>();
-	private String[] fPropertyNamesColor;
-	/**
-	 * Preference keys for boolean preferences which are <code>true</code>,
-	 * iff the corresponding token should be rendered bold.
-	 */
-	private String[] fPropertyNamesBold;
-	/**
-	 * Preference keys for boolean preferences which are <code>true</code>,
-	 * iff the corresponding token should be rendered italic.
-	 *
-	 * @since 3.0
-	 */
-	private String[] fPropertyNamesItalic;
-	/**
-	 * Preference keys for boolean preferences which are <code>true</code>,
-	 * iff the corresponding token should be rendered strikethrough.
-	 *
-	 * @since 3.1
-	 */
-	private String[] fPropertyNamesStrikethrough;
-	/**
-	 * Preference keys for boolean preferences which are <code>true</code>,
-	 * iff the corresponding token should be rendered underline.
-	 *
-	 * @since 3.1
-	 */
-	private String[] fPropertyNamesUnderline;
-
-
-	private boolean fNeedsLazyColorLoading;
-
-	/**
-	 * Returns an array of preference keys which define the tokens
-	 * used in the rules of this scanner.
-	 * <p>
-	 * The preference key is used access the color in the preference
-	 * store and in the color manager.
-	 * </p>
-	 * <p>
-	 * Preference key + {@link PreferenceConstants#EDITOR_BOLD_SUFFIX} is used
-	 * to retrieve whether the token is rendered in bold.
-	 * </p>
-	 * <p>
-	 * Preference key + {@link PreferenceConstants#EDITOR_ITALIC_SUFFIX} is used
-	 * to retrieve whether the token is rendered in italic.
-	 * </p>
-	 * <p>
-	 * Preference key + {@link PreferenceConstants#EDITOR_UNDERLINE_SUFFIX} is used
-	 * to retrieve whether the token is rendered underlined.
-	 * </p>
-	 * <p>
-	 * Preference key + {@link PreferenceConstants#EDITOR_STRIKETHROUGH_SUFFIX} is used
-	 * to retrieve whether the token is rendered stricken out.
-	 * </p>
-	 */
-	abstract protected String[] getTokenProperties();
-
-	/**
-	 * Creates the list of rules controlling this scanner.
-	 */
-	abstract protected List<IRule> createRules();
-
-
-	/**
-	 * Creates an abstract Java scanner.
-	 */
-	public AbstractJavaScanner(IResourcePool manager, IPreferenceStore store) {
-		super();
-		fColorManager= manager;
-		fPreferenceStore= store;
-	}
-
-	/**
-	 * Must be called after the constructor has been called.
-	 */
-	public final void initialize() {
-
-		fPropertyNamesColor= getTokenProperties();
-		int length= fPropertyNamesColor.length;
-		fPropertyNamesBold= new String[length];
-		fPropertyNamesItalic= new String[length];
-		fPropertyNamesStrikethrough= new String[length];
-		fPropertyNamesUnderline= new String[length];
-
-		for (int i= 0; i < length; i++) {
-			fPropertyNamesBold[i]= getBoldKey(fPropertyNamesColor[i]);
-			fPropertyNamesItalic[i]= getItalicKey(fPropertyNamesColor[i]);
-			fPropertyNamesStrikethrough[i]= getStrikethroughKey(fPropertyNamesColor[i]);
-			fPropertyNamesUnderline[i]= getUnderlineKey(fPropertyNamesColor[i]);
-		}
-
-		fNeedsLazyColorLoading= Display.getCurrent() == null;
-		for (int i= 0; i < length; i++) {
-			if (fNeedsLazyColorLoading)
-				addTokenWithProxyAttribute(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i], fPropertyNamesStrikethrough[i], fPropertyNamesUnderline[i]);
-			else
-				addToken(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i], fPropertyNamesStrikethrough[i], fPropertyNamesUnderline[i]);
-		}
-
-		initializeRules();
-	}
-
-	protected String getBoldKey(String colorKey) {
-		return colorKey + PreferenceConstants.EDITOR_BOLD_SUFFIX;
-	}
-
-	protected String getItalicKey(String colorKey) {
-		return colorKey + PreferenceConstants.EDITOR_ITALIC_SUFFIX;
-	}
-
-	protected String getStrikethroughKey(String colorKey) {
-		return colorKey + PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX;
-	}
-
-	protected String getUnderlineKey(String colorKey) {
-		return colorKey + PreferenceConstants.EDITOR_UNDERLINE_SUFFIX;
-	}
-
-	@Override
-	public IToken nextToken() {
-		if (fNeedsLazyColorLoading)
-			resolveProxyAttributes();
-		return super.nextToken();
-	}
-
-	private void resolveProxyAttributes() {
-		if (fNeedsLazyColorLoading && Display.getCurrent() != null) {
-			for (int i= 0; i < fPropertyNamesColor.length; i++) {
-				addToken(fPropertyNamesColor[i], fPropertyNamesBold[i], fPropertyNamesItalic[i], fPropertyNamesStrikethrough[i], fPropertyNamesUnderline[i]);
-			}
-			fNeedsLazyColorLoading= false;
-		}
-	}
-
-	private void addTokenWithProxyAttribute(String colorKey, String boldKey, String italicKey, String strikethroughKey, String underlineKey) {
-		fTokenMap.put(colorKey, new Token(createTextAttribute(null, boldKey, italicKey, strikethroughKey, underlineKey)));
-	}
-
-	private void addToken(String colorKey, String boldKey, String italicKey, String strikethroughKey, String underlineKey) {
-//		if (fColorManager != null && colorKey != null && fColorManager.getColorUnchecked(colorKey) == null) {
-//			RGB rgb= PreferenceConverter.getColor(fPreferenceStore, colorKey);
-//			if (fColorManager instanceof IColorManagerExtension) {
-//				IColorManagerExtension ext= (IColorManagerExtension) fColorManager;
-//				ext.unbindColor(colorKey);
-//				ext.bindColor(colorKey, rgb);
-//			}
-//		}
-
-		if (!fNeedsLazyColorLoading)
-			fTokenMap.put(colorKey, new Token(createTextAttribute(colorKey, boldKey, italicKey, strikethroughKey, underlineKey)));
-		else {
-			Token token= ((Token)fTokenMap.get(colorKey));
-			if (token != null)
-				token.setData(createTextAttribute(colorKey, boldKey, italicKey, strikethroughKey, underlineKey));
-		}
-	}
-
-	/**
-	 * Create a text attribute based on the given color, bold, italic, strikethrough and underline preference keys.
-	 *
-	 * @param colorKey the color preference key
-	 * @param boldKey the bold preference key
-	 * @param italicKey the italic preference key
-	 * @param strikethroughKey the strikethrough preference key
-	 * @param underlineKey the italic preference key
-	 * @return the created text attribute
-	 * @since 3.0
-	 */
-	private TextAttribute createTextAttribute(String colorKey, String boldKey, String italicKey, String strikethroughKey, String underlineKey) {
-		Color color= null;
-		if (colorKey != null)
-			color= fColorManager.getColorUnchecked(colorKey);
-
-		int style= fPreferenceStore.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
-		if (fPreferenceStore.getBoolean(italicKey))
-			style |= SWT.ITALIC;
-
-		if (fPreferenceStore.getBoolean(strikethroughKey))
-			style |= TextAttribute.STRIKETHROUGH;
-
-		if (fPreferenceStore.getBoolean(underlineKey))
-			style |= TextAttribute.UNDERLINE;
-
-		return new TextAttribute(color, null, style);
-	}
-
-	protected Token getToken(String key) {
-		if (fNeedsLazyColorLoading)
-			resolveProxyAttributes();
-		return (Token) fTokenMap.get(key);
-	}
-
-	private void initializeRules() {
-		List<IRule> rules= createRules();
-		if (rules != null) {
-			IRule[] result= new IRule[rules.size()];
-			rules.toArray(result);
-			setRules(result);
-		}
-	}
-
-	private int indexOf(String property) {
-		if (property != null) {
-			int length= fPropertyNamesColor.length;
-			for (int i= 0; i < length; i++) {
-				if (property.equals(fPropertyNamesColor[i]) || property.equals(fPropertyNamesBold[i]) || property.equals(fPropertyNamesItalic[i]) || property.equals(fPropertyNamesStrikethrough[i]) || property.equals(fPropertyNamesUnderline[i]))
-					return i;
-			}
-		}
-		return -1;
-	}
-
-	public boolean affectsBehavior(PropertyChangeEvent event) {
-		return indexOf(event.getProperty()) >= 0;
-	}
-
-	public void adaptToPreferenceChange(PropertyChangeEvent event) {
-		String p= event.getProperty();
-		int index= indexOf(p);
-		Token token= getToken(fPropertyNamesColor[index]);
-		if (fPropertyNamesColor[index].equals(p))
-			adaptToColorChange(token, event);
-		else if (fPropertyNamesBold[index].equals(p))
-			adaptToStyleChange(token, event, SWT.BOLD);
-		else if (fPropertyNamesItalic[index].equals(p))
-			adaptToStyleChange(token, event, SWT.ITALIC);
-		else if (fPropertyNamesStrikethrough[index].equals(p))
-			adaptToStyleChange(token, event, TextAttribute.STRIKETHROUGH);
-		else if (fPropertyNamesUnderline[index].equals(p))
-			adaptToStyleChange(token, event, TextAttribute.UNDERLINE);
-	}
-
-	private void adaptToColorChange(Token token, PropertyChangeEvent event) {
-		RGB rgb= null;
-
-		Object value= event.getNewValue();
-		if (value instanceof RGB)
-			rgb= (RGB) value;
-		else if (value instanceof String)
-			rgb= StringConverter.asRGB((String) value);
-
-		if (rgb != null) {
-
-			String property= event.getProperty();
-			Color color= fColorManager.getColorUnchecked(property);
-
-//			if ((color == null || !rgb.equals(color.getRGB())) && fColorManager instanceof IColorManagerExtension) {
-//				IColorManagerExtension ext= (IColorManagerExtension) fColorManager;
-//
-//			 	ext.unbindColor(property);
-//			 	ext.bindColor(property, rgb);
-//
-//				color= fColorManager.getColor(property);
-//			}
-
-			Object data= token.getData();
-			if (data instanceof TextAttribute) {
-				TextAttribute oldAttr= (TextAttribute) data;
-				token.setData(new TextAttribute(color, oldAttr.getBackground(), oldAttr.getStyle()));
-			}
-		}
-	}
-
-	private void adaptToStyleChange(Token token, PropertyChangeEvent event, int styleAttribute) {
-		boolean eventValue= false;
-		Object value= event.getNewValue();
-		if (value instanceof Boolean)
-			eventValue= ((Boolean) value).booleanValue();
-		else if (IPreferenceStore.TRUE.equals(value))
-			eventValue= true;
-
-		Object data= token.getData();
-		if (data instanceof TextAttribute) {
-			TextAttribute oldAttr= (TextAttribute) data;
-			boolean activeValue= (oldAttr.getStyle() & styleAttribute) == styleAttribute;
-			if (activeValue != eventValue)
-				token.setData(new TextAttribute(oldAttr.getForeground(), oldAttr.getBackground(), eventValue ? oldAttr.getStyle() | styleAttribute : oldAttr.getStyle() & ~styleAttribute));
-		}
-	}
-	/**
-	 * Returns the preference store.
-	 *
-	 * @return the preference store.
-	 *
-	 * @since 3.0
-	 */
-	protected IPreferenceStore getPreferenceStore() {
-		return fPreferenceStore;
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/BufferedDocumentScanner.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/BufferedDocumentScanner.java
deleted file mode 100644
index fc07e81..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/BufferedDocumentScanner.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.rules.ICharacterScanner;
-
-
-/**
- * A buffered document scanner. The buffer always contains a section
- * of a fixed size of the document to be scanned.
- */
-
-public final class BufferedDocumentScanner implements ICharacterScanner {
-
-	/** The document being scanned. */
-	private IDocument fDocument;
-	/** The offset of the document range to scan. */
-	private int fRangeOffset;
-	/** The length of the document range to scan. */
-	private int fRangeLength;
-	/** The delimiters of the document. */
-	private char[][] fDelimiters;
-
-	/** The buffer. */
-	private final char[] fBuffer;
-	/** The offset of the buffer within the document. */
-	private int fBufferOffset;
-	/** The valid length of the buffer for access. */
-	private int fBufferLength;
-	/** The offset of the scanner within the buffer. */
-	private int fOffset;
-
-
-	/**
-	 * Creates a new buffered document scanner.
-	 * The buffer size is set to the given number of characters.
-	 *
-	 * @param size the buffer size
-	 */
-	public BufferedDocumentScanner(int size) {
-		fBuffer= new char[size];
-	}
-
-	/**
-	 * Fills the buffer with the contents of the document starting at the given offset.
-	 *
-	 * @param offset the document offset at which the buffer starts
-	 */
-	private final void updateBuffer(int offset) {
-
-		fBufferOffset= offset;
-
-		if (fBufferOffset + fBuffer.length > fRangeOffset + fRangeLength)
-			fBufferLength= fRangeLength - (fBufferOffset - fRangeOffset);
-		else
-			fBufferLength= fBuffer.length;
-
-		try {
-			final String content= fDocument.get(fBufferOffset, fBufferLength);
-			content.getChars(0, fBufferLength, fBuffer, 0);
-		} catch (BadLocationException e) {
-		}
-	}
-
-	/**
-	 * Configures the scanner by providing access to the document range over which to scan.
-	 *
-	 * @param document the document to scan
-	 * @param offset the offset of the document range to scan
-	 * @param length the length of the document range to scan
-	 */
-	public final void setRange(IDocument document, int offset, int length) {
-
-		fDocument= document;
-		fRangeOffset= offset;
-		fRangeLength= length;
-
-		String[] delimiters= document.getLegalLineDelimiters();
-		fDelimiters= new char[delimiters.length][];
-		for (int i= 0; i < delimiters.length; i++)
-			fDelimiters[i]= delimiters[i].toCharArray();
-
-		updateBuffer(offset);
-		fOffset= 0;
-	}
-
-	/*
-	 * @see ICharacterScanner#read()
-	 */
-	@Override
-	public final int read() {
-
-		if (fOffset == fBufferLength) {
-			int end= fBufferOffset + fBufferLength;
-			if (end == fDocument.getLength() || end == fRangeOffset + fRangeLength)
-				return EOF;
-			else {
-				updateBuffer(fBufferOffset + fBufferLength);
-				fOffset= 0;
-			}
-		}
-
-		try {
-			return fBuffer[fOffset++];
-		} catch (ArrayIndexOutOfBoundsException ex) {
-			StringBuilder buf= new StringBuilder();
-			buf.append("Detailed state of 'BufferedDocumentScanner:'"); //$NON-NLS-1$
-			buf.append("\n\tfOffset= "); //$NON-NLS-1$
-			buf.append(fOffset);
-			buf.append("\n\tfBufferOffset= "); //$NON-NLS-1$
-			buf.append(fBufferOffset);
-			buf.append("\n\tfBufferLength= "); //$NON-NLS-1$
-			buf.append(fBufferLength);
-			buf.append("\n\tfRangeOffset= "); //$NON-NLS-1$
-			buf.append(fRangeOffset);
-			buf.append("\n\tfRangeLength= "); //$NON-NLS-1$
-			buf.append(fRangeLength);
-			System.err.println(buf.toString()); //FIXME Logging
-//			JavaPlugin.logErrorMessage(buf.toString());
-			throw ex;
-		}
-	}
-
-	/*
-	 * @see ICharacterScanner#unread
-	 */
-	@Override
-	public final void unread() {
-
-		if (fOffset == 0) {
-			if (fBufferOffset != fRangeOffset) {
-				updateBuffer(fBufferOffset - fBuffer.length);
-				fOffset= fBuffer.length - 1;
-			}
-		} else {
-			--fOffset;
-		}
-	}
-
-	/*
-	 * @see ICharacterScanner#getColumn()
-	 */
-	@Override
-	public final int getColumn() {
-
-		try {
-			final int offset= fBufferOffset + fOffset;
-			final int line= fDocument.getLineOfOffset(offset);
-			final int start= fDocument.getLineOffset(line);
-			return offset - start;
-		} catch (BadLocationException e) {
-		}
-
-		return -1;
-	}
-
-	/*
-	 * @see ICharacterScanner#getLegalLineDelimiters()
-	 */
-	@Override
-	public final char[][] getLegalLineDelimiters() {
-		return fDelimiters;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/CombinedWordRule.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/CombinedWordRule.java
deleted file mode 100644
index 6d8e862..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/CombinedWordRule.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.eclipse.jface.text.rules.ICharacterScanner;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.IWordDetector;
-import org.eclipse.jface.text.rules.Token;
-
-
-/**
- * An implementation of <code>IRule</code> capable of detecting words.
- * <p>
- * Word rules also allow for the association of tokens with specific words.
- * That is, not only can the rule be used to provide tokens for exact matches,
- * but also for the generalized notion of a word in the context in which it is used.
- * A word rules uses a word detector to determine what a word is.</p>
- * <p>
- * This word rule allows a word detector to be shared among different word matchers.
- * Its up to the word matchers to decide if a word matches and, in this a case, which
- * token is associated with that word.
- * </p>
- *
- * @see IWordDetector
- * @since 3.0
- */
-public class CombinedWordRule implements IRule {
-
-	/**
-	 * Word matcher, that associates matched words with tokens.
-	 */
-	public static class WordMatcher {
-
-		/** The table of predefined words and token for this matcher */
-		private Map<CharacterBuffer,IToken> fWords= new HashMap<CharacterBuffer,IToken>();
-
-		/**
-		 * Adds a word and the token to be returned if it is detected.
-		 *
-		 * @param word the word this rule will search for, may not be <code>null</code>
-		 * @param token the token to be returned if the word has been found, may not be <code>null</code>
-		 */
-		public void addWord(String word, IToken token) {
-			fWords.put(new CharacterBuffer(word), token);
-		}
-
-		/**
-		 * Returns the token associated to the given word and the scanner state.
-		 *
-		 * @param scanner the scanner
-		 * @param word the word
-		 * @return the token or <code>null</code> if none is associated by this matcher
-		 */
-		public IToken evaluate(ICharacterScanner scanner, CharacterBuffer word) {
-			IToken token= (IToken) fWords.get(word);
-			if (token != null)
-				return token;
-			return Token.UNDEFINED;
-		}
-
-		/**
-		 * Removes all words.
-		 */
-		public void clearWords() {
-			fWords.clear();
-		}
-	}
-
-	/**
-	 * Character buffer, mutable <b>or</b> suitable for use as key in hash maps.
-	 */
-	public static class CharacterBuffer {
-
-		/** Buffer content */
-		private char[] fContent;
-		/** Buffer content size */
-		private int fLength= 0;
-
-		/** Is hash code cached? */
-		private boolean fIsHashCached= false;
-		/** The hash code */
-		private int fHashCode;
-
-		/**
-		 * Initialize with the given capacity.
-		 *
-		 * @param capacity the initial capacity
-		 */
-		public CharacterBuffer(int capacity) {
-			fContent= new char[capacity];
-		}
-
-		/**
-		 * Initialize with the given content.
-		 *
-		 * @param content the initial content
-		 */
-		public CharacterBuffer(String content) {
-			fContent= content.toCharArray();
-			fLength= content.length();
-		}
-
-		/**
-		 * Empties this buffer.
-		 */
-		public void clear() {
-			fIsHashCached= false;
-			fLength= 0;
-		}
-
-		/**
-		 * Appends the given character to the buffer.
-		 *
-		 * @param c the character
-		 */
-		public void append(char c) {
-			fIsHashCached= false;
-			if (fLength == fContent.length) {
-				char[] old= fContent;
-				fContent= new char[old.length << 1];
-				System.arraycopy(old, 0, fContent, 0, old.length);
-			}
-			fContent[fLength++]= c;
-		}
-
-		/**
-		 * Returns the length of the content.
-		 *
-		 * @return the length
-		 */
-		public int length() {
-			return fLength;
-		}
-
-		/**
-		 * Returns the content as string.
-		 *
-		 * @return the content
-		 */
-		@Override
-		public String toString() {
-			return new String(fContent, 0, fLength);
-		}
-
-		/**
-		 * Returns the character at the given position.
-		 *
-		 * @param i the position
-		 * @return the character at position <code>i</code>
-		 */
-		public char charAt(int i) {
-			return fContent[i];
-		}
-
-		/*
-		 * @see java.lang.Object#hashCode()
-		 */
-		@Override
-		public int hashCode() {
-			if (fIsHashCached)
-				return fHashCode;
-
-			int hash= 0;
-			for (int i= 0, n= fLength; i < n; i++)
-				hash= 29*hash + fContent[i];
-			fHashCode= hash;
-			fIsHashCached= true;
-			return hash;
-		}
-
-
-		/*
-		 * @see java.lang.Object#equals(java.lang.Object)
-		 */
-		@Override
-		public boolean equals(Object obj) {
-			if (obj == this)
-				return true;
-			if (!(obj instanceof CharacterBuffer))
-				return false;
-			CharacterBuffer buffer= (CharacterBuffer) obj;
-			int length= buffer.length();
-			if (length != fLength)
-				return false;
-			for (int i= 0; i < length; i++)
-				if (buffer.charAt(i) != fContent[i])
-					return false;
-			return true;
-		}
-
-		/**
-		 * Is the content equal to the given string?
-		 *
-		 * @param string the string
-		 * @return <code>true</code> iff the content is the same character sequence as in the string
-		 */
-		public boolean equals(String string) {
-			int length= string.length();
-			if (length != fLength)
-				return false;
-			for (int i= 0; i < length; i++)
-				if (string.charAt(i) != fContent[i])
-					return false;
-			return true;
-		}
-	}
-
-	/** Internal setting for the uninitialized column constraint */
-	private static final int UNDEFINED= -1;
-
-	/** The word detector used by this rule */
-	private IWordDetector fDetector;
-	/** The default token to be returned on success and if nothing else has been specified. */
-	private IToken fDefaultToken;
-	/** The column constraint */
-	private int fColumn= UNDEFINED;
-	/** Buffer used for pattern detection */
-	private CharacterBuffer fBuffer= new CharacterBuffer(16);
-
-	/** List of word matchers */
-	private List<WordMatcher> fMatchers= new ArrayList<WordMatcher>();
-
-	/**
-	 * Creates a rule which, with the help of an word detector, will return the token
-	 * associated with the detected word. If no token has been associated, the scanner
-	 * will be rolled back and an undefined token will be returned in order to allow
-	 * any subsequent rules to analyze the characters.
-	 *
-	 * @param detector the word detector to be used by this rule, may not be <code>null</code>
-	 *
-	 * @see WordMatcher#addWord(String, IToken)
-	 */
-	public CombinedWordRule(IWordDetector detector) {
-		this(detector, null, Token.UNDEFINED);
-	}
-
-	/**
-	 * Creates a rule which, with the help of an word detector, will return the token
-	 * associated with the detected word. If no token has been associated, the
-	 * specified default token will be returned.
-	 *
-	 * @param detector the word detector to be used by this rule, may not be <code>null</code>
-	 * @param defaultToken the default token to be returned on success
-	 *		if nothing else is specified, may not be <code>null</code>
-	 *
-	 * @see WordMatcher#addWord(String, IToken)
-	 */
-	public CombinedWordRule(IWordDetector detector, IToken defaultToken) {
-		this(detector, null, defaultToken);
-	}
-
-	/**
-	 * Creates a rule which, with the help of an word detector, will return the token
-	 * associated with the detected word. If no token has been associated, the scanner
-	 * will be rolled back and an undefined token will be returned in order to allow
-	 * any subsequent rules to analyze the characters.
-	 *
-	 * @param detector the word detector to be used by this rule, may not be <code>null</code>
-	 * @param matcher the initial word matcher
-	 *
-	 * @see WordMatcher#addWord(String, IToken)
-	 */
-	public CombinedWordRule(IWordDetector detector, WordMatcher matcher) {
-		this(detector, matcher, Token.UNDEFINED);
-	}
-
-	/**
-	 * Creates a rule which, with the help of an word detector, will return the token
-	 * associated with the detected word. If no token has been associated, the
-	 * specified default token will be returned.
-	 *
-	 * @param detector the word detector to be used by this rule, may not be <code>null</code>
-	 * @param matcher the initial word matcher
-	 * @param defaultToken the default token to be returned on success
-	 *		if nothing else is specified, may not be <code>null</code>
-	 *
-	 * @see WordMatcher#addWord(String, IToken)
-	 */
-	public CombinedWordRule(IWordDetector detector, WordMatcher matcher, IToken defaultToken) {
-		fDetector= detector;
-		fDefaultToken= defaultToken;
-		if (matcher != null)
-			addWordMatcher(matcher);
-	}
-
-
-	/**
-	 * Adds the given matcher.
-	 *
-	 * @param matcher the matcher
-	 */
-	public void addWordMatcher(WordMatcher matcher) {
-		fMatchers.add(matcher);
-	}
-
-	/**
-	 * Sets a column constraint for this rule. If set, the rule's token
-	 * will only be returned if the pattern is detected starting at the
-	 * specified column. If the column is smaller then 0, the column
-	 * constraint is considered removed.
-	 *
-	 * @param column the column in which the pattern starts
-	 */
-	public void setColumnConstraint(int column) {
-		if (column < 0)
-			column= UNDEFINED;
-		fColumn= column;
-	}
-
-	/*
-	 * @see IRule#evaluate(ICharacterScanner)
-	 */
-	@Override
-	public IToken evaluate(ICharacterScanner scanner) {
-		int c= scanner.read();
-		if (fDetector.isWordStart((char) c)) {
-			if (fColumn == UNDEFINED || (fColumn == scanner.getColumn() - 1)) {
-
-				fBuffer.clear();
-				do {
-					fBuffer.append((char) c);
-					c= scanner.read();
-				} while (c != ICharacterScanner.EOF && fDetector.isWordPart((char) c));
-				scanner.unread();
-
-				for (int i= 0, n= fMatchers.size(); i < n; i++) {
-					IToken token= ((WordMatcher) fMatchers.get(i)).evaluate(scanner, fBuffer);
-					if (!token.isUndefined())
-						return token;
-				}
-
-				if (fDefaultToken.isUndefined())
-					unreadBuffer(scanner);
-
-				return fDefaultToken;
-			}
-		}
-
-		scanner.unread();
-		return Token.UNDEFINED;
-	}
-
-	/**
-	 * Returns the characters in the buffer to the scanner.
-	 *
-	 * @param scanner the scanner to be used
-	 */
-	private void unreadBuffer(ICharacterScanner scanner) {
-		for (int i= fBuffer.length() - 1; i >= 0; i--)
-			scanner.unread();
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/FastJavaScriptPartitionScanner.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/FastJavaScriptPartitionScanner.java
deleted file mode 100644
index b9cae17..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/FastJavaScriptPartitionScanner.java
+++ /dev/null
@@ -1,541 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.rules.ICharacterScanner;
-import org.eclipse.jface.text.rules.IPartitionTokenScanner;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.Token;
-
-
-/**
- * This scanner recognizes the JavaDoc comments, Java multi line comments, Java single line comments,
- * Java strings and Java characters.
- */
-public class FastJavaScriptPartitionScanner implements IPartitionTokenScanner, IJavaScriptPartitions {
-
-	// states
-	private static final int JAVA= 0;
-	private static final int SINGLE_LINE_COMMENT= 1;
-	private static final int MULTI_LINE_COMMENT= 2;
-	private static final int JAVADOC= 3;
-	private static final int CHARACTER= 4;
-	private static final int STRING= 5;
-
-	// beginning of prefixes and postfixes
-	private static final int NONE= 0;
-	private static final int BACKSLASH= 1; // postfix for STRING and CHARACTER
-	private static final int SLASH= 2; // prefix for SINGLE_LINE or MULTI_LINE or JAVADOC
-	private static final int SLASH_STAR= 3; // prefix for MULTI_LINE_COMMENT or JAVADOC
-	private static final int SLASH_STAR_STAR= 4; // prefix for MULTI_LINE_COMMENT or JAVADOC
-	private static final int STAR= 5; // postfix for MULTI_LINE_COMMENT or JAVADOC
-	private static final int CARRIAGE_RETURN=6; // postfix for STRING, CHARACTER and SINGLE_LINE_COMMENT
-
-	/** The scanner. */
-	private final BufferedDocumentScanner fScanner= new BufferedDocumentScanner(1000);	// faster implementation
-
-	/** The offset of the last returned token. */
-	private int fTokenOffset;
-	/** The length of the last returned token. */
-	private int fTokenLength;
-
-	/** The state of the scanner. */
-	private int fState;
-	/** The last significant characters read. */
-	private int fLast;
-	/** The amount of characters already read on first call to nextToken(). */
-	private int fPrefixLength;
-
-	// emulate JavaPartitionScanner
-	private boolean fEmulate= false;
-	private int fJavaOffset;
-	private int fJavaLength;
-
-	private final IToken[] fTokens= new IToken[] {
-		new Token(null),
-		new Token(JAVA_SINGLE_LINE_COMMENT),
-		new Token(JAVA_MULTI_LINE_COMMENT),
-		new Token(JAVA_DOC),
-		new Token(JAVA_CHARACTER),
-		new Token(JAVA_STRING)
-	};
-
-	public FastJavaScriptPartitionScanner(boolean emulate) {
-	    fEmulate= emulate;
-	}
-
-	public FastJavaScriptPartitionScanner() {
-	    this(false);
-	}
-
-	/*
-	 * @see org.eclipse.jface.text.rules.ITokenScanner#nextToken()
-	 */
-	@Override
-	public IToken nextToken() {
-
-		// emulate JavaPartitionScanner
-		if (fEmulate) {
-			if (fJavaOffset != -1 && fTokenOffset + fTokenLength != fJavaOffset + fJavaLength) {
-				fTokenOffset += fTokenLength;
-				return fTokens[JAVA];
-			} else {
-				fJavaOffset= -1;
-				fJavaLength= 0;
-			}
-		}
-
-		fTokenOffset += fTokenLength;
-		fTokenLength= fPrefixLength;
-
-		while (true) {
-			final int ch= fScanner.read();
-
-			// characters
-	 		switch (ch) {
-	 		case ICharacterScanner.EOF:
-		 		if (fTokenLength > 0) {
-		 			fLast= NONE; // ignore last
-		 			return preFix(fState, JAVA, NONE, 0);
-
-		 		} else {
-		 			fLast= NONE;
-		 			fPrefixLength= 0;
-					return Token.EOF;
-		 		}
-
-	 		case '\r':
-	 			// emulate JavaPartitionScanner
-	 			if (!fEmulate && fLast != CARRIAGE_RETURN) {
-						fLast= CARRIAGE_RETURN;
-						fTokenLength++;
-	 					continue;
-
-	 			} else {
-
-					switch (fState) {
-					case SINGLE_LINE_COMMENT:
-					case CHARACTER:
-					case STRING:
-						if (fTokenLength > 0) {
-							IToken token= fTokens[fState];
-
-				 			// emulate JavaPartitionScanner
-							if (fEmulate) {
-								fTokenLength++;
-								fLast= NONE;
-								fPrefixLength= 0;
-							} else {
-								fLast= CARRIAGE_RETURN;
-								fPrefixLength= 1;
-							}
-
-							fState= JAVA;
-							return token;
-
-						} else {
-							consume();
-							continue;
-						}
-
-					default:
-						consume();
-						continue;
-					}
-	 			}
-
-	 		case '\n':
-				switch (fState) {
-				case SINGLE_LINE_COMMENT:
-				case CHARACTER:
-				case STRING:
-					// assert(fTokenLength > 0);
-					return postFix(fState);
-
-				default:
-					consume();
-					continue;
-				}
-
-			default:
-				if (!fEmulate && fLast == CARRIAGE_RETURN) {
-					switch (fState) {
-					case SINGLE_LINE_COMMENT:
-					case CHARACTER:
-					case STRING:
-
-						int last;
-						int newState;
-						switch (ch) {
-						case '/':
-							last= SLASH;
-							newState= JAVA;
-							break;
-
-						case '*':
-							last= STAR;
-							newState= JAVA;
-							break;
-
-						case '\'':
-							last= NONE;
-							newState= CHARACTER;
-							break;
-
-						case '"':
-							last= NONE;
-							newState= STRING;
-							break;
-
-						case '\r':
-							last= CARRIAGE_RETURN;
-							newState= JAVA;
-							break;
-
-						case '\\':
-							last= BACKSLASH;
-							newState= JAVA;
-							break;
-
-						default:
-							last= NONE;
-							newState= JAVA;
-							break;
-						}
-
-						fLast= NONE; // ignore fLast
-						return preFix(fState, newState, last, 1);
-
-					default:
-						break;
-					}
-				}
-			}
-
-			// states
-	 		switch (fState) {
-	 		case JAVA:
-				switch (ch) {
-				case '/':
-					if (fLast == SLASH) {
-						if (fTokenLength - getLastLength(fLast) > 0) {
-							return preFix(JAVA, SINGLE_LINE_COMMENT, NONE, 2);
-						} else {
-							preFix(JAVA, SINGLE_LINE_COMMENT, NONE, 2);
-							fTokenOffset += fTokenLength;
-							fTokenLength= fPrefixLength;
-							break;
-						}
-
-					} else {
-						fTokenLength++;
-						fLast= SLASH;
-						break;
-					}
-
-				case '*':
-					if (fLast == SLASH) {
-						if (fTokenLength - getLastLength(fLast) > 0)
-							return preFix(JAVA, MULTI_LINE_COMMENT, SLASH_STAR, 2);
-						else {
-							preFix(JAVA, MULTI_LINE_COMMENT, SLASH_STAR, 2);
-							fTokenOffset += fTokenLength;
-							fTokenLength= fPrefixLength;
-							break;
-						}
-
-					} else {
-						consume();
-						break;
-					}
-
-				case '\'':
-					fLast= NONE; // ignore fLast
-					if (fTokenLength > 0)
-						return preFix(JAVA, CHARACTER, NONE, 1);
-					else {
-						preFix(JAVA, CHARACTER, NONE, 1);
-						fTokenOffset += fTokenLength;
-						fTokenLength= fPrefixLength;
-						break;
-					}
-
-				case '"':
-					fLast= NONE; // ignore fLast
-					if (fTokenLength > 0)
-						return preFix(JAVA, STRING, NONE, 1);
-					else {
-						preFix(JAVA, STRING, NONE, 1);
-						fTokenOffset += fTokenLength;
-						fTokenLength= fPrefixLength;
-						break;
-					}
-
-				default:
-					consume();
-					break;
-				}
-				break;
-
-	 		case SINGLE_LINE_COMMENT:
-				consume();
-				break;
-
-	 		case JAVADOC:
-				switch (ch) {
-				case '/':
-					switch (fLast) {
-					case SLASH_STAR_STAR:
-						return postFix(MULTI_LINE_COMMENT);
-
-					case STAR:
-						return postFix(JAVADOC);
-
-					default:
-						consume();
-						break;
-					}
-					break;
-
-				case '*':
-					fTokenLength++;
-					fLast= STAR;
-					break;
-
-				default:
-					consume();
-					break;
-				}
-				break;
-
-	 		case MULTI_LINE_COMMENT:
-				switch (ch) {
-				case '*':
-					if (fLast == SLASH_STAR) {
-						fLast= SLASH_STAR_STAR;
-						fTokenLength++;
-						fState= JAVADOC;
-					} else {
-						fTokenLength++;
-						fLast= STAR;
-					}
-					break;
-
-				case '/':
-					if (fLast == STAR) {
-						return postFix(MULTI_LINE_COMMENT);
-					} else {
-						consume();
-						break;
-					}
-
-				default:
-					consume();
-					break;
-				}
-				break;
-
-	 		case STRING:
-	 			switch (ch) {
-	 			case '\\':
-					fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH;
-					fTokenLength++;
-					break;
-
-				case '\"':
-	 				if (fLast != BACKSLASH) {
-	 					return postFix(STRING);
-
-		 			} else {
-						consume();
-						break;
-	 				}
-
-		 		default:
-					consume();
-	 				break;
-	 			}
-	 			break;
-
-	 		case CHARACTER:
-	 			switch (ch) {
-				case '\\':
-					fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH;
-					fTokenLength++;
-					break;
-
-	 			case '\'':
-	 				if (fLast != BACKSLASH) {
-	 					return postFix(CHARACTER);
-
-	 				} else {
-						consume();
-		 				break;
-	 				}
-
-	 			default:
-					consume();
-	 				break;
-	 			}
-	 			break;
-	 		}
-		}
- 	}
-
-	private static final int getLastLength(int last) {
-		switch (last) {
-		default:
-			return -1;
-
-		case NONE:
-			return 0;
-
-		case CARRIAGE_RETURN:
-		case BACKSLASH:
-		case SLASH:
-		case STAR:
-			return 1;
-
-		case SLASH_STAR:
-			return 2;
-
-		case SLASH_STAR_STAR:
-			return 3;
-		}
-	}
-
-	private final void consume() {
-		fTokenLength++;
-		fLast= NONE;
-	}
-
-	private final IToken postFix(int state) {
-		fTokenLength++;
-		fLast= NONE;
-		fState= JAVA;
-		fPrefixLength= 0;
-		return fTokens[state];
-	}
-
-	private final IToken preFix(int state, int newState, int last, int prefixLength) {
-		// emulate JavaPartitionScanner
-		if (fEmulate && state == JAVA && (fTokenLength - getLastLength(fLast) > 0)) {
-			fTokenLength -= getLastLength(fLast);
-			fJavaOffset= fTokenOffset;
-			fJavaLength= fTokenLength;
-			fTokenLength= 1;
-			fState= newState;
-			fPrefixLength= prefixLength;
-			fLast= last;
-			return fTokens[state];
-
-		} else {
-			fTokenLength -= getLastLength(fLast);
-			fLast= last;
-			fPrefixLength= prefixLength;
-			IToken token= fTokens[state];
-			fState= newState;
-			return token;
-		}
-	}
-
-	private static int getState(String contentType) {
-
-		if (contentType == null)
-			return JAVA;
-
-		else if (contentType.equals(JAVA_SINGLE_LINE_COMMENT))
-			return SINGLE_LINE_COMMENT;
-
-		else if (contentType.equals(JAVA_MULTI_LINE_COMMENT))
-			return MULTI_LINE_COMMENT;
-
-		else if (contentType.equals(JAVA_DOC))
-			return JAVADOC;
-
-		else if (contentType.equals(JAVA_STRING))
-			return STRING;
-
-		else if (contentType.equals(JAVA_CHARACTER))
-			return CHARACTER;
-
-		else
-			return JAVA;
-	}
-
-	/*
-	 * @see IPartitionTokenScanner#setPartialRange(IDocument, int, int, String, int)
-	 */
-	@Override
-	public void setPartialRange(IDocument document, int offset, int length, String contentType, int partitionOffset) {
-
-		fScanner.setRange(document, offset, length);
-		fTokenOffset= partitionOffset;
-		fTokenLength= 0;
-		fPrefixLength= offset - partitionOffset;
-		fLast= NONE;
-
-		if (offset == partitionOffset) {
-			// restart at beginning of partition
-			fState= JAVA;
-		} else {
-			fState= getState(contentType);
-		}
-
-		// emulate JavaPartitionScanner
-		if (fEmulate) {
-			fJavaOffset= -1;
-			fJavaLength= 0;
-		}
-	}
-
-	/*
-	 * @see ITokenScanner#setRange(IDocument, int, int)
-	 */
-	@Override
-	public void setRange(IDocument document, int offset, int length) {
-
-		fScanner.setRange(document, offset, length);
-		fTokenOffset= offset;
-		fTokenLength= 0;
-		fPrefixLength= 0;
-		fLast= NONE;
-		fState= JAVA;
-
-		// emulate JavaPartitionScanner
-		if (fEmulate) {
-			fJavaOffset= -1;
-			fJavaLength= 0;
-		}
-	}
-
-	/*
-	 * @see ITokenScanner#getTokenLength()
-	 */
-	@Override
-	public int getTokenLength() {
-		return fTokenLength;
-	}
-
-	/*
-	 * @see ITokenScanner#getTokenOffset()
-	 */
-	@Override
-	public int getTokenOffset() {
-		return fTokenOffset;
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/IJavaScriptPartitions.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/IJavaScriptPartitions.java
deleted file mode 100644
index 6d2b4c3..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/IJavaScriptPartitions.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-/**
- * Definition of Java partitioning and its partitions.
- *
- * @since 3.1
- */
-public interface IJavaScriptPartitions {
-	/**
-	 * The identifier of the Java partitioning.
-	 */
-	String JAVA_PARTITIONING= "___java_partitioning";  //$NON-NLS-1$
-	/**
-	 * The identifier of the single-line (JLS2: EndOfLineComment) end comment partition content type.
-	 */
-	String JAVA_SINGLE_LINE_COMMENT= "__java_singleline_comment"; //$NON-NLS-1$
-
-	/**
-	 * The identifier multi-line (JLS2: TraditionalComment) comment partition content type.
-	 */
-	String JAVA_MULTI_LINE_COMMENT= "__java_multiline_comment"; //$NON-NLS-1$
-
-	/**
-	 * The identifier of the Javadoc (JLS2: DocumentationComment) partition content type.
-	 */
-	String JAVA_DOC= "__java_javadoc"; //$NON-NLS-1$
-
-	/**
-	 * The identifier of the Java string partition content type.
-	 */
-	String JAVA_STRING= "__java_string"; //$NON-NLS-1$
-
-	/**
-	 * The identifier of the Java character partition content type.
-	 */
-	String JAVA_CHARACTER= "__java_character";  //$NON-NLS-1$
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptCodeScanner.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptCodeScanner.java
deleted file mode 100644
index c2763d7..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptCodeScanner.java
+++ /dev/null
@@ -1,593 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Philippe Ombredanne <pombredanne@nexb.com> - https://bugs.eclipse.org/bugs/show_bug.cgi?id=150989
- *     Anton Leherbauer (Wind River Systems) - [misc] Allow custom token for WhitespaceRule - https://bugs.eclipse.org/bugs/show_bug.cgi?id=251224
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.e4.tools.emf.ui.script.js.ResourceProvider;
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.rules.ICharacterScanner;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.SingleLineRule;
-import org.eclipse.jface.text.rules.Token;
-import org.eclipse.jface.text.rules.WhitespaceRule;
-
-
-/**
- * A Java code scanner.
- */
-public final class JavaScriptCodeScanner extends AbstractJavaScanner {
-
-	/**
-	 * Rule to detect java operators.
-	 *
-	 * @since 3.0
-	 */
-	private static final class OperatorRule implements IRule {
-
-		/** Java operators */
-		private final char[] JAVA_OPERATORS= { ';', '.', '=', '/', '\\', '+', '-', '*', '<', '>', ':', '?', '!', ',', '|', '&', '^', '%', '~'};
-		/** Token to return for this rule */
-		private final IToken fToken;
-
-		/**
-		 * Creates a new operator rule.
-		 *
-		 * @param token Token to use for this rule
-		 */
-		public OperatorRule(IToken token) {
-			fToken= token;
-		}
-
-		/**
-		 * Is this character an operator character?
-		 *
-		 * @param character Character to determine whether it is an operator character
-		 * @return <code>true</code> iff the character is an operator, <code>false</code> otherwise.
-		 */
-		public boolean isOperator(char character) {
-			for (int index= 0; index < JAVA_OPERATORS.length; index++) {
-				if (JAVA_OPERATORS[index] == character)
-					return true;
-			}
-			return false;
-		}
-
-		/*
-		 * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner)
-		 */
-		@Override
-		public IToken evaluate(ICharacterScanner scanner) {
-
-			int character= scanner.read();
-			if (isOperator((char) character)) {
-				do {
-					character= scanner.read();
-				} while (isOperator((char) character));
-				scanner.unread();
-				return fToken;
-			} else {
-				scanner.unread();
-				return Token.UNDEFINED;
-			}
-		}
-	}
-
-	/**
-	 * Rule to detect java brackets.
-	 *
-	 * @since 3.3
-	 */
-	private static final class BracketRule implements IRule {
-
-		/** Java brackets */
-		private final char[] JAVA_BRACKETS= { '(', ')', '{', '}', '[', ']' };
-		/** Token to return for this rule */
-		private final IToken fToken;
-
-		/**
-		 * Creates a new bracket rule.
-		 *
-		 * @param token Token to use for this rule
-		 */
-		public BracketRule(IToken token) {
-			fToken= token;
-		}
-
-		/**
-		 * Is this character a bracket character?
-		 *
-		 * @param character Character to determine whether it is a bracket character
-		 * @return <code>true</code> iff the character is a bracket, <code>false</code> otherwise.
-		 */
-		public boolean isBracket(char character) {
-			for (int index= 0; index < JAVA_BRACKETS.length; index++) {
-				if (JAVA_BRACKETS[index] == character)
-					return true;
-			}
-			return false;
-		}
-
-		/*
-		 * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner)
-		 */
-		@Override
-		public IToken evaluate(ICharacterScanner scanner) {
-
-			int character= scanner.read();
-			if (isBracket((char) character)) {
-				do {
-					character= scanner.read();
-				} while (isBracket((char) character));
-				scanner.unread();
-				return fToken;
-			} else {
-				scanner.unread();
-				return Token.UNDEFINED;
-			}
-		}
-	}
-
-
-//	private static class VersionedWordMatcher extends CombinedWordRule.WordMatcher implements ISourceVersionDependent {
-//
-//		private final IToken fDefaultToken;
-//		private final String fVersion;
-//		private boolean fIsVersionMatch;
-//
-//		public VersionedWordMatcher(IToken defaultToken, String version, String currentVersion) {
-//			fDefaultToken= defaultToken;
-//			fVersion= version;
-//			setSourceVersion(currentVersion);
-//		}
-//
-//		/*
-//		 * @see org.eclipse.jdt.internal.ui.text.ISourceVersionDependent#setSourceVersion(java.lang.String)
-//		 */
-//		public void setSourceVersion(String version) {
-//			fIsVersionMatch= fVersion.compareTo(version) <= 0;
-//		}
-//
-//		/*
-//		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#evaluate(org.eclipse.jface.text.rules.ICharacterScanner, org.eclipse.jdt.internal.ui.text.CombinedWordRule.CharacterBuffer)
-//		 */
-//		public IToken evaluate(ICharacterScanner scanner, CombinedWordRule.CharacterBuffer word) {
-//			IToken token= super.evaluate(scanner, word);
-//
-//			if (fIsVersionMatch || token.isUndefined())
-//				return token;
-//
-//			return fDefaultToken;
-//		}
-//	}
-
-//	/**
-//	 * An annotation rule matches the '@' symbol, any following whitespace and
-//	 * optionally a following <code>interface</code> keyword.
-//	 *
-//	 * It does not match if there is a comment between the '@' symbol and
-//	 * the identifier. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=82452
-//	 *
-//	 * @since 3.1
-//	 */
-//	private static class AnnotationRule implements IRule, ISourceVersionDependent {
-//		/**
-//		 * A resettable scanner supports marking a position in a scanner and
-//		 * unreading back to the marked position.
-//		 */
-//		private static final class ResettableScanner implements ICharacterScanner {
-//			private final ICharacterScanner fDelegate;
-//			private int fReadCount;
-//
-//			/**
-//			 * Creates a new resettable scanner that will forward calls
-//			 * to <code>scanner</code>, but store a marked position.
-//			 *
-//			 * @param scanner the delegate scanner
-//			 */
-//			public ResettableScanner(final ICharacterScanner scanner) {
-//				fDelegate= scanner;
-//				mark();
-//			}
-//
-//			/*
-//			 * @see org.eclipse.jface.text.rules.ICharacterScanner#getColumn()
-//			 */
-//			public int getColumn() {
-//				return fDelegate.getColumn();
-//			}
-//
-//			/*
-//			 * @see org.eclipse.jface.text.rules.ICharacterScanner#getLegalLineDelimiters()
-//			 */
-//			public char[][] getLegalLineDelimiters() {
-//				return fDelegate.getLegalLineDelimiters();
-//			}
-//
-//			/*
-//			 * @see org.eclipse.jface.text.rules.ICharacterScanner#read()
-//			 */
-//			public int read() {
-//				int ch= fDelegate.read();
-//				if (ch != ICharacterScanner.EOF)
-//					fReadCount++;
-//				return ch;
-//			}
-//
-//			/*
-//			 * @see org.eclipse.jface.text.rules.ICharacterScanner#unread()
-//			 */
-//			public void unread() {
-//				if (fReadCount > 0)
-//					fReadCount--;
-//				fDelegate.unread();
-//			}
-//
-//			/**
-//			 * Marks an offset in the scanned content.
-//			 */
-//			public void mark() {
-//				fReadCount= 0;
-//			}
-//
-//			/**
-//			 * Resets the scanner to the marked position.
-//			 */
-//			public void reset() {
-//				while (fReadCount > 0)
-//					unread();
-//
-//				while (fReadCount < 0)
-//					read();
-//			}
-//		}
-//
-//		private final IWhitespaceDetector fWhitespaceDetector= new JavaScriptWhitespaceDetector();
-//		private final IWordDetector fWordDetector= new JavaScriptWordDetector();
-//		private final IToken fInterfaceToken;
-//		private final IToken fAtToken;
-//		private final String fVersion;
-//		private boolean fIsVersionMatch;
-//
-//		/**
-//		 * Creates a new rule.
-//		 *
-//		 * @param interfaceToken the token to return if
-//		 *        <code>'@\s*interface'</code> is matched
-//		 * @param atToken the token to return if <code>'@'</code>
-//		 *        is matched, but not <code>'@\s*interface'</code>
-//		 * @param version the lowest <code>JavaCore.COMPILER_SOURCE</code>
-//		 *        version that this rule is enabled
-//		 * @param currentVersion the current
-//		 *        <code>JavaCore.COMPILER_SOURCE</code> version
-//		 */
-//		public AnnotationRule(IToken interfaceToken, Token atToken, String version, String currentVersion) {
-//			fInterfaceToken= interfaceToken;
-//			fAtToken= atToken;
-//			fVersion= version;
-//			setSourceVersion(currentVersion);
-//		}
-//
-//		/*
-//		 * @see org.eclipse.jface.text.rules.IRule#evaluate(org.eclipse.jface.text.rules.ICharacterScanner)
-//		 */
-//		public IToken evaluate(ICharacterScanner scanner) {
-//			if (!fIsVersionMatch)
-//				return Token.UNDEFINED;
-//
-//			ResettableScanner resettable= new ResettableScanner(scanner);
-//			if (resettable.read() == '@')
-//				return readAnnotation(resettable);
-//
-//			resettable.reset();
-//			return Token.UNDEFINED;
-//		}
-//
-//		private IToken readAnnotation(ResettableScanner scanner) {
-//			scanner.mark();
-//			skipWhitespace(scanner);
-//			if (readInterface(scanner)) {
-//				return fInterfaceToken;
-//			} else {
-//				scanner.reset();
-//				return fAtToken;
-//			}
-//		}
-//
-//		private boolean readInterface(ICharacterScanner scanner) {
-//			int ch= scanner.read();
-//			int i= 0;
-//			while (i < INTERFACE.length() && INTERFACE.charAt(i) == ch) {
-//				i++;
-//				ch= scanner.read();
-//			}
-//			if (i < INTERFACE.length())
-//				return false;
-//
-//			if (fWordDetector.isWordPart((char) ch))
-//				return false;
-//
-//			if (ch != ICharacterScanner.EOF)
-//				scanner.unread();
-//
-//			return true;
-//		}
-//
-//		private boolean skipWhitespace(ICharacterScanner scanner) {
-//			while (fWhitespaceDetector.isWhitespace((char) scanner.read())) {
-//				// do nothing
-//			}
-//
-//			scanner.unread();
-//			return true;
-//		}
-//
-//		/*
-//		 * @see org.eclipse.jdt.internal.ui.text.ISourceVersionDependent#setSourceVersion(java.lang.String)
-//		 */
-//		public void setSourceVersion(String version) {
-//			fIsVersionMatch= fVersion.compareTo(version) <= 0;
-//		}
-//
-//	}
-
-//	private static final String SOURCE_VERSION= JavaCore.COMPILER_SOURCE;
-
-	/*static String[] fgKeywords= {
-		"abstract", //$NON-NLS-1$
-		"break", //$NON-NLS-1$
-		"case", "catch", "class", "const", "continue", //$NON-NLS-5$ //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-		"default", "do", //$NON-NLS-2$ //$NON-NLS-1$
-		"else", "extends", //$NON-NLS-2$ //$NON-NLS-1$
-		"final", "finally", "for", //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-		"goto", //$NON-NLS-1$
-		"if", "implements", "import", "instanceof", "interface", //$NON-NLS-5$ //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-		"native", "new", //$NON-NLS-2$ //$NON-NLS-1$
-		"package", "private", "protected", "public", //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-		"static", "super", "switch", "synchronized", //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-		"this", "throw", "throws", "transient", "try", //$NON-NLS-5$ //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-		"volatile", //$NON-NLS-1$
-		"while" //$NON-NLS-1$
-	};*/
-
-	static String[] fgKeywords= {
-		"break",
-    	"case",
-    	"catch",
-    	"continue",
-    	"debugger",
-    	"default",
-    	"delete",
-    	"do",
-    	"else",
-    	"finally",
-    	"for",
-    	"function",
-    	"if",
-    	"in",
-    	"instanceof",
-    	"new",
-//    	"return",
-    	"switch",
-    	"this",
-    	"throw",
-    	"try",
-    	"typeof",
-    	"var",
-    	"void",
-    	"while",
-    	"with",
-    	"class",
-        "enum",
-        "export",
-        "extends",
-        "import",
-        "super"
-
-	};
-
-
-//	private static final String INTERFACE= "interface";  //$NON-NLS-1$
-	private static final String RETURN= "return"; //$NON-NLS-1$
-//	private static String[] fgJava14Keywords= { "assert" }; //$NON-NLS-1$
-//	private static String[] fgJava15Keywords= { "enum" }; //$NON-NLS-1$
-
-	private static String[] fgTypes= { "void", "boolean", "char", "byte", "short", "strictfp", "int", "long", "float", "double" }; //$NON-NLS-1$ //$NON-NLS-5$ //$NON-NLS-7$ //$NON-NLS-6$ //$NON-NLS-8$ //$NON-NLS-9$  //$NON-NLS-10$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-2$
-
-	private static String[] fgConstants= { "false", "null", "true" }; //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
-
-//	private static final String ANNOTATION_BASE_KEY= PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_PREFIX + SemanticHighlightings.ANNOTATION;
-//	private static final String ANNOTATION_COLOR_KEY= "COLOR_org.eclipse.e4.tools.emf.ui.script.js." + ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_COLOR_SUFFIX;
-
-	private static String[] fgTokenProperties= {
-		ResourceProvider.JAVA_KEYWORD,
-		ResourceProvider.JAVA_STRING,
-		ResourceProvider.JAVA_DEFAULT,
-		ResourceProvider.JAVA_KEYWORD_RETURN,
-		ResourceProvider.JAVA_OPERATOR,
-		ResourceProvider.JAVA_BRACKET/*,
-		ANNOTATION_COLOR_KEY,*/
-	};
-
-//	private List<ISourceVersionDependent> fVersionDependentRules= new ArrayList<ISourceVersionDependent>(3);
-
-	/**
-	 * Creates a Java code scanner
-	 *
-	 * @param manager	the color manager
-	 * @param store		the preference store
-	 */
-	public JavaScriptCodeScanner(IResourcePool manager, IPreferenceStore store) {
-		super(manager, store);
-		initialize();
-	}
-
-	/*
-	 * @see AbstractJavaScanner#getTokenProperties()
-	 */
-	@Override
-	protected String[] getTokenProperties() {
-		return fgTokenProperties;
-	}
-
-	/*
-	 * @see AbstractJavaScanner#createRules()
-	 */
-	@Override
-	protected List<IRule> createRules() {
-
-		List<IRule> rules= new ArrayList<IRule>();
-
-		// Add rule for character constants.
-		Token token= getToken(ResourceProvider.JAVA_STRING);
-		rules.add(new SingleLineRule("'", "'", token, '\\')); //$NON-NLS-2$ //$NON-NLS-1$
-
-
-		Token defaultToken= getToken(ResourceProvider.JAVA_DEFAULT);
-
-		// Add generic whitespace rule.
-		rules.add(new WhitespaceRule(new JavaScriptWhitespaceDetector(), defaultToken));
-
-//		String version= getPreferenceStore().getString(SOURCE_VERSION);
-
-//		// Add JLS3 rule for /@\s*interface/ and /@\s*\w+/
-//		token= getToken(ANNOTATION_COLOR_KEY);
-//		AnnotationRule atInterfaceRule= new AnnotationRule(getToken(IJavaScriptColorConstants.JAVA_KEYWORD), token, JavaCore.VERSION_1_5, version);
-//		rules.add(atInterfaceRule);
-//		fVersionDependentRules.add(atInterfaceRule);
-//
-//		// Add word rule for new keywords, see bug 4077
-		JavaScriptWordDetector wordDetector= new JavaScriptWordDetector();
-		CombinedWordRule combinedWordRule= new CombinedWordRule(wordDetector, defaultToken);
-//
-//		VersionedWordMatcher j14Matcher= new VersionedWordMatcher(defaultToken, JavaCore.VERSION_1_4, version);
-//
-//		token= getToken(IJavaScriptColorConstants.JAVA_KEYWORD);
-//		for (int i=0; i<fgJava14Keywords.length; i++)
-//			j14Matcher.addWord(fgJava14Keywords[i], token);
-//
-//		combinedWordRule.addWordMatcher(j14Matcher);
-//		fVersionDependentRules.add(j14Matcher);
-//
-//		VersionedWordMatcher j15Matcher= new VersionedWordMatcher(defaultToken, JavaCore.VERSION_1_5, version);
-//
-//		token= getToken(IJavaScriptColorConstants.JAVA_KEYWORD);
-//		for (int i=0; i<fgJava15Keywords.length; i++)
-//			j15Matcher.addWord(fgJava15Keywords[i], token);
-//
-//		combinedWordRule.addWordMatcher(j15Matcher);
-//		fVersionDependentRules.add(j15Matcher);
-
-		// Add rule for operators
-		token= getToken(ResourceProvider.JAVA_OPERATOR);
-		rules.add(new OperatorRule(token));
-
-		// Add rule for brackets
-		token= getToken(ResourceProvider.JAVA_BRACKET);
-		rules.add(new BracketRule(token));
-
-		// Add word rule for keyword 'return'.
-		CombinedWordRule.WordMatcher returnWordRule= new CombinedWordRule.WordMatcher();
-		token= getToken(ResourceProvider.JAVA_KEYWORD_RETURN);
-		returnWordRule.addWord(RETURN, token);
-		combinedWordRule.addWordMatcher(returnWordRule);
-
-		// Add word rule for keywords, types, and constants.
-		CombinedWordRule.WordMatcher wordRule= new CombinedWordRule.WordMatcher();
-		token= getToken(ResourceProvider.JAVA_KEYWORD);
-		for (int i=0; i<fgKeywords.length; i++)
-			wordRule.addWord(fgKeywords[i], token);
-		for (int i=0; i<fgTypes.length; i++)
-			wordRule.addWord(fgTypes[i], token);
-		for (int i=0; i<fgConstants.length; i++)
-			wordRule.addWord(fgConstants[i], token);
-
-		combinedWordRule.addWordMatcher(wordRule);
-
-		rules.add(combinedWordRule);
-
-		setDefaultReturnToken(defaultToken);
-		return rules;
-	}
-
-//	/*
-//	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getBoldKey(java.lang.String)
-//	 */
-//	protected String getBoldKey(String colorKey) {
-//		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
-//			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_BOLD_SUFFIX;
-//		return super.getBoldKey(colorKey);
-//	}
-//
-//	/*
-//	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getItalicKey(java.lang.String)
-//	 */
-//	protected String getItalicKey(String colorKey) {
-//		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
-//			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_ITALIC_SUFFIX;
-//		return super.getItalicKey(colorKey);
-//	}
-//
-//	/*
-//	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getStrikethroughKey(java.lang.String)
-//	 */
-//	protected String getStrikethroughKey(String colorKey) {
-//		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
-//			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_STRIKETHROUGH_SUFFIX;
-//		return super.getStrikethroughKey(colorKey);
-//	}
-//
-//	/*
-//	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getUnderlineKey(java.lang.String)
-//	 */
-//	protected String getUnderlineKey(String colorKey) {
-//		if ((ANNOTATION_COLOR_KEY).equals(colorKey))
-//			return ANNOTATION_BASE_KEY + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_UNDERLINE_SUFFIX;
-//		return super.getUnderlineKey(colorKey);
-//	}
-//
-//	/*
-//	 * @see AbstractJavaScanner#affectsBehavior(PropertyChangeEvent)
-//	 */
-//	public boolean affectsBehavior(PropertyChangeEvent event) {
-//		return event.getProperty().equals(SOURCE_VERSION) || super.affectsBehavior(event);
-//	}
-//
-//	/*
-//	 * @see AbstractJavaScanner#adaptToPreferenceChange(PropertyChangeEvent)
-//	 */
-//	public void adaptToPreferenceChange(PropertyChangeEvent event) {
-//
-//		if (event.getProperty().equals(SOURCE_VERSION)) {
-//			Object value= event.getNewValue();
-//
-//			if (value instanceof String) {
-//				String s= (String) value;
-//
-//				for (Iterator<ISourceVersionDependent> it= fVersionDependentRules.iterator(); it.hasNext();) {
-//					ISourceVersionDependent dependent= (ISourceVersionDependent) it.next();
-//					dependent.setSourceVersion(s);
-//				}
-//			}
-//
-//		} else if (super.affectsBehavior(event)) {
-//			super.adaptToPreferenceChange(event);
-//		}
-//	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptCommentScanner.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptCommentScanner.java
deleted file mode 100644
index 5c5fa5c..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptCommentScanner.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Michel Ishizuka <cqw10305@nifty.com> - Bug 113266 [syntax highlighting] javadoc tag names including period is not highlighting correctly
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.e4.tools.emf.ui.script.js.text.scanners.CombinedWordRule.WordMatcher;
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IWordDetector;
-import org.eclipse.jface.text.rules.Token;
-
-
-/**
- * Java comment scanner.
- */
-public class JavaScriptCommentScanner extends AbstractJavaScanner{
-
-	private static class AtJavaIdentifierDetector implements IWordDetector {
-
-		@Override
-		public boolean isWordStart(char c) {
-			return c == '@' || Character.isJavaIdentifierStart(c);
-		}
-
-		@Override
-		public boolean isWordPart(char c) {
-			return c == '.' || Character.isJavaIdentifierPart(c);
-		}
-	}
-
-//	private class TaskTagMatcher extends CombinedWordRule.WordMatcher {
-//
-//		private IToken fToken;
-//		/**
-//		 * Uppercase words
-//		 * @since 3.0
-//		 */
-//		private Map<CombinedWordRule.CharacterBuffer,IToken> fUppercaseWords= new HashMap<CombinedWordRule.CharacterBuffer,IToken>();
-//		/**
-//		 * <code>true</code> if task tag detection is case-sensitive.
-//		 * @since 3.0
-//		 */
-//		private boolean fCaseSensitive= true;
-//		/**
-//		 * Buffer for uppercase word
-//		 * @since 3.0
-//		 */
-//		private CombinedWordRule.CharacterBuffer fBuffer= new CombinedWordRule.CharacterBuffer(16);
-//
-//		public TaskTagMatcher(IToken token) {
-//			fToken= token;
-//		}
-//
-//		/*
-//		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#clearWords()
-//		 * @since 3.0
-//		 */
-//		public synchronized void clearWords() {
-//			super.clearWords();
-//			fUppercaseWords.clear();
-//		}
-//
-//		public synchronized void addTaskTags(String value) {
-//			String[] tasks= split(value, ","); //$NON-NLS-1$
-//			for (int i= 0; i < tasks.length; i++) {
-//				if (tasks[i].length() > 0) {
-//					addWord(tasks[i], fToken);
-//				}
-//			}
-//		}
-//
-//		private String[] split(String value, String delimiters) {
-//			StringTokenizer tokenizer= new StringTokenizer(value, delimiters);
-//			int size= tokenizer.countTokens();
-//			String[] tokens= new String[size];
-//			int i= 0;
-//			while (i < size)
-//				tokens[i++]= tokenizer.nextToken();
-//			return tokens;
-//		}
-//
-//		/*
-//		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#addWord(java.lang.String, org.eclipse.jface.text.rules.IToken)
-//		 * @since 3.0
-//		 */
-//		public synchronized void addWord(String word, IToken token) {
-//			super.addWord(word, token);
-//			fUppercaseWords.put(new CombinedWordRule.CharacterBuffer(word.toUpperCase()), token);
-//		}
-//
-//		/*
-//		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#evaluate(org.eclipse.jface.text.rules.ICharacterScanner, org.eclipse.jdt.internal.ui.text.CombinedWordRule.CharacterBuffer)
-//		 * @since 3.0
-//		 */
-//		public synchronized IToken evaluate(ICharacterScanner scanner, CombinedWordRule.CharacterBuffer word) {
-//			if (fCaseSensitive)
-//				return super.evaluate(scanner, word);
-//
-//			fBuffer.clear();
-//			for (int i= 0, n= word.length(); i < n; i++)
-//				fBuffer.append(Character.toUpperCase(word.charAt(i)));
-//
-//			IToken token= (IToken) fUppercaseWords.get(fBuffer);
-//			if (token != null)
-//				return token;
-//			return Token.UNDEFINED;
-//		}
-//
-//		/**
-//		 * Enables/disables the case-sensitivity of the task tag detection.
-//		 *
-//		 * @param caseSensitive <code>true</code> iff case-sensitivity should be enabled
-//		 * @since 3.0
-//		 */
-//		public void setCaseSensitive(boolean caseSensitive) {
-//			fCaseSensitive= caseSensitive;
-//		}
-//	}
-
-//	private static final String COMPILER_TASK_TAGS = JavaCore.COMPILER_TASK_TAGS;
-//	protected static final String TASK_TAG = IJavaColorConstants.TASK_TAG;
-//	/**
-//	 * Preference key of a string preference, specifying if task tag detection is case-sensitive.
-//	 * @since 3.0
-//	 */
-//	private static final String COMPILER_TASK_CASE_SENSITIVE= JavaCore.COMPILER_TASK_CASE_SENSITIVE;
-//	/**
-//	 * Preference value of enabled preferences.
-//	 * @since 3.0
-//	 */
-//	private static final String ENABLED= JavaCore.ENABLED;
-
-//	private TaskTagMatcher fTaskTagMatcher;
-	private String fDefaultTokenProperty;
-	private String[] fTokenProperties;
-
-	public JavaScriptCommentScanner(IResourcePool manager, IPreferenceStore store, String defaultTokenProperty) {
-		this(manager, store, defaultTokenProperty, new String[] { defaultTokenProperty/*, TASK_TAG*/ });
-	}
-
-	public JavaScriptCommentScanner(IResourcePool manager, IPreferenceStore store, String defaultTokenProperty, String[] tokenProperties) {
-		super(manager, store);
-
-		fDefaultTokenProperty= defaultTokenProperty;
-		fTokenProperties= tokenProperties;
-
-		initialize();
-	}
-
-	/*
-	 * @see AbstractJavaScanner#createRules()
-	 */
-	@Override
-	protected List<IRule> createRules() {
-		List<IRule> list= new ArrayList<IRule>();
-		Token defaultToken= getToken(fDefaultTokenProperty);
-
-		List<WordMatcher> matchers= createMatchers();
-		if (matchers.size() > 0) {
-			CombinedWordRule combinedWordRule= new CombinedWordRule(new AtJavaIdentifierDetector(), defaultToken);
-			for (int i= 0, n= matchers.size(); i < n; i++)
-				combinedWordRule.addWordMatcher((WordMatcher) matchers.get(i));
-			list.add(combinedWordRule);
-		}
-
-		setDefaultReturnToken(defaultToken);
-
-		return list;
-	}
-
-	/**
-	 * Creates a list of word matchers.
-	 *
-	 * @return the list of word matchers
-	 */
-	protected List<WordMatcher> createMatchers() {
-		List<WordMatcher> list= new ArrayList<WordMatcher>();
-
-//		// Add rule for Task Tags.
-//		boolean isCaseSensitive= true;
-//		String tasks= null;
-//		if (getPreferenceStore().contains(COMPILER_TASK_TAGS)) {
-//			tasks= getPreferenceStore().getString(COMPILER_TASK_TAGS);
-//			isCaseSensitive= ENABLED.equals(getPreferenceStore().getString(COMPILER_TASK_CASE_SENSITIVE));
-//		}
-//		if (tasks != null) {
-//			fTaskTagMatcher= new TaskTagMatcher(getToken(TASK_TAG));
-//			fTaskTagMatcher.addTaskTags(tasks);
-//			fTaskTagMatcher.setCaseSensitive(isCaseSensitive);
-//			list.add(fTaskTagMatcher);
-//		}
-
-		return list;
-	}
-
-//	/*
-//	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#affectsBehavior(org.eclipse.jface.util.PropertyChangeEvent)
-//	 */
-//	public boolean affectsBehavior(PropertyChangeEvent event) {
-//		return event.getProperty().equals(COMPILER_TASK_TAGS) || event.getProperty().equals(COMPILER_TASK_CASE_SENSITIVE) || super.affectsBehavior(event);
-//	}
-
-//	/*
-//	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#adaptToPreferenceChange(org.eclipse.jface.util.PropertyChangeEvent)
-//	 */
-//	public void adaptToPreferenceChange(PropertyChangeEvent event) {
-//		if (fTaskTagMatcher != null && event.getProperty().equals(COMPILER_TASK_TAGS)) {
-//			Object value= event.getNewValue();
-//			if (value instanceof String) {
-//				synchronized (fTaskTagMatcher) {
-//					fTaskTagMatcher.clearWords();
-//					fTaskTagMatcher.addTaskTags((String) value);
-//				}
-//			}
-//		} else if (fTaskTagMatcher != null && event.getProperty().equals(COMPILER_TASK_CASE_SENSITIVE)) {
-//			Object value= event.getNewValue();
-//			if (value instanceof String)
-//				fTaskTagMatcher.setCaseSensitive(ENABLED.equals(value));
-//		} else if (super.affectsBehavior(event))
-//			super.adaptToPreferenceChange(event);
-//	}
-
-	/*
-	 * @see org.eclipse.jdt.internal.ui.text.AbstractJavaScanner#getTokenProperties()
-	 */
-	@Override
-	protected String[] getTokenProperties() {
-		return fTokenProperties;
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptDocScanner.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptDocScanner.java
deleted file mode 100644
index 06f3cb6..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptDocScanner.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     Anton Leherbauer (Wind River Systems) - [misc] Allow custom token for WhitespaceRule - https://bugs.eclipse.org/bugs/show_bug.cgi?id=251224
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.e4.tools.emf.ui.script.js.ResourceProvider;
-import org.eclipse.e4.tools.emf.ui.script.js.text.scanners.CombinedWordRule.CharacterBuffer;
-import org.eclipse.e4.tools.emf.ui.script.js.text.scanners.CombinedWordRule.WordMatcher;
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.rules.ICharacterScanner;
-import org.eclipse.jface.text.rules.IRule;
-import org.eclipse.jface.text.rules.IToken;
-import org.eclipse.jface.text.rules.IWordDetector;
-import org.eclipse.jface.text.rules.SingleLineRule;
-import org.eclipse.jface.text.rules.Token;
-import org.eclipse.jface.text.rules.WhitespaceRule;
-import org.eclipse.jface.text.rules.WordRule;
-
-/**
- * A rule based JavaDoc scanner.
- */
-public final class JavaScriptDocScanner extends JavaScriptCommentScanner {
-
-
-	/**
-	 * Detector for HTML comment delimiters.
-	 */
-	static class HTMLCommentDetector implements IWordDetector {
-
-		/**
-		 * @see IWordDetector#isWordStart(char)
-		 */
-		@Override
-		public boolean isWordStart(char c) {
-			return (c == '<' || c == '-');
-		}
-
-		/**
-		 * @see IWordDetector#isWordPart(char)
-		 */
-		@Override
-		public boolean isWordPart(char c) {
-			return (c == '-' || c == '!' || c == '>');
-		}
-	}
-
-	class TagRule extends SingleLineRule {
-
-		/*
-		 * @see SingleLineRule
-		 */
-		public TagRule(IToken token) {
-			super("<", ">", token, (char) 0); //$NON-NLS-2$ //$NON-NLS-1$
-		}
-
-		/*
-		 * @see SingleLineRule
-		 */
-		public TagRule(IToken token, char escapeCharacter) {
-			super("<", ">", token, escapeCharacter); //$NON-NLS-2$ //$NON-NLS-1$
-		}
-
-		private IToken evaluateToken() {
-			try {
-				final String token= getDocument().get(getTokenOffset(), getTokenLength()) + "."; //$NON-NLS-1$
-
-				int offset= 0;
-				char character= token.charAt(++offset);
-
-				if (character == '/')
-					character= token.charAt(++offset);
-
-				while (Character.isWhitespace(character))
-					character= token.charAt(++offset);
-
-				while (Character.isLetterOrDigit(character))
-					character= token.charAt(++offset);
-
-				while (Character.isWhitespace(character))
-					character= token.charAt(++offset);
-
-				if (offset >= 2 && token.charAt(offset) == fEndSequence[0])
-					return fToken;
-
-			} catch (BadLocationException exception) {
-				// Do nothing
-			}
-			return getToken(ResourceProvider.JAVADOC_DEFAULT);
-		}
-
-		/*
-		 * @see PatternRule#evaluate(ICharacterScanner)
-		 */
-		@Override
-		public IToken evaluate(ICharacterScanner scanner) {
-			IToken result= super.evaluate(scanner);
-			if (result == fToken)
-				return evaluateToken();
-			return result;
-		}
-	}
-
-	private static String[] fgTokenProperties= {
-		ResourceProvider.JAVADOC_KEYWORD,
-		ResourceProvider.JAVADOC_TAG,
-		ResourceProvider.JAVADOC_LINK,
-		ResourceProvider.JAVADOC_DEFAULT/*,
-		TASK_TAG*/
-	};
-
-
-	public JavaScriptDocScanner(IResourcePool manager, IPreferenceStore store) {
-		super(manager, store, ResourceProvider.JAVADOC_DEFAULT, fgTokenProperties);
-	}
-
-
-	public IDocument getDocument() {
-		return fDocument;
-	}
-
-	/*
-	 * @see AbstractJavaScanner#createRules()
-	 */
-	@Override
-	protected List<IRule> createRules() {
-
-		List<IRule> list= new ArrayList<IRule>();
-
-		// Add rule for tags.
-		Token token= getToken(ResourceProvider.JAVADOC_TAG);
-		list.add(new TagRule(token));
-
-
-		// Add rule for HTML comments
-		WordRule wordRule= new WordRule(new HTMLCommentDetector(), token);
-		wordRule.addWord("<!--", token); //$NON-NLS-1$
-		wordRule.addWord("--!>", token); //$NON-NLS-1$
-		list.add(wordRule);
-
-
-		// Add rule for links.
-		token= getToken(ResourceProvider.JAVADOC_LINK);
-		list.add(new SingleLineRule("{@link", "}", token)); //$NON-NLS-2$ //$NON-NLS-1$
-		list.add(new SingleLineRule("{@value", "}", token)); //$NON-NLS-2$ //$NON-NLS-1$
-		list.add(new SingleLineRule("{@inheritDoc", "}", token)); //$NON-NLS-2$ //$NON-NLS-1$
-
-
-		// Add generic whitespace rule.
-		token= getToken(ResourceProvider.JAVADOC_DEFAULT);
-		list.add(new WhitespaceRule(new JavaScriptWhitespaceDetector(), token));
-
-
-		list.addAll(super.createRules());
-		return list;
-	}
-
-	/*
-	 * @see org.eclipse.jdt.internal.ui.text.JavaCommentScanner#createMatchers()
-	 */
-	@Override
-	protected List<WordMatcher> createMatchers() {
-		List<WordMatcher> list= super.createMatchers();
-
-		// Add word rule for keywords.
-		final IToken token= getToken(ResourceProvider.JAVADOC_KEYWORD);
-		WordMatcher matcher= new WordMatcher() {
-			@Override
-			public IToken evaluate(ICharacterScanner scanner, CharacterBuffer word) {
-				int length= word.length();
-				if (length > 1 && word.charAt(0) == '@') {
-					int i= 0;
-					try {
-						for (; i <= length; i++)
-							scanner.unread();
-						int c= scanner.read();
-						i--;
-						if (c == '*' || Character.isWhitespace((char)c)) {
-							scanner.unread();
-							return token;
-						}
-					} finally {
-						for (; i >= 0; i--)
-							scanner.read();
-					}
-				}
-				return Token.UNDEFINED;
-			}
-		};
-		list.add(matcher);
-
-		return list;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptPresentationReconciler.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptPresentationReconciler.java
deleted file mode 100644
index ef153ae..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptPresentationReconciler.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.TextPresentation;
-import org.eclipse.jface.text.presentation.PresentationReconciler;
-
-
-/**
- * Presentation reconciler, adding functionality for operation without a viewer.
- *
- * @since 3.0
- */
-public class JavaScriptPresentationReconciler extends PresentationReconciler {
-
-	/** Last used document */
-	private IDocument fLastDocument;
-
-	/**
-	 * Constructs a "repair description" for the given damage and returns
-	 * this description as a text presentation.
-	 * <p>
-	 * NOTE: Should not be used if this reconciler is installed on a viewer.
-	 * </p>
-	 *
-	 * @param damage the damage to be repaired
-	 * @param document the document whose presentation must be repaired
-	 * @return the presentation repair description as text presentation
-	 */
-	public TextPresentation createRepairDescription(IRegion damage, IDocument document) {
-		if (document != fLastDocument) {
-			setDocumentToDamagers(document);
-			setDocumentToRepairers(document);
-			fLastDocument= document;
-		}
-		return createPresentation(damage, document);
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptSourceViewerConfiguration.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptSourceViewerConfiguration.java
deleted file mode 100644
index c4890f8..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptSourceViewerConfiguration.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.presentation.IPresentationReconciler;
-import org.eclipse.jface.text.presentation.PresentationReconciler;
-import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.text.source.SourceViewerConfiguration;
-
-public class JavaScriptSourceViewerConfiguration extends SourceViewerConfiguration {
-	private JavaScriptTextTools textTools;
-
-	public JavaScriptSourceViewerConfiguration(JavaScriptTextTools textTools) {
-		this.textTools = textTools;
-	}
-
-	@Override
-	public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
-		return new String[] {
-				IDocument.DEFAULT_CONTENT_TYPE,
-				IJavaScriptPartitions.JAVA_DOC,
-				IJavaScriptPartitions.JAVA_MULTI_LINE_COMMENT,
-				IJavaScriptPartitions.JAVA_SINGLE_LINE_COMMENT,
-				IJavaScriptPartitions.JAVA_STRING,
-				IJavaScriptPartitions.JAVA_CHARACTER
-		};
-	}
-
-	@Override
-	public String getConfiguredDocumentPartitioning(ISourceViewer sourceViewer) {
-		return IJavaScriptPartitions.JAVA_PARTITIONING;
-	}
-
-	@Override
-	public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
-		PresentationReconciler reconciler= new JavaScriptPresentationReconciler();
-		reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
-
-		DefaultDamagerRepairer dr= new DefaultDamagerRepairer(textTools.getCodeScanner());
-		reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
-		reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
-
-		dr= new DefaultDamagerRepairer(textTools.getJavaDocScanner());
-		reconciler.setDamager(dr, IJavaScriptPartitions.JAVA_DOC);
-		reconciler.setRepairer(dr, IJavaScriptPartitions.JAVA_DOC);
-
-		dr= new DefaultDamagerRepairer(textTools.getMultilineCommentScanner());
-		reconciler.setDamager(dr, IJavaScriptPartitions.JAVA_MULTI_LINE_COMMENT);
-		reconciler.setRepairer(dr, IJavaScriptPartitions.JAVA_MULTI_LINE_COMMENT);
-
-		dr= new DefaultDamagerRepairer(textTools.getSinglelineCommentScanner());
-		reconciler.setDamager(dr, IJavaScriptPartitions.JAVA_SINGLE_LINE_COMMENT);
-		reconciler.setRepairer(dr, IJavaScriptPartitions.JAVA_SINGLE_LINE_COMMENT);
-
-		dr= new DefaultDamagerRepairer(textTools.getStringScanner());
-		reconciler.setDamager(dr, IJavaScriptPartitions.JAVA_STRING);
-		reconciler.setRepairer(dr, IJavaScriptPartitions.JAVA_STRING);
-
-		dr= new DefaultDamagerRepairer(textTools.getStringScanner());
-		reconciler.setDamager(dr, IJavaScriptPartitions.JAVA_CHARACTER);
-		reconciler.setRepairer(dr, IJavaScriptPartitions.JAVA_CHARACTER);
-
-
-		return reconciler;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptTextTools.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptTextTools.java
deleted file mode 100644
index 7dd1008..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptTextTools.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-import org.eclipse.e4.tools.emf.ui.script.js.ResourceProvider;
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IDocumentExtension3;
-import org.eclipse.jface.text.IDocumentPartitioner;
-import org.eclipse.jface.text.rules.FastPartitioner;
-import org.eclipse.jface.text.rules.IPartitionTokenScanner;
-import org.eclipse.jface.text.rules.ITokenScanner;
-
-public class JavaScriptTextTools {
-	/**
-	 * Array with legal content types.
-	 * @since 3.0
-	 */
-	private final static String[] LEGAL_CONTENT_TYPES= new String[] {
-		IJavaScriptPartitions.JAVA_DOC,
-		IJavaScriptPartitions.JAVA_MULTI_LINE_COMMENT,
-		IJavaScriptPartitions.JAVA_SINGLE_LINE_COMMENT,
-		IJavaScriptPartitions.JAVA_STRING,
-		IJavaScriptPartitions.JAVA_CHARACTER
-	};
-
-//	/**
-//	 * This tools' preference listener.
-//	 */
-//	private class PreferenceListener implements IPropertyChangeListener {
-//		public void propertyChange(PropertyChangeEvent event) {
-//			adaptToPreferenceChange(event);
-//		}
-//	}
-
-	/** The Java source code scanner. */
-	private JavaScriptCodeScanner fCodeScanner;
-	/** The Java multi-line comment scanner. */
-	private JavaScriptCommentScanner fMultilineCommentScanner;
-	/** The Java single-line comment scanner. */
-	private JavaScriptCommentScanner fSinglelineCommentScanner;
-	/** The Java string scanner. */
-	private SingleTokenJavaScanner fStringScanner;
-	/** The JavaDoc scanner. */
-	private JavaScriptDocScanner fJavaDocScanner;
-//	/** The preference store. */
-//	private IPreferenceStore fPreferenceStore;
-
-	/**
-	 * The core preference store.
-	 * @since 2.1
-	 */
-	/** The preference change listener */
-//	private PreferenceListener fPreferenceListener= new PreferenceListener();
-
-	public JavaScriptTextTools(IResourcePool resourcePool, IPreferenceStore store) {
-//		fPreferenceStore = store;
-//		fPreferenceStore.addPropertyChangeListener(fPreferenceListener);
-
-		fCodeScanner= new JavaScriptCodeScanner(resourcePool, store);
-		fMultilineCommentScanner= new JavaScriptCommentScanner(resourcePool, store, ResourceProvider.JAVA_MULTI_LINE_COMMENT);
-		fSinglelineCommentScanner= new JavaScriptCommentScanner(resourcePool, store, ResourceProvider.JAVA_SINGLE_LINE_COMMENT);
-		fStringScanner= new SingleTokenJavaScanner(resourcePool, store, ResourceProvider.JAVA_STRING);
-		fJavaDocScanner= new JavaScriptDocScanner(resourcePool, store);
-	}
-
-	public ITokenScanner getMultilineCommentScanner() {
-		return fMultilineCommentScanner;
-	}
-
-	public ITokenScanner getSinglelineCommentScanner() {
-		return fSinglelineCommentScanner;
-	}
-
-	public ITokenScanner getStringScanner() {
-		return fStringScanner;
-	}
-
-	public ITokenScanner getJavaDocScanner() {
-		return fJavaDocScanner;
-	}
-
-	public ITokenScanner getCodeScanner() {
-		return fCodeScanner;
-	}
-
-	/**
-	 * Sets up the Java document partitioner for the given document for the given partitioning.
-	 *
-	 * @param document the document to be set up
-	 * @param partitioning the document partitioning
-	 * @since 3.0
-	 */
-	public void setupJavaDocumentPartitioner(IDocument document, String partitioning) {
-		IDocumentPartitioner partitioner= createDocumentPartitioner();
-		if (document instanceof IDocumentExtension3) {
-			IDocumentExtension3 extension3= (IDocumentExtension3) document;
-			extension3.setDocumentPartitioner(partitioning, partitioner);
-		} else {
-			document.setDocumentPartitioner(partitioner);
-		}
-		partitioner.connect(document);
-	}
-
-	/**
-	 * Returns a scanner which is configured to scan
-	 * Java-specific partitions, which are multi-line comments,
-	 * Javadoc comments, and regular Java source code.
-	 *
-	 * @return a Java partition scanner
-	 */
-	public IPartitionTokenScanner getPartitionScanner() {
-		return new FastJavaScriptPartitionScanner();
-	}
-
-	/**
-	 * Factory method for creating a Java-specific document partitioner
-	 * using this object's partitions scanner. This method is a
-	 * convenience method.
-	 *
-	 * @return a newly created Java document partitioner
-	 */
-	public IDocumentPartitioner createDocumentPartitioner() {
-		return new FastPartitioner(getPartitionScanner(), LEGAL_CONTENT_TYPES);
-	}
-
-//	/**
-//	 * Adapts the behavior of the contained components to the change
-//	 * encoded in the given event.
-//	 *
-//	 * @param event the event to which to adapt
-//	 * @since 2.0
-//	 */
-//	private void adaptToPreferenceChange(PropertyChangeEvent event) {
-//		if (fCodeScanner.affectsBehavior(event))
-//			fCodeScanner.adaptToPreferenceChange(event);
-//		if (fMultilineCommentScanner.affectsBehavior(event))
-//			fMultilineCommentScanner.adaptToPreferenceChange(event);
-//		if (fSinglelineCommentScanner.affectsBehavior(event))
-//			fSinglelineCommentScanner.adaptToPreferenceChange(event);
-//		if (fStringScanner.affectsBehavior(event))
-//			fStringScanner.adaptToPreferenceChange(event);
-//		if (fJavaDocScanner.affectsBehavior(event))
-//			fJavaDocScanner.adaptToPreferenceChange(event);
-//	}
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptWhitespaceDetector.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptWhitespaceDetector.java
deleted file mode 100644
index 793f305..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptWhitespaceDetector.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-
-import org.eclipse.jface.text.rules.IWhitespaceDetector;
-
-/**
- * A java aware white space detector.
- */
-public class JavaScriptWhitespaceDetector implements IWhitespaceDetector {
-
-	/**
-	 * @see IWhitespaceDetector#isWhitespace
-	 */
-	@Override
-	public boolean isWhitespace(char c) {
-		return Character.isWhitespace(c);
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptWordDetector.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptWordDetector.java
deleted file mode 100644
index 8160ae1..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/JavaScriptWordDetector.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-import org.eclipse.jface.text.rules.IWordDetector;
-
-/**
- * A Java aware word detector.
- */
-public class JavaScriptWordDetector implements IWordDetector {
-
-	/*
-	 * @see IWordDetector#isWordStart
-	 */
-	@Override
-	public boolean isWordStart(char c) {
-		return Character.isJavaIdentifierStart(c);
-	}
-
-	/*
-	 * @see IWordDetector#isWordPart
-	 */
-	@Override
-	public boolean isWordPart(char c) {
-		return Character.isJavaIdentifierPart(c);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/PreferenceConstants.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/PreferenceConstants.java
deleted file mode 100644
index 67f86bb..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/PreferenceConstants.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-public class PreferenceConstants {
-	/**
-	 * Preference key suffix for bold text style preference keys.
-	 *
-	 * @since 2.1
-	 */
-	public static final String EDITOR_BOLD_SUFFIX= "_bold"; //$NON-NLS-1$
-
-	/**
-	 * Preference key suffix for italic text style preference keys.
-	 *
-	 * @since 3.0
-	 */
-	public static final String EDITOR_ITALIC_SUFFIX= "_italic"; //$NON-NLS-1$
-
-	/**
-	 * Preference key suffix for strikethrough text style preference keys.
-	 *
-	 * @since 3.1
-	 */
-	public static final String EDITOR_STRIKETHROUGH_SUFFIX= "_strikethrough"; //$NON-NLS-1$
-
-	/**
-	 * Preference key suffix for underline text style preference keys.
-	 *
-	 * @since 3.1
-	 */
-	public static final String EDITOR_UNDERLINE_SUFFIX= "_underline"; //$NON-NLS-1$
-
-	/**
-	 * A named preference prefix for semantic highlighting preferences.
-	 *
-	 * @since 3.0
-	 */
-	public static final String EDITOR_SEMANTIC_HIGHLIGHTING_PREFIX="semanticHighlighting."; //$NON-NLS-1$
-
-	/**
-	 * A named preference suffix that controls a semantic highlighting's color.
-	 * <p>
-	 * Value is of type <code>String</code>. A RGB color value encoded as a string
-	 * using class <code>PreferenceConverter</code>
-	 * </p>
-	 *
-	 * @see org.eclipse.jface.resource.StringConverter
-	 * @see org.eclipse.jface.preference.PreferenceConverter
-	 * @since 3.0
-	 */
-	public static final String EDITOR_SEMANTIC_HIGHLIGHTING_COLOR_SUFFIX=".color"; //$NON-NLS-1$
-
-	/**
-	 * A named preference suffix that controls if semantic highlighting has the text attribute bold.
-	 * <p>
-	 * Value is of type <code>Boolean</code>: <code>true</code> if bold.
-	 * </p>
-	 *
-	 * @since 3.0
-	 */
-	public static final String EDITOR_SEMANTIC_HIGHLIGHTING_BOLD_SUFFIX=".bold"; //$NON-NLS-1$
-
-	/**
-	 * A named preference suffix that controls if semantic highlighting has the text attribute italic.
-	 * <p>
-	 * Value is of type <code>Boolean</code>: <code>true</code> if italic.
-	 * </p>
-	 *
-	 * @since 3.0
-	 */
-	public static final String EDITOR_SEMANTIC_HIGHLIGHTING_ITALIC_SUFFIX=".italic"; //$NON-NLS-1$
-
-	/**
-	 * A named preference suffix that controls if semantic highlighting has the text attribute strikethrough.
-	 * <p>
-	 * Value is of type <code>Boolean</code>: <code>true</code> if strikethrough.
-	 * </p>
-	 *
-	 * @since 3.1
-	 */
-	public static final String EDITOR_SEMANTIC_HIGHLIGHTING_STRIKETHROUGH_SUFFIX=".strikethrough"; //$NON-NLS-1$
-
-	/**
-	 * A named preference suffix that controls if semantic highlighting has the text attribute underline.
-	 * <p>
-	 * Value is of type <code>Boolean</code>: <code>true</code> if underline.
-	 * </p>
-	 *
-	 * @since 3.1
-	 */
-	public static final String EDITOR_SEMANTIC_HIGHLIGHTING_UNDERLINE_SUFFIX=".underline"; //$NON-NLS-1$
-
-}
diff --git a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/SingleTokenJavaScanner.java b/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/SingleTokenJavaScanner.java
deleted file mode 100644
index 5a4e5b2..0000000
--- a/bundles/org.eclipse.e4.tools.emf.ui.script.js/src/org/eclipse/e4/tools/emf/ui/script/js/text/scanners/SingleTokenJavaScanner.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.e4.tools.emf.ui.script.js.text.scanners;
-
-
-import java.util.List;
-
-import org.eclipse.e4.tools.services.IResourcePool;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.rules.IRule;
-
-
-/**
- *
- */
-public final class SingleTokenJavaScanner extends AbstractJavaScanner{
-
-
-	private String[] fProperty;
-
-	public SingleTokenJavaScanner(IResourcePool manager, IPreferenceStore store, String property) {
-		super(manager, store);
-		fProperty= new String[] { property };
-		initialize();
-	}
-
-	/*
-	 * @see AbstractJavaScanner#getTokenProperties()
-	 */
-	@Override
-	protected String[] getTokenProperties() {
-		return fProperty;
-	}
-
-	/*
-	 * @see AbstractJavaScanner#createRules()
-	 */
-	@Override
-	protected List<IRule> createRules() {
-		setDefaultReturnToken(getToken(fProperty[0]));
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.event.spy/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.event.spy/META-INF/MANIFEST.MF
index 1d78b2a..191c1e7 100644
--- a/bundles/org.eclipse.e4.tools.event.spy/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.tools.event.spy/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Event Spy
 Bundle-SymbolicName: org.eclipse.e4.tools.event.spy;singleton:=true
-Bundle-Version: 0.15.0.qualifier
+Bundle-Version: 0.19.0.qualifier
 Bundle-Vendor: Eclipse Foundation
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
@@ -12,7 +12,6 @@
  org.eclipse.e4.ui.model.workbench;bundle-version="1.0.0",
  org.eclipse.e4.core.services;bundle-version="1.1.0",
  javax.inject;bundle-version="1.0.0",
- org.eclipse.e4.ui.bindings;bundle-version="0.10.100",
  org.eclipse.core.resources;bundle-version="3.8.100",
  org.eclipse.jdt.core;bundle-version="3.9.0",
  org.eclipse.jdt.ui;bundle-version="3.9.0",
@@ -21,9 +20,7 @@
  org.eclipse.jface.databinding,
  org.eclipse.core.databinding.observable,
  org.eclipse.core.databinding.beans,
- org.eclipse.core.databinding.property,
- org.eclipse.e4.tools.spy,
- org.eclipse.e4.ui.di
+ org.eclipse.e4.tools.spy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Import-Package: javax.annotation;version="1.2.0"
diff --git a/bundles/org.eclipse.e4.tools.event.spy/pom.xml b/bundles/org.eclipse.e4.tools.event.spy/pom.xml
index 8c7fc60..0752b13 100644
--- a/bundles/org.eclipse.e4.tools.event.spy/pom.xml
+++ b/bundles/org.eclipse.e4.tools.event.spy/pom.xml
@@ -4,13 +4,13 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
   <groupId>org.eclipse.e4</groupId>
   <artifactId>org.eclipse.e4.tools.event.spy</artifactId>
-  <version>0.15.0-SNAPSHOT</version>
+  <version>0.19.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>
diff --git a/bundles/org.eclipse.e4.tools.model.spy/.classpath b/bundles/org.eclipse.e4.tools.model.spy/.classpath
deleted file mode 100644
index e801ebf..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?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-11"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.e4.tools.model.spy/.project b/bundles/org.eclipse.e4.tools.model.spy/.project
deleted file mode 100644
index fc7ec62..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.model.spy</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ds.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.core.runtime.prefs b/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 2f55e9a..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,315 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
-org.eclipse.jdt.core.compiler.compliance=11
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=120
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 4c3dee2..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,62 +0,0 @@
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile
-formatter_settings_version=12
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=true
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=true
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=true
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
-sp_cleanup.use_type_arguments=false
diff --git a/bundles/org.eclipse.e4.tools.model.spy/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.model.spy/META-INF/MANIFEST.MF
deleted file mode 100644
index d3071bc..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,26 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: org.eclipse.e4.tools.model.spy;singleton:=true
-Bundle-Version: 0.12.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Require-Bundle: org.eclipse.e4.ui.services;bundle-version="0.9.1",
- org.eclipse.e4.tools.emf.ui;bundle-version="0.9.0",
- org.eclipse.emf.edit;bundle-version="2.6.0",
- org.eclipse.core.databinding.observable;bundle-version="1.3.0",
- org.eclipse.equinox.common;bundle-version="3.6.0",
- org.eclipse.e4.ui.model.workbench;bundle-version="0.9.1",
- org.eclipse.core.resources;bundle-version="3.6.0",
- org.eclipse.e4.core.contexts;bundle-version="0.9.0",
- org.eclipse.e4.core.di;bundle-version="0.9.0",
- org.eclipse.jface;bundle-version="3.6.0",
- org.eclipse.equinox.registry;bundle-version="3.5.0",
- org.eclipse.e4.ui.di;bundle-version="0.9.0",
- org.eclipse.e4.tools.spy;bundle-version="0.18.0"
-Bundle-Vendor: %Bundle-Vendor
-Service-Component: OSGI-INF/extensionlookup.xml
-Bundle-ActivationPolicy: lazy
-Import-Package: javax.annotation;version="1.2.0",
- javax.inject;version="1.0.0"
-Export-Package: org.eclipse.e4.tools.model.spy;x-internal:=true
-Automatic-Module-Name: org.eclipse.e4.tools.model.spy
diff --git a/bundles/org.eclipse.e4.tools.model.spy/OSGI-INF/extensionlookup.xml b/bundles/org.eclipse.e4.tools.model.spy/OSGI-INF/extensionlookup.xml
deleted file mode 100644
index c2fb74f..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/OSGI-INF/extensionlookup.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.e4.tools.model.spy">
-   <implementation class="org.eclipse.e4.tools.model.spy.RuntimeExtensionLookup"/>
-   <service>
-      <provide interface="org.eclipse.e4.tools.emf.ui.common.IExtensionLookup"/>
-   </service>
-   <property name="service.ranking" type="Integer" value="0"/>
-</scr:component>
diff --git a/bundles/org.eclipse.e4.tools.model.spy/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.e4.tools.model.spy/OSGI-INF/l10n/bundle.properties
deleted file mode 100644
index 564d64d..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/OSGI-INF/l10n/bundle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-#Properties file for org.eclipse.e4.tools.model.spy
-Bundle-Name = ModelSpy
-Bundle-Vendor = Eclipse.org
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.model.spy/README.md b/bundles/org.eclipse.e4.tools.model.spy/README.md
deleted file mode 100644
index fa31978..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-org.eclipse.e4.tools.model.spy
-===================================
-
-Registers the e4 application model editor via a processor. See the ModelProcessor class.
-
-For more information, refer to the [Eclipse e4 wiki page] [1].
-
-License
--------
-
-[Eclipse Public License (EPL) v1.0][2]
-
-[1]: http://www.eclipse.org/e4/
-[2]: http://wiki.eclipse.org/EPL
diff --git a/bundles/org.eclipse.e4.tools.model.spy/about.html b/bundles/org.eclipse.e4.tools.model.spy/about.html
deleted file mode 100644
index 8249486..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-<title>About</title>
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>December 3, 2009</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
-at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
-being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was 
-provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.model.spy/build.properties b/bundles/org.eclipse.e4.tools.model.spy/build.properties
deleted file mode 100644
index b41fcbe..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/build.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               about.html,\
-               OSGI-INF/,\
-               OSGI-INF/extensionlookup.xml,\
-               icons/
-source.. = src/
diff --git a/bundles/org.eclipse.e4.tools.model.spy/forceQualifierUpdate.txt b/bundles/org.eclipse.e4.tools.model.spy/forceQualifierUpdate.txt
deleted file mode 100644
index 396f087..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/forceQualifierUpdate.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# To force a version qualifier update add the bug here
-Bug 403237 - o.e.e4.tools cannot be build with "mvn clean install"
diff --git a/bundles/org.eclipse.e4.tools.model.spy/icons/full/obj16/application_lightning.png b/bundles/org.eclipse.e4.tools.model.spy/icons/full/obj16/application_lightning.png
deleted file mode 100644
index 7e91545..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/icons/full/obj16/application_lightning.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.model.spy/plugin.xml b/bundles/org.eclipse.e4.tools.model.spy/plugin.xml
deleted file mode 100644
index 6978ccf..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/plugin.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-   <extension
-         point="org.eclipse.e4.tools.spy.spyPart">
-      <spyPart
-            description="Open the live model spy"
-            icon="icons/full/obj16/application_lightning.png"
-            name="Model Spy"
-            part="org.eclipse.e4.tools.model.spy.ModelSpyPart"
-            shortcut="M2+M3+F9">
-      </spyPart>
-   </extension>
-
-</plugin>
diff --git a/bundles/org.eclipse.e4.tools.model.spy/pom.xml b/bundles/org.eclipse.e4.tools.model.spy/pom.xml
deleted file mode 100644
index 07093aa..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/pom.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <artifactId>org.eclipse.e4.tools.model.spy</artifactId>
-  <version>0.12.100-SNAPSHOT</version>
-  <packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/MemoryModelResource.java b/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/MemoryModelResource.java
deleted file mode 100644
index 35c824e..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/MemoryModelResource.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 BestSolution.at and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- ******************************************************************************/
-package org.eclipse.e4.tools.model.spy;
-
-import org.eclipse.core.databinding.observable.list.IObservableList;
-import org.eclipse.core.databinding.observable.list.WritableList;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.e4.tools.emf.ui.common.IModelResource;
-import org.eclipse.e4.ui.model.application.MApplication;
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
-
-public class MemoryModelResource implements IModelResource {
-	private WritableList list = new WritableList<>();
-	private EditingDomain editingDomain;
-
-	public MemoryModelResource(MApplication application) {
-		list.add(application);
-		BasicCommandStack commandStack = new BasicCommandStack();
-		ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
-				ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
-		adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
-		editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack);
-	}
-
-	@Override
-	public IObservableList getRoot() {
-		return list;
-	}
-
-	@Override
-	public boolean isSaveable() {
-		return false;
-	}
-
-	@Override
-	public IStatus save() {
-		return Status.OK_STATUS;
-	}
-
-	@Override
-	public EditingDomain getEditingDomain() {
-		return editingDomain;
-	}
-
-	@Override
-	public boolean isDirty() {
-		return false;
-	}
-
-	@Override
-	public void addModelListener(ModelListener listener) {
-
-	}
-
-	@Override
-	public void removeModelListener(ModelListener listener) {
-
-	}
-
-	public IMarker createMarker() {
-		return null;
-	}
-
-	public void clearMarkers() {
-
-	}
-
-	@Override
-	public void replaceRoot(EObject eobject) {
-
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/ModelSpyPart.java b/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/ModelSpyPart.java
deleted file mode 100644
index abe6a82..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/ModelSpyPart.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 BestSolution.at and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- ******************************************************************************/
-package org.eclipse.e4.tools.model.spy;
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.core.contexts.ContextInjectionFactory;
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.tools.emf.ui.common.IModelResource;
-import org.eclipse.e4.tools.emf.ui.internal.wbm.ApplicationModelEditor;
-import org.eclipse.e4.ui.di.Focus;
-import org.eclipse.e4.ui.model.application.MApplication;
-
-public class ModelSpyPart {
-	private ApplicationModelEditor instance;
-	private IEclipseContext childContext;
-
-	@Inject
-	public ModelSpyPart(IEclipseContext context, MApplication application) {
-		childContext = context.createChild("EditorContext");
-		MemoryModelResource resource = new MemoryModelResource(application);
-		childContext.set(IModelResource.class, resource);
-
-		instance = ContextInjectionFactory.make(ApplicationModelEditor.class, childContext);
-	}
-
-	@Focus
-	void focus() {
-		ContextInjectionFactory.invoke(instance, Focus.class, childContext);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/OpenLiveDialogHandler.java b/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/OpenLiveDialogHandler.java
deleted file mode 100644
index 4494166..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/OpenLiveDialogHandler.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 BestSolution.at and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
- ******************************************************************************/
-package org.eclipse.e4.tools.model.spy;
-
-import javax.inject.Named;
-
-import org.eclipse.e4.core.contexts.ContextInjectionFactory;
-import org.eclipse.e4.core.contexts.IEclipseContext;
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.tools.emf.ui.common.IModelResource;
-import org.eclipse.e4.tools.emf.ui.internal.wbm.ApplicationModelEditor;
-import org.eclipse.e4.ui.model.application.MApplication;
-import org.eclipse.e4.ui.services.IServiceConstants;
-import org.eclipse.e4.ui.services.IStylingEngine;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-public class OpenLiveDialogHandler {
-	private Shell shell;
-
-	public OpenLiveDialogHandler() {
-	}
-
-	@Execute
-	public void run(@Named(IServiceConstants.ACTIVE_SHELL) Shell s, MApplication application, IStylingEngine engine) {
-		if (this.shell == null || this.shell.isDisposed()) {
-			try {
-				this.shell = new Shell(s, SWT.SHELL_TRIM);
-				// FIXME Style
-				this.shell.setBackground(shell.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-				this.shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
-				FillLayout layout = new FillLayout();
-				layout.marginHeight = 10;
-				layout.marginWidth = 10;
-				this.shell.setLayout(layout);
-
-				final IEclipseContext childContext = application.getContext().createChild("EditorContext");
-				MemoryModelResource resource = new MemoryModelResource(application);
-				childContext.set(IModelResource.class, resource);
-				childContext.set(Composite.class.getName(), shell);
-				childContext.set(Shell.class.getName(), shell);
-				ContextInjectionFactory.make(ApplicationModelEditor.class, childContext);
-
-				// new ApplicationModelEditor(shell, childContext, resource,
-				// null);
-				shell.open();
-				Display d = shell.getDisplay();
-				while (!shell.isDisposed()) {
-					if (!d.readAndDispatch()) {
-						d.sleep();
-					}
-				}
-				childContext.dispose();
-				// d.update();
-				shell = null;
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/RuntimeExtensionLookup.java b/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/RuntimeExtensionLookup.java
deleted file mode 100644
index 289285f..0000000
--- a/bundles/org.eclipse.e4.tools.model.spy/src/org/eclipse/e4/tools/model/spy/RuntimeExtensionLookup.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.eclipse.e4.tools.model.spy;
-
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.RegistryFactory;
-import org.eclipse.e4.tools.emf.ui.common.IExtensionLookup;
-
-public class RuntimeExtensionLookup implements IExtensionLookup {
-
-	@Override
-	public IExtension[] findExtensions(String extensionPointId, boolean liveModel) {
-		IExtensionRegistry registry = RegistryFactory.getRegistry();
-		return registry.getExtensionPoint(extensionPointId).getExtensions();
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/.classpath b/bundles/org.eclipse.e4.tools.preference.spy/.classpath
deleted file mode 100644
index e801ebf..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?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-11"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/.project b/bundles/org.eclipse.e4.tools.preference.spy/.project
deleted file mode 100644
index 545d2b6..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.preference.spy</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 2f55e9a..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,315 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
-org.eclipse.jdt.core.compiler.compliance=11
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
-org.eclipse.jdt.core.formatter.comment.line_length=80
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
-org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.lineSplit=120
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=false
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 940027d..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,62 +0,0 @@
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile
-formatter_settings_version=12
-sp_cleanup.add_default_serial_version_id=false
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=false
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=true
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=false
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=false
-sp_cleanup.on_save_use_additional_actions=true
-sp_cleanup.organize_imports=true
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=false
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=true
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=false
-sp_cleanup.remove_unused_private_members=true
-sp_cleanup.remove_unused_private_methods=false
-sp_cleanup.remove_unused_private_types=false
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=false
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false
-sp_cleanup.use_type_arguments=false
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.pde.core.prefs b/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.pde.core.prefs
deleted file mode 100644
index f29e940..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/.settings/org.eclipse.pde.core.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-eclipse.preferences.version=1
-pluginProject.extensions=false
-resolve.requirebundle=false
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.preference.spy/META-INF/MANIFEST.MF
deleted file mode 100644
index 4abf6be..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,29 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Spy
-Bundle-SymbolicName: org.eclipse.e4.tools.preference.spy;singleton:=true
-Bundle-Version: 0.2.0.qualifier
-Bundle-Activator: org.eclipse.e4.tools.preference.spy.Activator
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.e4.ui.model.workbench;bundle-version="1.1.0",
- org.eclipse.e4.core.di;bundle-version="1.4.0",
- org.eclipse.e4.core.di.extensions;bundle-version="0.12.0",
- org.eclipse.e4.core.services;bundle-version="1.2.0",
- org.eclipse.osgi.services;bundle-version="3.4.0",
- javax.inject,
- org.eclipse.e4.ui.di;bundle-version="1.0.0",
- org.eclipse.core.databinding;bundle-version="1.4.1",
- org.eclipse.core.databinding.beans;bundle-version="1.2.200",
- org.eclipse.core.databinding.observable;bundle-version="1.4.1",
- org.eclipse.core.databinding.property;bundle-version="1.4.200",
- org.eclipse.jface.databinding;bundle-version="1.6.200",
- org.eclipse.e4.ui.services;bundle-version="1.1.0",
- org.eclipse.e4.ui.workbench;bundle-version="1.1.0",
- org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.e4.tools.spy
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: javax.annotation;version="1.2.0"
-Bundle-ActivationPolicy: lazy
-Automatic-Module-Name: org.eclipse.e4.tools.preference.spy
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/build.properties b/bundles/org.eclipse.e4.tools.preference.spy/build.properties
deleted file mode 100644
index 2cefd72..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-output.. = bin/
-bin.includes = plugin.xml,\
-               META-INF/,\
-               .,\
-               icons/,\
-               fragment.e4xmi
-source.. = src/
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/fragment.e4xmi b/bundles/org.eclipse.e4.tools.preference.spy/fragment.e4xmi
deleted file mode 100644
index c6ae35d..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/fragment.e4xmi
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<fragment:ModelFragments xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/descriptor/basic" xmlns:commands="http://www.eclipse.org/ui/2010/UIModel/application/commands" xmlns:fragment="http://www.eclipse.org/ui/2010/UIModel/fragment" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_YKjYcGxMEeSQ7v0akw7aRA">
-  <fragments xsi:type="fragment:StringModelFragment" xmi:id="_wcDNcGxMEeSQ7v0akw7aRA" featurename="addons" parentElementId="xpath:/">
-    <elements xsi:type="application:Addon" xmi:id="_ztg-MGxMEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.addon" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.addon.PreferenceSpyAddon">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-  </fragments>
-  <fragments xsi:type="fragment:StringModelFragment" xmi:id="_P3fYQGxbEeSQ7v0akw7aRA" featurename="descriptors" parentElementId="xpath:/">
-    <elements xsi:type="basic:PartDescriptor" xmi:id="_T4iy4GxbEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.parts.PreferenceSpyPart" label="Preference Spy" iconURI="platform:/plugin/org.eclipse.e4.tools.preference.spy/icons/preference_spy.png" category="Eclipse runtime spies" closeable="true" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.parts.PreferenceSpyPart">
-      <tags>View</tags>
-      <tags>Spy</tags>
-      <tags>categoryTag:Eclipse runtime spies</tags>
-      <toolbar xmi:id="_z17t0GxhEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.toolbar">
-        <children xsi:type="menu:ToolControl" xmi:id="_HKPQsIboEeS8O7Wb7Enz2Q" elementId="org.eclipse.e4.tools.preference.spy.toolcontrol.layout" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.handler.ToggleLayoutControl"/>
-        <children xsi:type="menu:ToolBarSeparator" xmi:id="_BW4yAIboEeS8O7Wb7Enz2Q" elementId="org.eclipse.e4.tools.preference.spy.toolbarseparator.0"/>
-        <children xsi:type="menu:HandledToolItem" xmi:id="_WhdsMHY7EeSuTdKDH5hMwg" elementId="org.eclipse.e4.tools.preference.spy.handledtoolitem.showall" iconURI="platform:/plugin/org.eclipse.e4.tools.preference.spy/icons/show_all_preferences.png" command="_ufxRsHY2EeSuTdKDH5hMwg"/>
-        <children xsi:type="menu:ToolControl" xmi:id="_D4kokIVcEeSI3e-Kt-dGSA" elementId="org.eclipse.e4.tools.preference.spy.toolcontrol.trace" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.handler.TogglePreferenceTraceControl"/>
-        <children xsi:type="menu:ToolBarSeparator" xmi:id="_xSwgEH_hEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.toolbarseparator.1"/>
-        <children xsi:type="menu:HandledToolItem" xmi:id="_zYuuEH_hEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.handledtoolitem.expandall" iconURI="platform:/plugin/org.eclipse.e4.tools.preference.spy/icons/expandall.png" command="_4NM_IH_gEeSk-4v3KnNHPw"/>
-        <children xsi:type="menu:HandledToolItem" xmi:id="_4wyX4H_hEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.handledtoolitem.collapseall" iconURI="platform:/plugin/org.eclipse.e4.tools.preference.spy/icons/collapseall.png" command="_68UQwH_gEeSk-4v3KnNHPw"/>
-        <children xsi:type="menu:ToolBarSeparator" xmi:id="_7dG0MH_hEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.toolbarseparator.2"/>
-        <children xsi:type="menu:HandledToolItem" xmi:id="_A6VYQGxiEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.handledtoolitem.removeentry" iconURI="platform:/plugin/org.eclipse.e4.tools.preference.spy/icons/remove_co.png" command="_iGEkYGxiEeSQ7v0akw7aRA"/>
-        <children xsi:type="menu:HandledToolItem" xmi:id="_Tj_JEGxkEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.handledtoolitem.removeall" iconURI="platform:/plugin/org.eclipse.e4.tools.preference.spy/icons/removeall_co.png" command="_eBGTEGxiEeSQ7v0akw7aRA"/>
-      </toolbar>
-    </elements>
-  </fragments>
-  <fragments xsi:type="fragment:StringModelFragment" xmi:id="_YcT00GxiEeSQ7v0akw7aRA" featurename="commands" parentElementId="xpath:/">
-    <elements xsi:type="commands:Command" xmi:id="_eBGTEGxiEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.command.removeAll" commandName="Remove All">
-      <persistedState key="persistState" value="false"/>
-      <parameters xmi:id="_ujUuENlxEemSlqvMhebMxQ" elementId="org.eclipse.e4.tools.preference.spy.commandparameter.0" name="Command Parameter 0"/>
-    </elements>
-    <elements xsi:type="commands:Command" xmi:id="_iGEkYGxiEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.command.removeEntry" commandName="Remove Entry">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-    <elements xsi:type="commands:Command" xmi:id="_ufxRsHY2EeSuTdKDH5hMwg" elementId="org.eclipse.e4.tools.preference.spy.command.showAllPreferences" commandName="Show All Preferences">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-    <elements xsi:type="commands:Command" xmi:id="_4NM_IH_gEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.command.expandAll" commandName="Expand All">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-    <elements xsi:type="commands:Command" xmi:id="_68UQwH_gEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.command.collapseAll" commandName="Collapse All">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-  </fragments>
-  <fragments xsi:type="fragment:StringModelFragment" xmi:id="_k-5ysGxiEeSQ7v0akw7aRA" featurename="handlers" parentElementId="xpath:/">
-    <elements xsi:type="commands:Handler" xmi:id="_oq-b0GxiEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.handler.removeall" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.handler.RemoveAllHandler" command="_eBGTEGxiEeSQ7v0akw7aRA">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-    <elements xsi:type="commands:Handler" xmi:id="_xiIpwGxiEeSQ7v0akw7aRA" elementId="org.eclipse.e4.tools.preference.spy.handler.removeentry" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.handler.RemoveEntryHandler" command="_iGEkYGxiEeSQ7v0akw7aRA">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-    <elements xsi:type="commands:Handler" xmi:id="_zPHVsHY2EeSuTdKDH5hMwg" elementId="org.eclipse.e4.tools.preference.spy.handler.showall" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.handler.ShowAllPreferencesHandler" command="_ufxRsHY2EeSuTdKDH5hMwg">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-    <elements xsi:type="commands:Handler" xmi:id="_3S1ooH_gEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.handler.expandall" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.handler.ExpandAllHandler" command="_4NM_IH_gEeSk-4v3KnNHPw">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-    <elements xsi:type="commands:Handler" xmi:id="_9SoA0H_gEeSk-4v3KnNHPw" elementId="org.eclipse.e4.tools.preference.spy.handler.collapseall" contributionURI="bundleclass://org.eclipse.e4.tools.preference.spy/org.eclipse.e4.tools.preference.spy.handler.CollapseAllHandler" command="_68UQwH_gEeSk-4v3KnNHPw">
-      <persistedState key="persistState" value="false"/>
-    </elements>
-  </fragments>
-</fragment:ModelFragments>
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/collapseall.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/collapseall.png
deleted file mode 100644
index a40ba4e..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/collapseall.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/expandall.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/expandall.png
deleted file mode 100644
index fcdfcbd..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/expandall.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/flatLayout.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/flatLayout.png
deleted file mode 100644
index 06750ba..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/flatLayout.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/hierarchicalLayout.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/hierarchicalLayout.png
deleted file mode 100644
index ae6d660..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/hierarchicalLayout.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/preference_spy.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/preference_spy.png
deleted file mode 100644
index 42508a4..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/preference_spy.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/remove_co.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/remove_co.png
deleted file mode 100644
index d1cd8b6..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/remove_co.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/removeall_co.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/removeall_co.png
deleted file mode 100644
index e968f58..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/removeall_co.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/show_all_preferences.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/show_all_preferences.png
deleted file mode 100644
index c0aa2ab..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/show_all_preferences.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/icons/trace_preferences.png b/bundles/org.eclipse.e4.tools.preference.spy/icons/trace_preferences.png
deleted file mode 100644
index 78ef0c9..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/icons/trace_preferences.png
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/plugin.xml b/bundles/org.eclipse.e4.tools.preference.spy/plugin.xml
deleted file mode 100644
index caff153..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/plugin.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plugin>
-
-   <extension
-         id="org.eclipse.e4.tools.preference.spy.fragment"
-         point="org.eclipse.e4.workbench.model">
-      <fragment
-            uri="fragment.e4xmi">
-      </fragment>
-   </extension>
-   <extension
-         point="org.eclipse.ui.preferencePages">
-      <page
-            class="org.eclipse.e4.tools.preference.spy.preferencepage.TracePreferencePage"
-            id="org.eclipse.e4.tools.preference.spy.tracepreferencespage"
-            name="Preference Spy">
-      </page>
-   </extension>
-   <extension
-         point="org.eclipse.e4.tools.spy.spyPart">
-      <spyPart
-            description="Spy to display preferences"
-            icon="icons/preference_spy.png"
-            name="Preference Spy"
-            part="org.eclipse.e4.tools.preference.spy.parts.PreferenceSpyPart"
-            shortcut="M2+M3+F11">
-      </spyPart>
-   </extension>
-   <!--extension
-         point="org.eclipse.e4.tools.spy.spyPart">
-      <spyPart
-            description="This spy is used to inspect the Eclipse Preferences"
-            icon="icons/preference_spy.png"
-            name="Preference Spy"
-            part="org.eclipse.e4.tools.preference.spy.parts.PreferenceSpyPart"
-            shortcut="M1 + M2 + M3 + F10">
-      </spyPart>
-   </extension-->
-
-</plugin>
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/pom.xml b/bundles/org.eclipse.e4.tools.preference.spy/pom.xml
deleted file mode 100644
index 3a11ada..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/pom.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <artifactId>org.eclipse.e4.tools.preference.spy</artifactId>
-  <version>0.2.0-SNAPSHOT</version>
-  <packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/Activator.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/Activator.java
deleted file mode 100644
index 781b2a4..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/Activator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends AbstractUIPlugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.e4.tools.preference.spy"; //$NON-NLS-1$
-
-	// The shared instance
-	private static Activator plugin;
-
-	/**
-	 * The constructor
-	 */
-	public Activator() {
-	}
-
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
-	}
-
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/addon/PreferenceSpyAddon.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/addon/PreferenceSpyAddon.java
deleted file mode 100644
index a50ae11..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/addon/PreferenceSpyAddon.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.addon;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.eclipse.core.internal.preferences.EclipsePreferences;
-import org.eclipse.core.runtime.preferences.BundleDefaultsScope;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
-import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
-import org.eclipse.core.runtime.preferences.IPreferenceNodeVisitor;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.e4.core.di.annotations.Optional;
-import org.eclipse.e4.core.di.extensions.Preference;
-import org.eclipse.e4.core.services.events.IEventBroker;
-import org.eclipse.e4.core.services.log.Logger;
-import org.eclipse.e4.tools.preference.spy.Activator;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceConstants;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceSpyEventTopics;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.osgi.service.prefs.BackingStoreException;
-
-/**
- * This model addon is used to register an IPreferenceChangeListener for all
- * {@link EclipsePreferences} and it fires an
- * {@link PreferenceSpyEventTopics#PREFERENCESPY_PREFERENCE_CHANGED} event via
- * the {@link IEventBroker}.<br/>
- * The Object, which is send within the
- * {@link PreferenceSpyEventTopics#PREFERENCESPY_PREFERENCE_CHANGED} event is a
- * PreferenceChangeEvent.
- *
- */
-@SuppressWarnings("restriction")
-public class PreferenceSpyAddon {
-
-	@Inject
-	private Logger LOG;
-
-	@Inject
-	private IEventBroker eventBroker;
-
-	private IEclipsePreferences bundleDefaultsScopePreferences = BundleDefaultsScope.INSTANCE.getNode("");
-	private IEclipsePreferences configurationScopePreferences = ConfigurationScope.INSTANCE.getNode("");
-	private IEclipsePreferences defaultScopePreferences = DefaultScope.INSTANCE.getNode("");
-	private IEclipsePreferences instanceScopePreferences = InstanceScope.INSTANCE.getNode("");
-
-	private ChangedPreferenceListener preferenceChangedListener = new ChangedPreferenceListener();
-
-	@Inject
-	@Optional
-	public void initialzePreferenceSpy(
-			@Preference(value = PreferenceConstants.TRACE_PREFERENCES) boolean tracePreferences) {
-		if (tracePreferences) {
-			registerVisitors();
-		} else {
-			deregisterVisitors();
-		}
-	}
-
-	private void registerVisitors() {
-		addPreferenceListener(bundleDefaultsScopePreferences);
-		addPreferenceListener(configurationScopePreferences);
-		addPreferenceListener(defaultScopePreferences);
-		addPreferenceListener(instanceScopePreferences);
-	}
-
-	private void addPreferenceListener(IEclipsePreferences rootPreference) {
-		try {
-			rootPreference.accept(new IPreferenceNodeVisitor() {
-				@Override
-				public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-					node.addPreferenceChangeListener(preferenceChangedListener);
-					return true;
-				}
-			});
-		} catch (BackingStoreException e) {
-			LOG.error(e);
-		}
-	}
-
-	private void deregisterVisitors() {
-		removePreferenceListener(bundleDefaultsScopePreferences);
-		removePreferenceListener(configurationScopePreferences);
-		removePreferenceListener(defaultScopePreferences);
-		removePreferenceListener(instanceScopePreferences);
-	}
-
-	private void removePreferenceListener(IEclipsePreferences rootPreference) {
-		try {
-			rootPreference.accept(new IPreferenceNodeVisitor() {
-				@Override
-				public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-					node.removePreferenceChangeListener(preferenceChangedListener);
-					return true;
-				}
-			});
-		} catch (BackingStoreException e) {
-			LOG.error(e);
-		}
-	}
-
-	@PostConstruct
-	public void initializeDefaultPreferences() {
-		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
-		store.setDefault(PreferenceConstants.TRACE_PREFERENCES, false);
-	}
-
-	private final class ChangedPreferenceListener implements IPreferenceChangeListener {
-
-		@Override
-		public void preferenceChange(PreferenceChangeEvent event) {
-			eventBroker.post(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_CHANGED, event);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/constants/PreferenceConstants.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/constants/PreferenceConstants.java
deleted file mode 100644
index b421049..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/constants/PreferenceConstants.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.constants;
-
-/**
- * Constant definitions for plug-in preferences
- */
-public class PreferenceConstants {
-
-	public enum ViewerLayouts {
-		Flat, Hierarchical;
-	}
-
-	public static final String TRACE_PREFERENCES = "tracepreferences";
-	public static final String HIERARCHICAL_LAYOUT = "hierarchicalLayoutPreference";
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/constants/PreferenceSpyEventTopics.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/constants/PreferenceSpyEventTopics.java
deleted file mode 100644
index d3b7fe0..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/constants/PreferenceSpyEventTopics.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.constants;
-
-public interface PreferenceSpyEventTopics {
-
-	public static final String PREFERENCESPY_PREFERENCE_ENTRIES_DELETE_ALL = "TOPIC_PREFERENCESPY/PREFERENCE_ENTRIES/DELETE_ALL";
-	public static final String PREFERENCESPY_PREFERENCE_ENTRIES_DELETE = "TOPIC_PREFERENCESPY/PREFERENCE_ENTRIES/DELETE";
-
-	public static final String PREFERENCESPY_PREFERENCE_CHANGED = "TOPIC_PREFERENCESPY/PREFERENCE/CHANGED";
-	public static final String PREFERENCESPY_PREFERENCE_SHOW = "TOPIC_PREFERENCESPY/PREFERENCE/SHOW";
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/CollapseAllHandler.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/CollapseAllHandler.java
deleted file mode 100644
index 30f28b7..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/CollapseAllHandler.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.handler;
-
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.tools.preference.spy.parts.TreeViewerPart;
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-
-public class CollapseAllHandler {
-
-	@Execute
-	public void execute(MPart part) {
-		Object partImpl = part.getObject();
-		if (partImpl instanceof TreeViewerPart) {
-			((TreeViewerPart) partImpl).getViewer().collapseAll();
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ExpandAllHandler.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ExpandAllHandler.java
deleted file mode 100644
index 980797a..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ExpandAllHandler.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.handler;
-
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.tools.preference.spy.parts.TreeViewerPart;
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;
-
-public class ExpandAllHandler {
-
-	@Execute
-	public void execute(MPart part) {
-		Object partImpl = part.getObject();
-		if (partImpl instanceof TreeViewerPart) {
-			((TreeViewerPart) partImpl).getViewer().expandAll();
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/RemoveAllHandler.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/RemoveAllHandler.java
deleted file mode 100644
index bbf0e51..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/RemoveAllHandler.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.handler;
-
-import java.util.List;
-
-import javax.inject.Named;
-
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.core.di.annotations.Optional;
-import org.eclipse.e4.core.services.events.IEventBroker;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceSpyEventTopics;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.e4.ui.services.IServiceConstants;
-
-public class RemoveAllHandler {
-	@Execute
-	public void execute(IEventBroker eventBroker,
-			@Optional @Named(IServiceConstants.ACTIVE_SELECTION) List<PreferenceEntry> preferenceEntries) {
-		eventBroker.post(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_ENTRIES_DELETE_ALL, preferenceEntries);
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/RemoveEntryHandler.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/RemoveEntryHandler.java
deleted file mode 100644
index 5c09f5d..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/RemoveEntryHandler.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.handler;
-
-import java.util.List;
-
-import javax.inject.Named;
-
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.core.di.annotations.Optional;
-import org.eclipse.e4.core.services.events.IEventBroker;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceSpyEventTopics;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.e4.ui.services.IServiceConstants;
-
-public class RemoveEntryHandler {
-	@Execute
-	public void execute(IEventBroker eventBroker,
-			@Optional @Named(IServiceConstants.ACTIVE_SELECTION) List<PreferenceEntry> preferenceEntries) {
-		eventBroker.post(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_ENTRIES_DELETE, preferenceEntries);
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ShowAllPreferencesHandler.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ShowAllPreferencesHandler.java
deleted file mode 100644
index 7e0c548..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ShowAllPreferencesHandler.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.handler;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.preferences.BundleDefaultsScope;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
-import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IPreferenceNodeVisitor;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.e4.core.services.events.IEventBroker;
-import org.eclipse.e4.tools.preference.spy.Activator;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceSpyEventTopics;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceNodeEntry;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.osgi.service.prefs.BackingStoreException;
-
-public class ShowAllPreferencesHandler {
-	@Execute
-	public void execute(Shell shell, IEventBroker eventBroker) {
-		Map<String, PreferenceNodeEntry> preferenceEntries = new HashMap<String, PreferenceNodeEntry>();
-		IEclipsePreferences bundleDefaultsScopePreferences = BundleDefaultsScope.INSTANCE.getNode("");
-		IEclipsePreferences configurationScopePreferences = ConfigurationScope.INSTANCE.getNode("");
-		IEclipsePreferences defaultScopePreferences = DefaultScope.INSTANCE.getNode("");
-		IEclipsePreferences instanceScopePreferences = InstanceScope.INSTANCE.getNode("");
-		try {
-			bundleDefaultsScopePreferences.accept(new PrefereneGatherer(preferenceEntries));
-			configurationScopePreferences.accept(new PrefereneGatherer(preferenceEntries));
-			defaultScopePreferences.accept(new PrefereneGatherer(preferenceEntries));
-			instanceScopePreferences.accept(new PrefereneGatherer(preferenceEntries));
-		} catch (BackingStoreException e) {
-			Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
-			ErrorDialog.openError(shell, "BackingStoreException", e.getLocalizedMessage(), status);
-		}
-		eventBroker.post(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_SHOW, preferenceEntries.values());
-	}
-
-	private class PrefereneGatherer implements IPreferenceNodeVisitor {
-
-		private Map<String, PreferenceNodeEntry> preferenceEntries;
-
-		public PrefereneGatherer(Map<String, PreferenceNodeEntry> preferenceEntries) {
-			this.preferenceEntries = preferenceEntries;
-		}
-
-		@Override
-		public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-			// only show nodes, which have changed keys
-			String[] keys = node.keys();
-			if (keys.length <= 0) {
-				return true;
-			}
-			PreferenceNodeEntry preferenceNodeEntry = preferenceEntries.get(node.absolutePath());
-			if (null == preferenceNodeEntry) {
-				preferenceNodeEntry = new PreferenceNodeEntry(node.absolutePath());
-				preferenceEntries.put(node.absolutePath(), preferenceNodeEntry);
-			}
-			for (String key : keys) {
-				String value = node.get(key, "*default*");
-				PreferenceEntry preferenceEntry = new PreferenceEntry(node.absolutePath(), key, value, value);
-				preferenceNodeEntry.addChildren(preferenceEntry);
-			}
-			return true;
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ToggleLayoutControl.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ToggleLayoutControl.java
deleted file mode 100644
index ee4d573..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/ToggleLayoutControl.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.handler;
-
-import java.net.URL;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.inject.Inject;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.e4.core.di.extensions.Preference;
-import org.eclipse.e4.core.services.log.Logger;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceConstants;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.resource.LocalResourceManager;
-import org.eclipse.jface.resource.ResourceManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.service.prefs.BackingStoreException;
-
-@SuppressWarnings("restriction")
-public class ToggleLayoutControl {
-
-	@Inject
-	Logger LOG;
-
-	private ToolItem toolItem;
-	private ResourceManager resourceManager;
-
-	@Inject
-	public void tracePreferenceChanged(
-			@Preference(value = PreferenceConstants.HIERARCHICAL_LAYOUT) boolean hierarchicalLayoutPreference) {
-		if (toolItem != null && !toolItem.isDisposed()) {
-			toolItem.setSelection(hierarchicalLayoutPreference);
-			toolItem.setImage(
-					hierarchicalLayoutPreference ? getResourceManager().createImage(getHierarchicalImageDescriptor())
-							: getResourceManager().createImage(getFlatImageDescriptor()));
-			toolItem.setToolTipText(
-					hierarchicalLayoutPreference ? "Toogle to flat layout" : "Toggle to hierarchical layout");
-		}
-	}
-
-	@PostConstruct
-	public void createGui(Composite parent, final @Preference IEclipsePreferences preferences,
-			@Preference(value = PreferenceConstants.HIERARCHICAL_LAYOUT) boolean hierarchicalLayoutPreference) {
-		ToolBar toolBar = new ToolBar(parent, SWT.NONE);
-		toolItem = new ToolItem(toolBar, SWT.CHECK);
-		toolItem.setToolTipText(
-				hierarchicalLayoutPreference ? "Toogle to flat layout" : "Toggle to hierarchical layout");
-		toolItem.addSelectionListener(new SelectionAdapter() {
-
-			@Override
-			public void widgetSelected(SelectionEvent event) {
-				Object source = event.getSource();
-				if (source instanceof ToolItem) {
-					preferences.putBoolean(PreferenceConstants.HIERARCHICAL_LAYOUT, ((ToolItem) source).getSelection());
-					try {
-						preferences.flush();
-					} catch (BackingStoreException e) {
-						LOG.error(e);
-					}
-				}
-			}
-		});
-		tracePreferenceChanged(hierarchicalLayoutPreference);
-	}
-
-	@PreDestroy
-	public void dispose() {
-		if (resourceManager != null) {
-			resourceManager.dispose();
-		}
-	}
-
-	protected ResourceManager getResourceManager() {
-		if (null == resourceManager) {
-			resourceManager = new LocalResourceManager(JFaceResources.getResources());
-		}
-		return resourceManager;
-	}
-
-	protected ImageDescriptor getFlatImageDescriptor() {
-		Bundle bundle = FrameworkUtil.getBundle(getClass());
-		URL url = FileLocator.find(bundle, new Path("icons/flatLayout.png"), null);
-		return ImageDescriptor.createFromURL(url);
-	}
-
-	protected ImageDescriptor getHierarchicalImageDescriptor() {
-		Bundle bundle = FrameworkUtil.getBundle(getClass());
-		URL url = FileLocator.find(bundle, new Path("icons/hierarchicalLayout.png"), null);
-		return ImageDescriptor.createFromURL(url);
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/TogglePreferenceTraceControl.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/TogglePreferenceTraceControl.java
deleted file mode 100644
index 598b380..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/handler/TogglePreferenceTraceControl.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.handler;
-
-import java.net.URL;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.inject.Inject;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.e4.core.di.extensions.Preference;
-import org.eclipse.e4.core.services.log.Logger;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceConstants;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.resource.LocalResourceManager;
-import org.eclipse.jface.resource.ResourceManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.service.prefs.BackingStoreException;
-
-@SuppressWarnings("restriction")
-public class TogglePreferenceTraceControl {
-
-	@Inject
-	Logger LOG;
-
-	private ToolItem toolItem;
-	private ResourceManager resourceManager;
-
-	@Inject
-	public void tracePreferenceChanged(
-			@Preference(value = PreferenceConstants.TRACE_PREFERENCES) boolean tracePreferences) {
-		if (toolItem != null && !toolItem.isDisposed()) {
-			toolItem.setSelection(tracePreferences);
-		}
-	}
-
-	@PostConstruct
-	public void createGui(Composite parent, final @Preference IEclipsePreferences preferences,
-			@Preference(value = PreferenceConstants.TRACE_PREFERENCES) boolean tracePreferences) {
-		ToolBar toolBar = new ToolBar(parent, SWT.NONE);
-		toolItem = new ToolItem(toolBar, SWT.CHECK);
-		toolItem.setSelection(tracePreferences);
-		toolItem.setToolTipText("Toggle Preference Trace");
-		toolItem.setImage(getResourceManager().createImage(getImageDescriptor()));
-		toolItem.addSelectionListener(new SelectionAdapter() {
-
-			@Override
-			public void widgetSelected(SelectionEvent event) {
-				Object source = event.getSource();
-				if (source instanceof ToolItem) {
-					preferences.putBoolean(PreferenceConstants.TRACE_PREFERENCES, ((ToolItem) source).getSelection());
-					try {
-						preferences.flush();
-					} catch (BackingStoreException e) {
-						LOG.error(e);
-					}
-				}
-			}
-		});
-	}
-
-	@PreDestroy
-	public void dispose() {
-		if (resourceManager != null) {
-			resourceManager.dispose();
-		}
-	}
-
-	protected ResourceManager getResourceManager() {
-		if (null == resourceManager) {
-			resourceManager = new LocalResourceManager(JFaceResources.getResources());
-		}
-		return resourceManager;
-	}
-
-	protected ImageDescriptor getImageDescriptor() {
-		Bundle bundle = FrameworkUtil.getBundle(getClass());
-		URL url = FileLocator.find(bundle, new Path("icons/trace_preferences.png"), null);
-		return ImageDescriptor.createFromURL(url);
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/AbstractModelObject.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/AbstractModelObject.java
deleted file mode 100644
index 5c203ad..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/AbstractModelObject.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.model;
-
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-
-public abstract class AbstractModelObject {
-	private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
-
-	public void addPropertyChangeListener(PropertyChangeListener listener) {
-		propertyChangeSupport.addPropertyChangeListener(listener);
-	}
-
-	public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
-	}
-
-	public void removePropertyChangeListener(PropertyChangeListener listener) {
-		propertyChangeSupport.removePropertyChangeListener(listener);
-	}
-
-	public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
-		propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
-	}
-
-	protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
-		propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
-	}
-
-	protected void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {
-		propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
-	}
-
-	protected void firePropertyChange(String propertyName, int oldValue, int newValue) {
-		propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntry.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntry.java
deleted file mode 100644
index d51b5d2..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntry.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.model;
-
-public class PreferenceEntry extends AbstractModelObject {
-
-	public enum Fields {
-		nodePath, key, oldValue, newValue;
-	}
-
-	private PreferenceEntry parent;
-
-	private boolean recentlyChanged;
-
-	private String nodePath;
-
-	private String key;
-
-	private String oldValue;
-
-	private String newValue;
-
-	private long time;
-
-	public PreferenceEntry() {
-	}
-
-	public PreferenceEntry(String nodePath, String key) {
-		this.nodePath = nodePath;
-		this.key = key;
-	}
-
-	public PreferenceEntry(String nodePath, String key, String oldValue, String newValue) {
-		this.nodePath = nodePath;
-		this.key = key;
-		this.oldValue = oldValue;
-		this.newValue = newValue;
-	}
-
-	public PreferenceEntry(PreferenceEntry parent, String nodePath, String key, String oldValue, String newValue) {
-		this.nodePath = nodePath;
-		this.key = key;
-		this.oldValue = oldValue;
-		this.newValue = newValue;
-	}
-
-	public PreferenceEntry getParent() {
-		return parent;
-	}
-
-	public void setParent(PreferenceEntry parent) {
-		firePropertyChange("parent", this.parent, this.parent = parent);
-	}
-
-	public String getNodePath() {
-		return nodePath;
-	}
-
-	public void setNodePath(String nodePath) {
-		firePropertyChange("nodePath", this.nodePath, this.nodePath = nodePath);
-	}
-
-	public String getKey() {
-		return key;
-	}
-
-	public void setKey(String key) {
-		firePropertyChange("key", this.key, this.key = key);
-	}
-
-	public String getOldValue() {
-		return oldValue;
-	}
-
-	public void setOldValue(String oldValue) {
-		firePropertyChange("oldValue", this.oldValue, this.oldValue = oldValue);
-	}
-
-	public String getNewValue() {
-		return newValue;
-	}
-
-	public void setNewValue(String newValue) {
-		firePropertyChange("newValue", this.newValue, this.newValue = newValue);
-	}
-
-	public boolean isRecentlyChanged() {
-		return recentlyChanged;
-	}
-
-	public void setRecentlyChanged(boolean recentlyChanged) {
-		firePropertyChange("recentlyChanged", this.recentlyChanged, this.recentlyChanged = recentlyChanged);
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((key == null) ? 0 : key.hashCode());
-		result = prime * result + ((newValue == null) ? 0 : newValue.hashCode());
-		result = prime * result + ((nodePath == null) ? 0 : nodePath.hashCode());
-		result = prime * result + ((oldValue == null) ? 0 : oldValue.hashCode());
-		result = prime * result + ((parent == null) ? 0 : parent.hashCode());
-		result = prime * result + (recentlyChanged ? 1231 : 1237);
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj) {
-			return true;
-		}
-		if (obj == null) {
-			return false;
-		}
-		if (getClass() != obj.getClass()) {
-			return false;
-		}
-		PreferenceEntry other = (PreferenceEntry) obj;
-		if (key == null) {
-			if (other.key != null) {
-				return false;
-			}
-		} else if (!key.equals(other.key)) {
-			return false;
-		}
-		if (newValue == null) {
-			if (other.newValue != null) {
-				return false;
-			}
-		} else if (!newValue.equals(other.newValue)) {
-			return false;
-		}
-		if (nodePath == null) {
-			if (other.nodePath != null) {
-				return false;
-			}
-		} else if (!nodePath.equals(other.nodePath)) {
-			return false;
-		}
-		if (oldValue == null) {
-			if (other.oldValue != null) {
-				return false;
-			}
-		} else if (!oldValue.equals(other.oldValue)) {
-			return false;
-		}
-		if (parent == null) {
-			if (other.parent != null) {
-				return false;
-			}
-		} else if (!parent.equals(other.parent)) {
-			return false;
-		}
-		if (recentlyChanged != other.recentlyChanged) {
-			return false;
-		}
-		return true;
-	}
-
-	public long getTime() {
-		return time;
-	}
-
-	public void setTime(long time) {
-		this.time = time;
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntryManager.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntryManager.java
deleted file mode 100644
index 0ce979c..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntryManager.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.model;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class PreferenceEntryManager extends PreferenceNodeEntry {
-
-	private Map<String, PreferenceNodeEntry> recentPreferenceEntries = new HashMap<String, PreferenceNodeEntry>();
-
-	public PreferenceEntryManager() {
-	}
-
-	public PreferenceNodeEntry getRecentPreferenceNodeEntry(String nodePath) {
-		return recentPreferenceEntries.get(nodePath);
-	}
-
-	public PreferenceNodeEntry removeRecentPreferenceNodeEntry(String nodePath) {
-		return recentPreferenceEntries.remove(nodePath);
-	}
-
-	public void clearRecentPreferenceNodeEntry() {
-		recentPreferenceEntries.clear();
-	}
-
-	public void putRecentPreferenceEntry(String nodePath, PreferenceNodeEntry preferenceNodeEntry) {
-		recentPreferenceEntries.put(nodePath, preferenceNodeEntry);
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntryPatternFilter.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntryPatternFilter.java
deleted file mode 100644
index 4cdb09b..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceEntryPatternFilter.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.model;
-
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.ui.dialogs.PatternFilter;
-
-public class PreferenceEntryPatternFilter extends PatternFilter {
-
-	public PreferenceEntryPatternFilter() {
-		super();
-	}
-
-	@Override
-	protected boolean isLeafMatch(Viewer viewer, Object element) {
-
-		if (element instanceof PreferenceEntry) {
-			PreferenceEntry preferenceEntry = (PreferenceEntry) element;
-			if (wordMatches(preferenceEntry.getNodePath()) || wordMatches(preferenceEntry.getKey())
-					|| wordMatches(preferenceEntry.getOldValue()) || wordMatches(preferenceEntry.getNewValue())) {
-				return true;
-			}
-		}
-
-		return super.isLeafMatch(viewer, element);
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceNodeEntry.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceNodeEntry.java
deleted file mode 100644
index 6a579aa..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/model/PreferenceNodeEntry.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.model;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.eclipse.core.databinding.observable.set.IObservableSet;
-import org.eclipse.core.databinding.observable.set.WritableSet;
-
-public class PreferenceNodeEntry extends PreferenceEntry {
-
-	private IObservableSet preferenceEntries = new WritableSet<>();
-
-	public PreferenceNodeEntry() {
-		super();
-	}
-
-	public PreferenceNodeEntry(String nodePath) {
-		super(nodePath, "", "", "");
-	}
-
-	public void addChildren(Collection<PreferenceEntry> entries) {
-		getPreferenceEntries().addAll(entries);
-	}
-
-	public boolean addChildren(PreferenceEntry... entry) {
-		return getPreferenceEntries().addAll(Arrays.asList(entry));
-	}
-
-	public void removeChildren(Collection<PreferenceEntry> entries) {
-		getPreferenceEntries().removeAll(entries);
-	}
-
-	public void removeChildren(PreferenceEntry... entry) {
-		getPreferenceEntries().removeAll(Arrays.asList(entry));
-	}
-
-	public IObservableSet getPreferenceEntries() {
-		return preferenceEntries;
-	}
-
-	public void setPreferenceEntries(IObservableSet preferenceEntries) {
-		this.preferenceEntries = preferenceEntries;
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/PreferenceSpyPart.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/PreferenceSpyPart.java
deleted file mode 100644
index 55dc32f..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/PreferenceSpyPart.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.parts;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-
-import org.eclipse.core.databinding.beans.typed.BeanProperties;
-import org.eclipse.core.databinding.observable.Realm;
-import org.eclipse.core.databinding.observable.set.IObservableSet;
-import org.eclipse.core.databinding.property.Properties;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
-import org.eclipse.e4.core.di.annotations.Optional;
-import org.eclipse.e4.core.di.extensions.Preference;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceConstants;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceSpyEventTopics;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry.Fields;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntryManager;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntryPatternFilter;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceNodeEntry;
-import org.eclipse.e4.tools.preference.spy.parts.viewer.PreferenceEntriesContentProvider;
-import org.eclipse.e4.tools.preference.spy.parts.viewer.PreferenceEntryViewerComparator;
-import org.eclipse.e4.tools.preference.spy.parts.viewer.PreferenceMapLabelProvider;
-import org.eclipse.e4.tools.preference.spy.parts.viewer.PreferenceSpyEditingSupport;
-import org.eclipse.e4.ui.di.UIEventTopic;
-import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
-import org.eclipse.e4.ui.workbench.modeling.EModelService;
-import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
-import org.eclipse.jface.databinding.swt.DisplayRealm;
-import org.eclipse.jface.resource.FontDescriptor;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.TreeViewerColumn;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.ui.dialogs.FilteredTree;
-
-public class PreferenceSpyPart implements TreeViewerPart {
-
-	private FilteredTree filteredTree;
-	private boolean hierarchicalLayoutPreference;
-	private PreferenceEntryManager preferenceEntryManager;
-
-	@PostConstruct
-	public void postConstruct(Composite parent, final ESelectionService selectionService, EModelService modelService,
-			MWindow window) {
-
-		preferenceEntryManager = new PreferenceEntryManager();
-
-		PreferenceEntryPatternFilter patternFilter = new PreferenceEntryPatternFilter();
-		patternFilter.setIncludeLeadingWildcard(true);
-		filteredTree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, patternFilter,
-				true, true);
-
-		Tree table = filteredTree.getViewer().getTree();
-		table.setHeaderVisible(true);
-		table.setLinesVisible(true);
-
-		filteredTree.getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
-
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				ISelection selection = event.getSelection();
-				if (selection instanceof IStructuredSelection) {
-					@SuppressWarnings("unchecked")
-					ArrayList<PreferenceEntry> preferenceEntries = new ArrayList<PreferenceEntry>(
-							((IStructuredSelection) selection).toList());
-					selectionService.setSelection(preferenceEntries);
-				}
-			}
-		});
-
-		createColumn(Fields.nodePath, "Nodepath", 300);
-		createColumn(Fields.key, "Key", 300);
-		createColumn(Fields.oldValue, "Old Value", 150);
-		createColumn(Fields.newValue, "New Value", 150);
-
-		filteredTree.getViewer().setComparator(new PreferenceEntryViewerComparator());
-
-		FontDescriptor fontDescriptor = getBoldFontDescriptor();
-
-		Realm realm = DisplayRealm.getRealm(filteredTree.getViewer().getControl().getDisplay());
-		PreferenceEntriesContentProvider contentProvider = new PreferenceEntriesContentProvider(
-				BeanProperties.set("preferenceEntries", PreferenceNodeEntry.class).setFactory(realm), null);
-		contentProvider.setHierarchicalLayout(hierarchicalLayoutPreference);
-		filteredTree.getViewer().setContentProvider(contentProvider);
-		filteredTree.getViewer().setLabelProvider(new PreferenceMapLabelProvider(fontDescriptor,
-				Properties.observeEach(contentProvider.getKnownElements(), BeanProperties.values(PreferenceEntry.class, "nodePath", "key", "oldValue", "newValue"))));
-		filteredTree.getViewer().setInput(preferenceEntryManager);
-	}
-
-	private FontDescriptor getBoldFontDescriptor() {
-		Font origFont = filteredTree.getViewer().getControl().getFont();
-		FontDescriptor fontDescriptor = FontDescriptor.createFrom(origFont);
-		return fontDescriptor.setStyle(SWT.BOLD);
-	}
-
-	private void createColumn(Fields field, String columnName, int width) {
-		TreeViewerColumn viewerColumn = new TreeViewerColumn(filteredTree.getViewer(), SWT.NONE);
-		viewerColumn.getColumn().setWidth(width);
-		viewerColumn.getColumn().setText(columnName);
-
-		viewerColumn.setLabelProvider(new ColumnLabelProvider());
-		viewerColumn.setEditingSupport(new PreferenceSpyEditingSupport(filteredTree.getViewer(), field));
-	}
-
-	@Inject
-	public void layoutChanged(
-			@Preference(value = PreferenceConstants.HIERARCHICAL_LAYOUT) boolean hierarchicalLayoutPreference) {
-		this.hierarchicalLayoutPreference = hierarchicalLayoutPreference;
-		if (filteredTree != null && !filteredTree.getViewer().getControl().isDisposed()) {
-			PreferenceEntriesContentProvider contentProvider = (PreferenceEntriesContentProvider) filteredTree
-					.getViewer().getContentProvider();
-			contentProvider.setHierarchicalLayout(hierarchicalLayoutPreference);
-			filteredTree.getViewer().refresh();
-		}
-	}
-
-	@Inject
-	@Optional
-	public void preferenceChanged(
-			@UIEventTopic(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_CHANGED) PreferenceChangeEvent event) {
-
-		PreferenceNodeEntry preferenceNodeEntry = preferenceEntryManager
-				.getRecentPreferenceNodeEntry(event.getNode().absolutePath());
-		PreferenceEntry preferenceEntry = new PreferenceEntry(event.getNode().absolutePath(), event.getKey());
-		preferenceEntry.setRecentlyChanged(true);
-		if (null == preferenceNodeEntry) {
-			preferenceNodeEntry = new PreferenceNodeEntry(event.getNode().absolutePath());
-			preferenceNodeEntry.setRecentlyChanged(true);
-			preferenceNodeEntry.addChildren(preferenceEntry);
-			preferenceEntry.setParent(preferenceNodeEntry);
-			preferenceEntryManager.addChildren(preferenceNodeEntry);
-			filteredTree.getViewer().setInput(preferenceEntryManager);
-			preferenceEntryManager.putRecentPreferenceEntry(event.getNode().absolutePath(), preferenceNodeEntry);
-		} else {
-			preferenceEntry.setParent(preferenceNodeEntry);
-			PreferenceEntry existingPreferenceEntry = findPreferenceEntry(preferenceEntry);
-			if (existingPreferenceEntry != null) {
-				preferenceEntry = existingPreferenceEntry;
-			} else {
-				preferenceNodeEntry.addChildren(preferenceEntry);
-			}
-		}
-
-		preferenceEntry.setOldValue(String.valueOf(event.getOldValue()));
-		preferenceEntry.setNewValue(String.valueOf(event.getNewValue()));
-		long currentTimeMillis = System.currentTimeMillis();
-		preferenceEntry.setTime(currentTimeMillis);
-		preferenceEntry.getParent().setTime(currentTimeMillis);
-
-		filteredTree.getViewer().refresh();
-	}
-
-	private PreferenceEntry findPreferenceEntry(PreferenceEntry preferenceEntry) {
-		PreferenceEntry parent = preferenceEntry.getParent();
-		if (parent instanceof PreferenceNodeEntry) {
-			IObservableSet preferenceEntries = ((PreferenceNodeEntry) parent).getPreferenceEntries();
-			for (Object object : preferenceEntries) {
-				if (object instanceof PreferenceEntry) {
-					PreferenceEntry existingPreferenceEntry = (PreferenceEntry) object;
-					if (existingPreferenceEntry.getKey().equals(preferenceEntry.getKey())) {
-						return existingPreferenceEntry;
-					}
-				}
-			}
-		}
-		return null;
-	}
-
-	@Inject
-	@Optional
-	public void preferenceChanged(
-			@UIEventTopic(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_SHOW) Collection<PreferenceEntry> preferenceEntries) {
-		preferenceEntryManager.addChildren(preferenceEntries);
-		filteredTree.getViewer().refresh();
-	}
-
-	@Inject
-	@Optional
-	public void DeletePreferenceEntries(
-			@UIEventTopic(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_ENTRIES_DELETE) List<PreferenceEntry> preferenceEntries) {
-		if (preferenceEntries != null && !preferenceEntries.isEmpty()) {
-			for (PreferenceEntry preferenceEntry : preferenceEntries) {
-				preferenceEntryManager.removeChildren(preferenceEntry);
-			}
-			preferenceEntryManager.removeChildren(preferenceEntries);
-			filteredTree.getViewer().refresh();
-		}
-	}
-
-	@Inject
-	@Optional
-	public void DeleteAllPreferenceEntries(
-			@UIEventTopic(PreferenceSpyEventTopics.PREFERENCESPY_PREFERENCE_ENTRIES_DELETE_ALL) List<PreferenceEntry> preferenceEntries) {
-		if (preferenceEntryManager != null) {
-			preferenceEntryManager.clearRecentPreferenceNodeEntry();
-			preferenceEntryManager.getPreferenceEntries().clear();
-			filteredTree.getViewer().refresh();
-		}
-	}
-
-	@Override
-	public TreeViewer getViewer() {
-		return filteredTree.getViewer();
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/TreeViewerPart.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/TreeViewerPart.java
deleted file mode 100644
index 066cf03..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/TreeViewerPart.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.parts;
-
-import org.eclipse.jface.viewers.TreeViewer;
-
-public interface TreeViewerPart {
-
-	public TreeViewer getViewer();
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceEntriesContentProvider.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceEntriesContentProvider.java
deleted file mode 100644
index da5b2b5..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceEntriesContentProvider.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.parts.viewer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
-import org.eclipse.core.databinding.observable.set.IObservableSet;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceNodeEntry;
-import org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider;
-import org.eclipse.jface.databinding.viewers.TreeStructureAdvisor;
-
-public class PreferenceEntriesContentProvider extends ObservableSetTreeContentProvider {
-
-	private boolean hierarchicalLayout;
-
-	public PreferenceEntriesContentProvider(IObservableFactory setFactory, TreeStructureAdvisor structureAdvisor) {
-		super(setFactory, structureAdvisor);
-	}
-
-	@Override
-	public Object[] getElements(Object inputElement) {
-		Object[] children = super.getElements(inputElement);
-		if (isHierarchicalLayout()) {
-			return children;
-		}
-
-		List<PreferenceEntry> childList = new ArrayList<PreferenceEntry>();
-
-		for (Object object : children) {
-			getChildren(object, childList);
-		}
-
-		return childList.toArray();
-	}
-
-	private void getChildren(Object element, List<PreferenceEntry> childList) {
-		if (element instanceof PreferenceNodeEntry) {
-			IObservableSet preferenceEntries = ((PreferenceNodeEntry) element).getPreferenceEntries();
-			for (Object object : preferenceEntries) {
-				getChildren(object, childList);
-			}
-		} else if (element instanceof PreferenceEntry) {
-			childList.add((PreferenceEntry) element);
-		}
-	}
-
-	public boolean isHierarchicalLayout() {
-		return hierarchicalLayout;
-	}
-
-	public void setHierarchicalLayout(boolean hierarchicalLayout) {
-		this.hierarchicalLayout = hierarchicalLayout;
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceEntryViewerComparator.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceEntryViewerComparator.java
deleted file mode 100644
index 3d4eaaf..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceEntryViewerComparator.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.parts.viewer;
-
-import java.util.Comparator;
-
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerComparator;
-
-public class PreferenceEntryViewerComparator extends ViewerComparator {
-
-	public PreferenceEntryViewerComparator() {
-	}
-
-	public PreferenceEntryViewerComparator(Comparator<? super String> comparator) {
-		super(comparator);
-	}
-
-	@Override
-	public int compare(Viewer viewer, Object e1, Object e2) {
-		if (e1 instanceof PreferenceEntry && e2 instanceof PreferenceEntry) {
-			PreferenceEntry entry1 = (PreferenceEntry) e1;
-			PreferenceEntry entry2 = (PreferenceEntry) e2;
-
-			long time = entry1.getTime();
-			long time2 = entry2.getTime();
-
-			if (time != 0 && time2 != 0) {
-				return (int) (time2 - time);
-			}
-		}
-
-		return super.compare(viewer, e1, e2);
-	}
-
-	@Override
-	public int category(Object element) {
-		if (element instanceof PreferenceEntry) {
-			return ((PreferenceEntry) element).isRecentlyChanged() ? 0 : 1;
-		}
-		return 2;
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceMapLabelProvider.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceMapLabelProvider.java
deleted file mode 100644
index 65b2805..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceMapLabelProvider.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.parts.viewer;
-
-import org.eclipse.core.databinding.observable.map.IObservableMap;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
-import org.eclipse.jface.resource.FontDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.resource.LocalResourceManager;
-import org.eclipse.jface.resource.ResourceManager;
-import org.eclipse.jface.viewers.IFontProvider;
-import org.eclipse.swt.graphics.Font;
-
-public class PreferenceMapLabelProvider extends ObservableMapLabelProvider implements IFontProvider {
-
-	private LocalResourceManager resourceManager;
-	private FontDescriptor fontDescriptor;
-
-	public PreferenceMapLabelProvider(FontDescriptor fontDescriptor, IObservableMap attributeMap) {
-		this(fontDescriptor, new IObservableMap[] { attributeMap });
-	}
-
-	public PreferenceMapLabelProvider(FontDescriptor fontDescriptor, IObservableMap[] attributeMaps) {
-		super(attributeMaps);
-		Assert.isNotNull(fontDescriptor, "<fontDescriptor> must not be null");
-		this.fontDescriptor = fontDescriptor;
-	}
-
-	@Override
-	public String getColumnText(Object element, int columnIndex) {
-		String columnText = super.getColumnText(element, columnIndex);
-		if ("".equals(columnText) && element instanceof PreferenceEntry) {
-			PreferenceEntry entry = (PreferenceEntry) element;
-			switch (columnIndex) {
-			case 1:
-				columnText = entry.getKey();
-				break;
-			case 2:
-				columnText = entry.getOldValue();
-				break;
-			case 3:
-				columnText = entry.getNewValue();
-				break;
-			default:
-				columnText = entry.getNodePath();
-				break;
-			}
-		}
-		return columnText;
-	}
-
-	@Override
-	public Font getFont(Object element) {
-		if (element instanceof PreferenceEntry && ((PreferenceEntry) element).isRecentlyChanged()) {
-			return getResourceManager().createFont(fontDescriptor);
-		}
-		return null;
-	}
-
-	@Override
-	public void dispose() {
-		super.dispose();
-		if (resourceManager != null) {
-			resourceManager.dispose();
-		}
-	}
-
-	protected ResourceManager getResourceManager() {
-		if (null == resourceManager) {
-			resourceManager = new LocalResourceManager(JFaceResources.getResources());
-		}
-		return resourceManager;
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceSpyEditingSupport.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceSpyEditingSupport.java
deleted file mode 100644
index 98a38fc..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/parts/viewer/PreferenceSpyEditingSupport.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.parts.viewer;
-
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry;
-import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry.Fields;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.ColumnViewer;
-import org.eclipse.jface.viewers.EditingSupport;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-
-public class PreferenceSpyEditingSupport extends EditingSupport {
-
-	private Fields field;
-
-	public PreferenceSpyEditingSupport(ColumnViewer viewer, Fields field) {
-		super(viewer);
-		this.field = field;
-	}
-
-	@Override
-	protected CellEditor getCellEditor(Object element) {
-		return new TextCellEditor((Composite) getViewer().getControl(), SWT.READ_ONLY);
-	}
-
-	@Override
-	protected boolean canEdit(Object element) {
-		return true;
-	}
-
-	@Override
-	protected Object getValue(Object element) {
-		String value = null;
-		if (element instanceof PreferenceEntry) {
-			PreferenceEntry preferenceEntry = (PreferenceEntry) element;
-			switch (field) {
-			case nodePath:
-				value = preferenceEntry.getNodePath();
-				break;
-			case key:
-				value = preferenceEntry.getKey();
-				break;
-			case oldValue:
-				value = preferenceEntry.getOldValue();
-				break;
-			case newValue:
-				value = preferenceEntry.getNewValue();
-				break;
-			default:
-				break;
-			}
-		}
-
-		return value;
-	}
-
-	@Override
-	protected void setValue(Object element, Object value) {
-	}
-
-}
diff --git a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/preferencepage/TracePreferencePage.java b/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/preferencepage/TracePreferencePage.java
deleted file mode 100644
index 7958399..0000000
--- a/bundles/org.eclipse.e4.tools.preference.spy/src/org/eclipse/e4/tools/preference/spy/preferencepage/TracePreferencePage.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 vogella GmbH.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.e4.tools.preference.spy.preferencepage;
-
-import org.eclipse.e4.tools.preference.spy.Activator;
-import org.eclipse.e4.tools.preference.spy.constants.PreferenceConstants;
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-
-public class TracePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
-
-	public TracePreferencePage() {
-		super(GRID);
-		setPreferenceStore(Activator.getDefault().getPreferenceStore());
-		setDescription("Settings for the preference spy");
-	}
-
-	/**
-	 * Creates the field editors
-	 */
-	@Override
-	public void createFieldEditors() {
-		addField(new BooleanFieldEditor(PreferenceConstants.TRACE_PREFERENCES, "&Trace preference values ",
-				getFieldEditorParent()));
-		addField(new BooleanFieldEditor(PreferenceConstants.HIERARCHICAL_LAYOUT, "&Use hierarchical layout in the tree",
-				getFieldEditorParent()));
-	}
-
-	@Override
-	public void init(IWorkbench workbench) {
-	}
-}
diff --git a/bundles/org.eclipse.e4.tools.spy/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.spy/META-INF/MANIFEST.MF
index 4bf7916..2f1b32c 100644
--- a/bundles/org.eclipse.e4.tools.spy/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.e4.tools.spy/META-INF/MANIFEST.MF
@@ -2,19 +2,15 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Common for Spies
 Bundle-SymbolicName: org.eclipse.e4.tools.spy;singleton:=true
-Bundle-Version: 0.18.0.qualifier
+Bundle-Version: 0.19.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: javax.inject;bundle-version="1.0.0",
  org.eclipse.e4.ui.model.workbench,
- org.eclipse.core.runtime;bundle-version="3.9.0",
+ org.eclipse.core.runtime;bundle-version="3.24.0",
  org.eclipse.e4.core.di,
  org.eclipse.e4.core.services,
  org.eclipse.e4.ui.workbench,
- org.eclipse.e4.ui.services,
- org.eclipse.e4.core.contexts,
- org.eclipse.e4.ui.di,
- org.eclipse.equinox.event
-Import-Package: javax.annotation;version="1.2.0"
+ org.eclipse.e4.ui.di
 Bundle-Vendor: Eclipse Foundation
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.e4.tools.spy;x-internal:=true
diff --git a/bundles/org.eclipse.e4.tools.spy/pom.xml b/bundles/org.eclipse.e4.tools.spy/pom.xml
index 546f4fa..80798e8 100644
--- a/bundles/org.eclipse.e4.tools.spy/pom.xml
+++ b/bundles/org.eclipse.e4.tools.spy/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
diff --git a/features/org.eclipse.e4.tools.bundle.spy.feature/pom.xml b/features/org.eclipse.e4.tools.bundle.spy.feature/pom.xml
index dd581c6..75f28ab 100644
--- a/features/org.eclipse.e4.tools.bundle.spy.feature/pom.xml
+++ b/features/org.eclipse.e4.tools.bundle.spy.feature/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
@@ -19,6 +19,7 @@
 			<plugin>
 				<groupId>org.eclipse.tycho.extras</groupId>
 				<artifactId>tycho-source-feature-plugin</artifactId>
+				<version>${tycho.version}</version>
 				<executions>
 					<execution>
 						<phase>package</phase>
diff --git a/features/org.eclipse.e4.tools.context.spy.feature/pom.xml b/features/org.eclipse.e4.tools.context.spy.feature/pom.xml
index 9017418..d4c5a36 100644
--- a/features/org.eclipse.e4.tools.context.spy.feature/pom.xml
+++ b/features/org.eclipse.e4.tools.context.spy.feature/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
@@ -19,6 +19,7 @@
 			<plugin>
 				<groupId>org.eclipse.tycho.extras</groupId>
 				<artifactId>tycho-source-feature-plugin</artifactId>
+				<version>${tycho.version}</version>
 				<executions>
 					<execution>
 						<phase>package</phase>
diff --git a/features/org.eclipse.e4.tools.css.spy.feature/.project b/features/org.eclipse.e4.tools.css.spy.feature/.project
deleted file mode 100644
index 5951d92..0000000
--- a/features/org.eclipse.e4.tools.css.spy.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.css.spy.feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/features/org.eclipse.e4.tools.css.spy.feature/.settings/org.eclipse.core.runtime.prefs b/features/org.eclipse.e4.tools.css.spy.feature/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/features/org.eclipse.e4.tools.css.spy.feature/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/features/org.eclipse.e4.tools.css.spy.feature/build.properties b/features/org.eclipse.e4.tools.css.spy.feature/build.properties
deleted file mode 100644
index 3104d6d..0000000
--- a/features/org.eclipse.e4.tools.css.spy.feature/build.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-bin.includes = feature.xml,\
-               feature.properties
diff --git a/features/org.eclipse.e4.tools.css.spy.feature/feature.properties b/features/org.eclipse.e4.tools.css.spy.feature/feature.properties
deleted file mode 100644
index 062ca0c..0000000
--- a/features/org.eclipse.e4.tools.css.spy.feature/feature.properties
+++ /dev/null
@@ -1,149 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2009 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-#     Brian de Alwis (MT) - adapted for CSS Spy
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=E4 CSS Spy (Incubation)
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the update site
-secondaryUpdateSiteName=Juno Discovery Site
-
-
-# "description" property - description of the feature
-description=CSS Spy for E4
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2011 Brian de Alwis and others.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Brian de Alwis (MT) - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/features/org.eclipse.e4.tools.css.spy.feature/feature.xml b/features/org.eclipse.e4.tools.css.spy.feature/feature.xml
deleted file mode 100644
index 0df5328..0000000
--- a/features/org.eclipse.e4.tools.css.spy.feature/feature.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.e4.tools.css.spy.feature"
-      label="%featureName"
-      version="0.14.0.qualifier"
-      provider-name="%providerName"
-      license-feature="org.eclipse.license"
-      license-feature-version="0.0.0">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <requires>
-      <import plugin="org.eclipse.e4.ui.css.core" version="0.9.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.swt" version="3.6.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.jface" version="3.8.0" match="greaterOrEqual"/>
-      <import plugin="org.w3c.css.sac"/>
-   </requires>
-
-   <plugin
-         id="org.eclipse.e4.tools.css.spy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.tools.spy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/features/org.eclipse.e4.tools.css.spy.feature/forceQualifierUpdate.txt b/features/org.eclipse.e4.tools.css.spy.feature/forceQualifierUpdate.txt
deleted file mode 100644
index 396f087..0000000
--- a/features/org.eclipse.e4.tools.css.spy.feature/forceQualifierUpdate.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# To force a version qualifier update add the bug here
-Bug 403237 - o.e.e4.tools cannot be build with "mvn clean install"
diff --git a/features/org.eclipse.e4.tools.css.spy.feature/pom.xml b/features/org.eclipse.e4.tools.css.spy.feature/pom.xml
deleted file mode 100644
index 29b304f..0000000
--- a/features/org.eclipse.e4.tools.css.spy.feature/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <artifactId>org.eclipse.e4.tools.css.spy.feature</artifactId>
-  <version>0.14.0-SNAPSHOT</version>
-  <packaging>eclipse-feature</packaging>
-
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.eclipse.tycho.extras</groupId>
-				<artifactId>tycho-source-feature-plugin</artifactId>
-				<executions>
-					<execution>
-						<phase>package</phase>
-						<id>source-feature</id>
-						<goals>
-							<goal>source-feature</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-p2-plugin</artifactId>
-				<version>${tycho.version}</version>
-				<executions>
-					<execution>
-						<id>attached-p2-metadata</id>
-						<phase>package</phase>
-						<goals>
-							<goal>p2-metadata</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-</project>
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/.project b/features/org.eclipse.e4.tools.e3x.bridge.feature/.project
deleted file mode 100644
index 39a8a71..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.e3x.bridge.feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/.settings/org.eclipse.core.runtime.prefs b/features/org.eclipse.e4.tools.e3x.bridge.feature/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/build.properties b/features/org.eclipse.e4.tools.e3x.bridge.feature/build.properties
deleted file mode 100644
index b3a611b..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/build.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-bin.includes = feature.xml,\
-               feature.properties
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/feature.properties b/features/org.eclipse.e4.tools.e3x.bridge.feature/feature.properties
deleted file mode 100755
index b518081..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/feature.properties
+++ /dev/null
@@ -1,149 +0,0 @@
-###############################################################################
-# Copyright (c) 2011 BestSolution.at and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=Eclipse e4 Tools Bridge for 3.x (Incubation)
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the update site
-secondaryUpdateSiteName=Ganymede Discovery Site
-
-
-# "description" property - description of the feature
-description=Eclipse e4 Tools Bridge for 3.x
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2010 BestSolution.at, Soyatec and others.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    BestSolution.at - initial API and implementation\n\
-    Soytec - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/feature.xml b/features/org.eclipse.e4.tools.e3x.bridge.feature/feature.xml
deleted file mode 100644
index 8a4054b..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/feature.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.e4.tools.e3x.bridge.feature"
-      label="%featureName"
-      version="0.14.0.qualifier"
-      provider-name="%providerName"
-      license-feature="org.eclipse.license"
-      license-feature-version="0.0.0">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <plugin
-         id="javax.annotation"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="javax.inject"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.batik.css"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.batik.util"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.core.contexts"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.core.di"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.core.di.extensions"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.core.services"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.tools.compat"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.tools.services"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.ui.css.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.ui.css.swt"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.ui.css.swt.theme"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.ui.di"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.ui.services"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.ui.widgets"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.emf.common"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.w3c.css.sac"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.w3c.dom.smil"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.w3c.dom.svg"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/forceQualifierUpdate.txt b/features/org.eclipse.e4.tools.e3x.bridge.feature/forceQualifierUpdate.txt
deleted file mode 100644
index 396f087..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/forceQualifierUpdate.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# To force a version qualifier update add the bug here
-Bug 403237 - o.e.e4.tools cannot be build with "mvn clean install"
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/pom.xml b/features/org.eclipse.e4.tools.e3x.bridge.feature/pom.xml
deleted file mode 100644
index 7de3c17..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <artifactId>org.eclipse.e4.tools.e3x.bridge.feature</artifactId>
-  <version>0.14.0-SNAPSHOT</version>
-  <packaging>eclipse-feature</packaging>
-
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.eclipse.tycho.extras</groupId>
-				<artifactId>tycho-source-feature-plugin</artifactId>
-				<executions>
-					<execution>
-						<phase>package</phase>
-						<id>source-feature</id>
-						<goals>
-							<goal>source-feature</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-p2-plugin</artifactId>
-				<version>${tycho.version}</version>
-				<executions>
-					<execution>
-						<id>attached-p2-metadata</id>
-						<phase>package</phase>
-						<goals>
-							<goal>p2-metadata</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-</project>
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/eclipse_update_120.jpg b/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/eclipse_update_120.jpg
deleted file mode 100755
index bfdf708..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/feature.properties b/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/feature.properties
deleted file mode 100755
index a4ad155..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/feature.properties
+++ /dev/null
@@ -1,144 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=Eclipse e4 Tools Bridge for 3.x Source (Incubation)
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "description" property - description of the feature
-description=Source code zips for Eclipse E4 initiative.
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2010 BestSolution.at, Soyatec and others.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/license.html b/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/license.html
deleted file mode 100755
index c6af966..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplateFeature/license.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<title>Eclipse.org Software User Agreement</title>
-</head>
-
-<body lang="EN-US" link=blue vlink=purple>
-<h2>Eclipse Foundation Software User Agreement</h2>
-<p>March 17, 2005</p>
-
-<h3>Usage Of Content</h3>
-
-<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
-   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
-   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
-   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
-   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
-   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
-   
-<h3>Applicable Licenses</h3>   
-   
-<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
-   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository (&quot;Repository&quot;) in CVS
-   modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
-   
-<ul>
-	<li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
-	<li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
-	<li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
-      and/or Fragments associated with that Feature.</li>
-	<li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
-</ul>   
- 
-<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
-Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module
-including, but not limited to the following locations:</p>
-
-<ul>
-	<li>The top-level (root) directory</li>
-	<li>Plug-in and Fragment directories</li>
-	<li>Inside Plug-ins and Fragments packaged as JARs</li>
-	<li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
-	<li>Feature directories</li>
-</ul>
-		
-<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license (&quot;Feature Update License&quot;) during the
-installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
-inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
-that directory.</p>
-
-<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
-
-<ul>
-	<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
-	<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
-	<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
-	<li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>	
-	<li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
-	<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
-</ul>
-
-<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
-
-<h3>Cryptography</h3>
-
-<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
-   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
-   possession, or use, and re-export of encryption software, to see if this is permitted.</p>
-   
-<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>   
-</body>
-</html>
diff --git a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplatePlugin/build.properties b/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplatePlugin/build.properties
deleted file mode 100755
index 779b8f4..0000000
--- a/features/org.eclipse.e4.tools.e3x.bridge.feature/sourceTemplatePlugin/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2006 IBM Corporation and others.
-#
-# This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License 2.0
-# which accompanies this distribution, and is available at
-# https://www.eclipse.org/legal/epl-2.0/
-#
-# SPDX-License-Identifier: EPL-2.0
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-bin.includes = plugin.xml, src/**, META-INF/
-sourcePlugin = true
diff --git a/features/org.eclipse.e4.tools.event.spy.feature/pom.xml b/features/org.eclipse.e4.tools.event.spy.feature/pom.xml
index 6d62eaa..644437e 100644
--- a/features/org.eclipse.e4.tools.event.spy.feature/pom.xml
+++ b/features/org.eclipse.e4.tools.event.spy.feature/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
@@ -18,6 +18,7 @@
 			<plugin>
 				<groupId>org.eclipse.tycho.extras</groupId>
 				<artifactId>tycho-source-feature-plugin</artifactId>
+				<version>${tycho.version}</version>
 				<executions>
 					<execution>
 						<phase>package</phase>
diff --git a/features/org.eclipse.e4.tools.model.spy.feature/.project b/features/org.eclipse.e4.tools.model.spy.feature/.project
deleted file mode 100644
index 447607a..0000000
--- a/features/org.eclipse.e4.tools.model.spy.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.model.spy.feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/features/org.eclipse.e4.tools.model.spy.feature/build.properties b/features/org.eclipse.e4.tools.model.spy.feature/build.properties
deleted file mode 100644
index b3a611b..0000000
--- a/features/org.eclipse.e4.tools.model.spy.feature/build.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-bin.includes = feature.xml,\
-               feature.properties
diff --git a/features/org.eclipse.e4.tools.model.spy.feature/feature.properties b/features/org.eclipse.e4.tools.model.spy.feature/feature.properties
deleted file mode 100644
index 16273cd..0000000
--- a/features/org.eclipse.e4.tools.model.spy.feature/feature.properties
+++ /dev/null
@@ -1,148 +0,0 @@
-###############################################################################
-# Copyright (c) 2014, Wim Jongman and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     Wim Jongman - Implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=Eclipse 4 - Model Spy (Incubation) 
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the update site
-secondaryUpdateSiteName=Mars Discovery Site
-
-
-# "description" property - description of the feature
-description=A spy to investigate and alter the Eclipse 4 model (Incubation)
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2014 Wim Jongman, and others.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Wim Jongman (http://remainsoftware.com) - initial implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/features/org.eclipse.e4.tools.model.spy.feature/feature.xml b/features/org.eclipse.e4.tools.model.spy.feature/feature.xml
deleted file mode 100644
index 038a541..0000000
--- a/features/org.eclipse.e4.tools.model.spy.feature/feature.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.e4.tools.model.spy.feature"
-      label="%featureName"
-      version="0.1.100.qualifier"
-      provider-name="%providerName"
-      license-feature="org.eclipse.license"
-      license-feature-version="0.0.0">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <plugin
-         id="org.eclipse.e4.tools.spy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.tools.model.spy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/features/org.eclipse.e4.tools.model.spy.feature/pom.xml b/features/org.eclipse.e4.tools.model.spy.feature/pom.xml
deleted file mode 100644
index 14b9d42..0000000
--- a/features/org.eclipse.e4.tools.model.spy.feature/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <artifactId>org.eclipse.e4.tools.model.spy.feature</artifactId>
-  <version>0.1.100-SNAPSHOT</version>
-  <packaging>eclipse-feature</packaging>
-
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.eclipse.tycho.extras</groupId>
-				<artifactId>tycho-source-feature-plugin</artifactId>
-				<executions>
-					<execution>
-						<phase>package</phase>
-						<id>source-feature</id>
-						<goals>
-							<goal>source-feature</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-p2-plugin</artifactId>
-				<version>${tycho.version}</version>
-				<executions>
-					<execution>
-						<id>attached-p2-metadata</id>
-						<phase>package</phase>
-						<goals>
-							<goal>p2-metadata</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-</project>
diff --git a/features/org.eclipse.e4.tools.preference.spy.feature/.project b/features/org.eclipse.e4.tools.preference.spy.feature/.project
deleted file mode 100644
index db7c88b..0000000
--- a/features/org.eclipse.e4.tools.preference.spy.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.e4.tools.preference.spy.feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/features/org.eclipse.e4.tools.preference.spy.feature/build.properties b/features/org.eclipse.e4.tools.preference.spy.feature/build.properties
deleted file mode 100644
index b692f5f..0000000
--- a/features/org.eclipse.e4.tools.preference.spy.feature/build.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-bin.includes = feature.xml,\
-               feature.properties
\ No newline at end of file
diff --git a/features/org.eclipse.e4.tools.preference.spy.feature/feature.properties b/features/org.eclipse.e4.tools.preference.spy.feature/feature.properties
deleted file mode 100644
index a619b07..0000000
--- a/features/org.eclipse.e4.tools.preference.spy.feature/feature.properties
+++ /dev/null
@@ -1,148 +0,0 @@
-###############################################################################
-# Copyright (c) 2015 vogella GmbH and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     Simon Scholz <simon.scholz@vogella.com> - initial API and implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=E4 Preference Spy Feature (Incubation)
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Project Updates
-
-# "secondarySiteName" property - label for the update site
-secondaryUpdateSiteName=Luna Discovery Site
-
-
-# "description" property - description of the feature
-description=Preference Spy for E4 (Incubation)
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2015 vogella GmbH and others.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    Simon Scholz <simon.scholz@vogella.com> - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/features/org.eclipse.e4.tools.preference.spy.feature/feature.xml b/features/org.eclipse.e4.tools.preference.spy.feature/feature.xml
deleted file mode 100644
index 95d169b..0000000
--- a/features/org.eclipse.e4.tools.preference.spy.feature/feature.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.e4.tools.preference.spy.feature"
-      label="%featureName"
-      version="0.1.0.qualifier"
-      provider-name="%providerName"
-      license-feature="org.eclipse.license"
-      license-feature-version="0.0.0">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <plugin
-         id="org.eclipse.e4.tools.spy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.e4.tools.preference.spy"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/features/org.eclipse.e4.tools.preference.spy.feature/pom.xml b/features/org.eclipse.e4.tools.preference.spy.feature/pom.xml
deleted file mode 100644
index 39e4f4b..0000000
--- a/features/org.eclipse.e4.tools.preference.spy.feature/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.eclipse.e4.tools</groupId>
-    <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
-    <relativePath>../../</relativePath>
-  </parent>
-
-  <groupId>org.eclipse.e4</groupId>
-  <artifactId>org.eclipse.e4.tools.preference.spy.feature</artifactId>
-  <version>0.1.0-SNAPSHOT</version>
-  <packaging>eclipse-feature</packaging>
-
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.eclipse.tycho.extras</groupId>
-				<artifactId>tycho-source-feature-plugin</artifactId>
-				<executions>
-					<execution>
-						<phase>package</phase>
-						<id>source-feature</id>
-						<goals>
-							<goal>source-feature</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-p2-plugin</artifactId>
-				<version>${tycho.version}</version>
-				<executions>
-					<execution>
-						<id>attached-p2-metadata</id>
-						<phase>package</phase>
-						<goals>
-							<goal>p2-metadata</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-</project>
diff --git a/features/org.eclipse.e4.tools.spies.feature/feature.xml b/features/org.eclipse.e4.tools.spies.feature/feature.xml
index f05b5ad..0b8fca2 100644
--- a/features/org.eclipse.e4.tools.spies.feature/feature.xml
+++ b/features/org.eclipse.e4.tools.spies.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.e4.tools.spies.feature"
       label="%featureName"
-      version="0.18.0.qualifier"
+      version="0.19.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
@@ -24,23 +24,11 @@
          version="0.0.0"/>
 
    <includes
-         id="org.eclipse.e4.tools.css.spy.feature"
-         version="0.0.0"/>
-
-   <includes
          id="org.eclipse.e4.tools.event.spy.feature"
          version="0.0.0"/>
 
    <includes
-         id="org.eclipse.e4.tools.model.spy.feature"
-         version="0.0.0"/>
-
-   <includes
          id="org.eclipse.e4.tools.bundle.spy.feature"
          version="0.0.0"/>
 
-   <includes
-         id="org.eclipse.e4.tools.preference.spy.feature"
-         version="0.0.0"/>
-
 </feature>
diff --git a/features/org.eclipse.e4.tools.spies.feature/pom.xml b/features/org.eclipse.e4.tools.spies.feature/pom.xml
index 91c7f94..5ef894a 100644
--- a/features/org.eclipse.e4.tools.spies.feature/pom.xml
+++ b/features/org.eclipse.e4.tools.spies.feature/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.e4.tools</groupId>
     <artifactId>e4-tools-aggregator</artifactId>
-    <version>0.18.0-SNAPSHOT</version>
+    <version>0.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
 
@@ -18,6 +18,7 @@
 			<plugin>
 				<groupId>org.eclipse.tycho.extras</groupId>
 				<artifactId>tycho-source-feature-plugin</artifactId>
+				<version>${tycho.version}</version>
 				<executions>
 					<execution>
 						<phase>package</phase>
diff --git a/pom.xml b/pom.xml
index 606efda..dbbe3de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,13 +16,13 @@
  <parent>
     <groupId>org.eclipse</groupId>
     <artifactId>eclipse-platform-parent</artifactId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.23.0-SNAPSHOT</version>
     <relativePath>../eclipse-platform-parent</relativePath>
   </parent>
 
   <groupId>org.eclipse.e4.tools</groupId>
   <artifactId>e4-tools-aggregator</artifactId>
-  <version>0.18.0-SNAPSHOT</version>
+  <version>0.19.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
 	<properties>
@@ -54,22 +54,16 @@
 	
   
    <modules>
-    <module>./bundles/org.eclipse.e4.tools.model.spy</module>
-    <module>./bundles/org.eclipse.e4.tools.css.spy</module>
     <module>./bundles/org.eclipse.e4.tools.context.spy</module>
     <module>./bundles/org.eclipse.e4.tools.spy</module>
     <module>./bundles/org.eclipse.e4.tools.bundle.spy</module>
-    <module>./bundles/org.eclipse.e4.tools.preference.spy</module>
     <module>./bundles/org.eclipse.e4.tools.event.spy</module>
 
-    <module>./features/org.eclipse.e4.tools.css.spy.feature</module>
     <module>./features/org.eclipse.e4.tools.context.spy.feature</module>
     <module>./features/org.eclipse.e4.tools.bundle.spy.feature</module>
-    <module>./features/org.eclipse.e4.tools.preference.spy.feature</module>
     <module>./features/org.eclipse.e4.tools.event.spy.feature</module>
-    <module>./build/org.eclipse.e4.core.tools.update/</module>
-    <module>./features/org.eclipse.e4.tools.model.spy.feature</module>
     <module>./features/org.eclipse.e4.tools.spies.feature</module> 
+    <module>./build/org.eclipse.e4.core.tools.update/</module>
   </modules>
 
 	<build>
