Eclipse 4.8 support
diff --git a/org.eclipse.ajdt.core.tests/src/org/eclipse/ajdt/core/tests/search/AbstractITDSearchTest.java b/org.eclipse.ajdt.core.tests/src/org/eclipse/ajdt/core/tests/search/AbstractITDSearchTest.java
index 8669fdb..922a2f0 100644
--- a/org.eclipse.ajdt.core.tests/src/org/eclipse/ajdt/core/tests/search/AbstractITDSearchTest.java
+++ b/org.eclipse.ajdt.core.tests/src/org/eclipse/ajdt/core/tests/search/AbstractITDSearchTest.java
@@ -47,7 +47,8 @@
 public class AbstractITDSearchTest extends AJDTCoreTestCase {
     class ITDAwareSearchRequestor extends SearchRequestor {
         List<SearchMatch> matches = new ArrayList<SearchMatch>();
-        public void acceptSearchMatch(SearchMatch match) throws CoreException {
+        @Override
+		public void acceptSearchMatch(SearchMatch match) throws CoreException {
             // order matches by offset
             for (int i = 0; i < matches.size(); i++) {
                 if (matches.get(i).getOffset() > match.getOffset()) {
@@ -65,7 +66,8 @@
 
     public IJavaProject javaProject;
 
-    protected void setUp() throws Exception {
+    @Override
+	protected void setUp() throws Exception {
         super.setUp();
         javaProject = JavaCore.create(createPredefinedProject("DefaultEmptyProject"));
     }
@@ -111,7 +113,7 @@
         AspectJCoreTestPlugin.logInfo("About to create Search pattern in " + name);
         SearchPattern pattern = SearchPattern.createPattern(elt, flags);
         SearchEngine engine = new SearchEngine();
-        JavaSearchScope scope = new JavaSearchScope();
+        JavaSearchScope scope = new JavaSearchScope(false);
         scope.add(javaProject);
 
         AspectJCoreTestPlugin.logInfo("About to perform search in " + name);
@@ -136,7 +138,7 @@
     private String printMatches(List<SearchMatch> matches) {
         StringBuffer sb = new StringBuffer();
         for (Iterator<SearchMatch> matchIter = matches.iterator(); matchIter.hasNext();) {
-            SearchMatch match = (SearchMatch) matchIter.next();
+            SearchMatch match = matchIter.next();
             sb.append("\n\n" + match);
             
         }
@@ -171,7 +173,7 @@
         assertEquals("Wrong match location", contents.indexOf(matchName), match.getOffset());
         assertEquals("Wrong match length", matchName.length(), match.getLength());
         
-        match = (SearchMatch) matches.get(1);
+        match = matches.get(1);
         assertEquals("Wrong match location", contents.lastIndexOf(matchName), match.getOffset());
         assertEquals("Wrong match length", matchName.length(), match.getLength());
         
@@ -183,7 +185,7 @@
     protected void assertDeclarationMatches(IMember declaration, List<SearchMatch> matches) throws JavaModelException {
         boolean found = false;
         for (Iterator<SearchMatch> searchIter = matches.iterator(); searchIter.hasNext();) {
-            SearchMatch match = (SearchMatch) searchIter.next();
+            SearchMatch match = searchIter.next();
             if (match.getElement().equals(declaration)) {
                 found = true;
                 assertDeclarationMatch(declaration, match);
diff --git a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/parserbridge/ITDInserter.java b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/parserbridge/ITDInserter.java
index 075a4b1..bdd24ec 100644
--- a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/parserbridge/ITDInserter.java
+++ b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/core/parserbridge/ITDInserter.java
@@ -18,6 +18,7 @@
 import java.util.Map;
 
 import org.aspectj.asm.IProgramElement;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ModuleBinding;
 import org.eclipse.ajdt.core.AJLog;
 import org.eclipse.ajdt.core.model.AJProjectModelFacade;
 import org.eclipse.ajdt.core.model.AJProjectModelFactory;
@@ -121,15 +122,18 @@
         this.env = env;
     }
     
-    public boolean visit(TypeDeclaration type, BlockScope blockScope) {
+    @Override
+	public boolean visit(TypeDeclaration type, BlockScope blockScope) {
         augmentType(type);
         return false; // no local/anonymous type
     }
-    public boolean visit(TypeDeclaration type, CompilationUnitScope compilationUnitScope) {
+    @Override
+	public boolean visit(TypeDeclaration type, CompilationUnitScope compilationUnitScope) {
         augmentType(type);
         return true;
     }
-    public boolean visit(TypeDeclaration memberType, ClassScope classScope) {
+    @Override
+	public boolean visit(TypeDeclaration memberType, ClassScope classScope) {
         augmentType(memberType);
         return true;
     }
@@ -282,8 +286,8 @@
                         getParameterBindings(elt, ititAST.binding), new ReferenceBinding[0], ititAST.binding));
             }
         }
-        ititAST.fields = (FieldDeclaration[]) fields.toArray(new FieldDeclaration[0]);
-        ititAST.methods = (AbstractMethodDeclaration[]) methods.toArray(new MethodDeclaration[0]);
+        ititAST.fields = fields.toArray(new FieldDeclaration[0]);
+        ititAST.methods = methods.toArray(new MethodDeclaration[0]);
         
         
         // figure out how to make type bindings and figure out method bindings
@@ -392,7 +396,7 @@
             if (sig == null) {
                 String[] params = new String[method.getParameterTypes().size()];
                 for (int i = 0; i < params.length; i++) {
-                    params[i] = new String(Signature.getTypeErasure((char[]) method.getParameterTypes().get(i)));
+                    params[i] = new String(Signature.getTypeErasure(method.getParameterTypes().get(i)));
                 }
                 sig = new ErasedTypeSignature(method.getCorrespondingTypeSignature(), params);
             }
@@ -407,7 +411,7 @@
                 }
             }
             for (int i = 0; i < args.length; i++) {
-                args[i] = new Argument(((String) pNames.get(i)).toCharArray(),
+                args[i] = new Argument(pNames.get(i).toCharArray(),
                         0,
                         createTypeReference(Signature.getElementType(sig.paramTypes[i])),
                         0);
@@ -428,9 +432,9 @@
                 }
             }
             for (int i = 0; i < args.length; i++) {
-                args[i] = new Argument(((String) pNames.get(i)).toCharArray(),
+                args[i] = new Argument(pNames.get(i).toCharArray(),
                         0,
-                        createTypeReference(new String((char[]) method.getParameterTypes().get(i))),
+                        createTypeReference(new String(method.getParameterTypes().get(i))),
                         0);
             }
         }
@@ -481,7 +485,7 @@
        for (int i = 0; i < args.length; i++) {
             args[i] = new Argument(pNames.get(i).toCharArray(),
                     0,
-                    createTypeReference(new String((char[]) constructor.getParameterTypes().get(i))),
+                    createTypeReference(new String(constructor.getParameterTypes().get(i))),
                     0);
         }
         decl.arguments = args;
@@ -509,7 +513,7 @@
             newSuper = newSuper.substring(0, genericsIndex);
         }
         newSuper = newSuper.replace('$', '.');
-        return env.askForType(CharOperation.splitOn('.', newSuper.toCharArray()));
+        return env.askForType(CharOperation.splitOn('.', newSuper.toCharArray()),env.getModule(ModuleBinding.ANY));
     }
 
     private void addSuperInterfaces(IProgramElement ipe, TypeDeclaration decl) {
diff --git a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/refactoring/ITDAccessorRenameParticipant.java b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/refactoring/ITDAccessorRenameParticipant.java
index f3150c5..e0a8f4b 100644
--- a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/refactoring/ITDAccessorRenameParticipant.java
+++ b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/refactoring/ITDAccessorRenameParticipant.java
@@ -270,7 +270,7 @@
     private List<SearchMatch> findReferences(IMember accessor) {
         SearchPattern pattern = SearchPattern.createPattern(accessor, IJavaSearchConstants.REFERENCES);
         SearchEngine engine = new SearchEngine();
-        JavaSearchScope scope = new JavaSearchScope();
+        JavaSearchScope scope = new JavaSearchScope(false);
         try {
             scope.add(accessor.getJavaProject());
             CollectingSearchRequestor requestor = new CollectingSearchRequestor();
diff --git a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/search/ExtraITDFinder.java b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/search/ExtraITDFinder.java
index c00ef70..e052d4b 100644
--- a/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/search/ExtraITDFinder.java
+++ b/org.eclipse.ajdt.core/src/org/eclipse/ajdt/internal/core/search/ExtraITDFinder.java
@@ -25,6 +25,7 @@
 import org.aspectj.org.eclipse.jdt.core.dom.CompilationUnit;
 import org.aspectj.org.eclipse.jdt.core.dom.InterTypeFieldDeclaration;
 import org.aspectj.org.eclipse.jdt.core.dom.InterTypeMethodDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ModuleBinding;
 import org.eclipse.ajdt.core.ReflectionUtils;
 import org.eclipse.ajdt.core.javaelements.AJCompilationUnit;
 import org.eclipse.ajdt.core.javaelements.AspectElement;
@@ -48,7 +49,6 @@
 import org.eclipse.jdt.internal.core.search.matching.FieldPattern;
 import org.eclipse.jdt.internal.core.search.matching.MethodPattern;
 import org.eclipse.jdt.internal.core.search.matching.PossibleMatch;
-import org.eclipse.jdt.internal.core.search.matching.TypeReferencePattern;
 import org.eclipse.jdt.internal.core.search.matching.VariablePattern;
 
 /**
@@ -249,9 +249,9 @@
             return true;
         }
         if (resolver != null) {
+        	LookupEnvironment env =  ((LookupEnvironment) ReflectionUtils.getPrivateField(HierarchyResolver.class, "lookupEnvironment", resolver));
             ReferenceBinding targetBinding = 
-                    ((LookupEnvironment) ReflectionUtils.getPrivateField(HierarchyResolver.class, "lookupEnvironment", resolver)).
-                    askForType(CharOperation.splitOn('.', itdTargetTypeName));
+                   env.askForType(CharOperation.splitOn('.', itdTargetTypeName),env.getModule(ModuleBinding.ANY));
             if (targetBinding != null) {
                 return resolver.subOrSuperOfFocus(targetBinding);
             }
diff --git a/org.eclipse.ajdt.releng/config46.ini b/org.eclipse.ajdt.releng/config46.ini
new file mode 100644
index 0000000..ea5ee7c
--- /dev/null
+++ b/org.eclipse.ajdt.releng/config46.ini
@@ -0,0 +1,16 @@
+# Equinox Aspects
+#osgi.bundles=org.aspectj.runtime@2:start,org.aspectj.weaver@2:start,reference\:file\:org.eclipse.equinox.weaving.aspectj_1.0.400.201604052120.jar@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.200.v20160504-1450.jar@1\:start
+# this one works:
+# osgi.bundles=reference\:file\:org.eclipse.equinox.weaving.aspectj_1.0.400.201604052120.jar@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.200.v20160504-1450.jar@1\:start
+# This one works:
+osgi.bundles=org.eclipse.equinox.weaving.aspectj@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.1.200.v20160504-1450.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.200.v20160504-1450.jar@1\:start
+#osgi.bundles=reference\:file\:org.eclipse.equinox.weaving.aspectj@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.200.v20160504-1450.jar@1\:start
+org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
+#osgi.framework.extensions=reference\:file\:/Users/aclement/eclipses/e44m7/eclipse/plugins/org.eclipse.equinox.weaving.hook_1.1.0.I20140501-0200.jar
+#osgi.framework.extensions=reference\:file\:/Users/aclement/eclipses/e44/eclipse/plugins/org.eclipse.equinox.weaving.hook_1.1.100.weaving-hook-20140821.jar
+#osgi.framework.extensions=reference\:file\:/Users/aclement/eclipses/sts380_b199/sts-bundle/STS.app/Contents/Eclipse/plugins/org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar
+osgi.framework.extensions=org.eclipse.equinox.weaving.hook
+weaving.service.enabled=TRUE
+aj.weaving.verbose=true
+org.aspectj.weaver.showWeaveInfo=true
+org.aspectj.osgi.verbose=true
diff --git a/org.eclipse.ajdt.releng/config47.ini b/org.eclipse.ajdt.releng/config47.ini
new file mode 100644
index 0000000..bf15c2d
--- /dev/null
+++ b/org.eclipse.ajdt.releng/config47.ini
@@ -0,0 +1,16 @@
+# Equinox Aspects
+#osgi.bundles=org.aspectj.runtime@2:start,org.aspectj.weaver@2:start,reference\:file\:org.eclipse.equinox.weaving.aspectj_1.0.400.201604052120.jar@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.200.v20160504-1450.jar@1\:start
+# this one works:
+# osgi.bundles=reference\:file\:org.eclipse.equinox.weaving.aspectj_1.0.400.201604052120.jar@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.200.v20160504-1450.jar@1\:start
+# This one works:
+osgi.bundles=org.eclipse.equinox.weaving.aspectj@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.2.0.v20160929-1449.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.2.0.v20170110-1705.jar@1\:start
+#osgi.bundles=reference\:file\:org.eclipse.equinox.weaving.aspectj@2:start,reference\:file\:org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar@4,reference\:file\:org.eclipse.equinox.simpleconfigurator_1.1.200.v20160504-1450.jar@1\:start
+org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
+#osgi.framework.extensions=reference\:file\:/Users/aclement/eclipses/e44m7/eclipse/plugins/org.eclipse.equinox.weaving.hook_1.1.0.I20140501-0200.jar
+#osgi.framework.extensions=reference\:file\:/Users/aclement/eclipses/e44/eclipse/plugins/org.eclipse.equinox.weaving.hook_1.1.100.weaving-hook-20140821.jar
+#osgi.framework.extensions=reference\:file\:/Users/aclement/eclipses/sts380_b199/sts-bundle/STS.app/Contents/Eclipse/plugins/org.eclipse.equinox.weaving.hook_1.1.200.v20150730-1648.jar
+osgi.framework.extensions=org.eclipse.equinox.weaving.hook
+weaving.service.enabled=TRUE
+aj.weaving.verbose=true
+org.aspectj.weaver.showWeaveInfo=true
+org.aspectj.osgi.verbose=true
diff --git a/org.eclipse.ajdt.ui/jdt-src/org/eclipse/ajdt/internal/ui/wizards/NewTypeWizardPage.java b/org.eclipse.ajdt.ui/jdt-src/org/eclipse/ajdt/internal/ui/wizards/NewTypeWizardPage.java
index 4b7f7dc..e87018d 100644
--- a/org.eclipse.ajdt.ui/jdt-src/org/eclipse/ajdt/internal/ui/wizards/NewTypeWizardPage.java
+++ b/org.eclipse.ajdt.ui/jdt-src/org/eclipse/ajdt/internal/ui/wizards/NewTypeWizardPage.java
@@ -71,7 +71,6 @@
 import org.eclipse.jdt.internal.corext.dom.TokenScanner;
 import org.eclipse.jdt.internal.corext.refactoring.StubTypeContext;
 import org.eclipse.jdt.internal.corext.refactoring.TypeContextChecker;
-import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
 import org.eclipse.jdt.internal.corext.template.java.JavaContext;
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
 import org.eclipse.jdt.internal.corext.util.JavaConventionsUtil;
@@ -230,7 +229,7 @@
 				
 		/* package */ void create(boolean needsSave, IProgressMonitor monitor) throws CoreException {
 			TextEdit edit= fImportsRewrite.rewriteImports(monitor);
-			JavaElementUtil.applyEdit(fImportsRewrite.getCompilationUnit(), edit, needsSave, null);
+			JavaModelUtil.applyEdit(fImportsRewrite.getCompilationUnit(), edit, needsSave, null);
 		}
 		
 		/* package */ void removeImport(String qualifiedName) {
@@ -282,10 +281,12 @@
 			this.interfaceName= interfaceName;
 		}
 
+		@Override
 		public int hashCode() {
 			return interfaceName.hashCode();
 		}
 
+		@Override
 		public boolean equals(Object obj) {
 			return obj != null && getClass().equals(obj.getClass()) && ((InterfaceWrapper) obj).interfaceName.equals(interfaceName);
 		}
@@ -298,10 +299,12 @@
 			fInterfaceImage= JavaPluginImages.get(JavaPluginImages.IMG_OBJS_INTERFACE);
 		}
 		
+		@Override
 		public String getText(Object element) {
 			return BasicElementLabels.getJavaElementName(((InterfaceWrapper) element).interfaceName);
 		}
 		
+		@Override
 		public Image getImage(Object element) {
 			return fInterfaceImage;
 		}
@@ -769,6 +772,7 @@
 		
 		JavaTypeCompletionProcessor superClassCompletionProcessor= new JavaTypeCompletionProcessor(false, false, true);
 		superClassCompletionProcessor.setCompletionContextRequestor(new CompletionContextRequestor() {
+			@Override
 			public StubTypeContext getStubTypeContext() {
 				return getSuperClassStubTypeContext();
 			}
@@ -792,7 +796,8 @@
 		tableViewer.setColumnProperties(new String[] {INTERFACE});
 		
 		TableTextCellEditor cellEditor= new TableTextCellEditor(tableViewer, 0) {
-		    protected void doSetFocus() {
+		    @Override
+			protected void doSetFocus() {
 		        if (text != null) {
 		            text.setFocus();
 		            text.setSelection(text.getText().length());
@@ -804,6 +809,7 @@
 		};
 		JavaTypeCompletionProcessor superInterfaceCompletionProcessor= new JavaTypeCompletionProcessor(false, false, true);
 		superInterfaceCompletionProcessor.setCompletionContextRequestor(new CompletionContextRequestor() {
+			@Override
 			public StubTypeContext getStubTypeContext() {
 				return getSuperInterfacesStubTypeContext();
 			}
@@ -831,6 +837,7 @@
 			}
 		});
 		tableViewer.getTable().addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyPressed(KeyEvent event) {
 				if (event.keyCode == SWT.F2 && event.stateMask == 0) {
 					ISelection selection= tableViewer.getSelection();
@@ -1018,6 +1025,7 @@
 	/*
 	 * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String)
 	 */
+	@Override
 	protected void handleFieldChanged(String fieldName) {
 		super.handleFieldChanged(fieldName);
 		if (fieldName.equals(CONTAINER)) {
@@ -1349,6 +1357,7 @@
 	/*
 	 * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#containerChanged()
 	 */
+	@Override
 	protected IStatus containerChanged() {
 		IStatus status= super.containerChanged();
 	    IPackageFragmentRoot root= getPackageFragmentRoot();
@@ -2336,6 +2345,7 @@
 	 * @deprecated Instead of file templates, the new type code template
 	 * specifies the stub for a compilation unit.
 	 */		
+	@Deprecated
 	protected String getFileComment(ICompilationUnit parentCU) {
 		return null;
 	}
@@ -2412,6 +2422,7 @@
 	 * @return returns the template or <code>null</code>
 	 * @deprecated Use getTypeComment(ICompilationUnit, String)
 	 */
+	@Deprecated
 	protected String getTypeComment(ICompilationUnit parentCU) {
 		if (StubUtility.doAddComments(parentCU.getJavaProject()))
 			return getTypeComment(parentCU, StubUtility.getLineDelimiterUsed(parentCU));
@@ -2424,6 +2435,7 @@
 	 * @return returns the template or <code>null</code>
 	 * @deprecated Use getTemplate(String,ICompilationUnit,int)
 	 */
+	@Deprecated
 	protected String getTemplate(String name, ICompilationUnit parentCU) {
 		return getTemplate(name, parentCU, 0);
 	}
diff --git a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsAction.java b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsAction.java
index dd2e7d6..20ff1d5 100755
--- a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsAction.java
+++ b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsAction.java
@@ -38,13 +38,14 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.manipulation.CoreASTProvider;
 import org.eclipse.jdt.core.search.TypeNameMatch;
-import org.eclipse.jdt.internal.corext.ValidateEditException;
 import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings;
 import org.eclipse.jdt.internal.corext.util.History;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.internal.corext.util.QualifiedTypeNameHistory;
+import org.eclipse.jdt.internal.corext.util.ValidateEditException;
 import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.actions.ActionMessages;
@@ -52,7 +53,6 @@
 import org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter;
 import org.eclipse.jdt.internal.ui.browsing.LogicalPackage;
 import org.eclipse.jdt.internal.ui.dialogs.MultiElementListSelectionDialog;
-import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider;
 import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
@@ -174,6 +174,7 @@
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(ITextSelection selection) {
 		setEnabled(getCompilationUnit(fEditor) != null);
 	}
@@ -181,6 +182,7 @@
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void selectionChanged(IStructuredSelection selection) {
 		setEnabled(isEnabled(selection));
 	}
@@ -289,6 +291,7 @@
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(ITextSelection selection) {
 		ICompilationUnit cu= getCompilationUnit(fEditor);
 		if (cu != null) {
@@ -305,6 +308,7 @@
 	/* (non-Javadoc)
 	 * Method declared on SelectionDispatchAction.
 	 */
+	@Override
 	public void run(IStructuredSelection selection) {
 		ICompilationUnit[] cus= getCompilationUnits(selection);
 		if (cus.length == 0)
@@ -463,14 +467,12 @@
 					fEditor= (JavaEditor) editor;
 				}			
 			}
-			
-			CompilationUnit astRoot= JavaPlugin.getDefault().getASTProvider().getAST(cu, ASTProvider.WAIT_ACTIVE_ONLY, null);
-			
+			CompilationUnit astRoot = CoreASTProvider.getInstance().getAST(cu, CoreASTProvider.WAIT_ACTIVE_ONLY, null);
 			AJOrganizeImportsOperation op= new AJOrganizeImportsOperation(cu, astRoot, settings.importIgnoreLowercase, !cu.isWorkingCopy(), true, createChooseImportQuery());
 		
 			IRewriteTarget target= null;
 			if (fEditor != null) {
-				target= (IRewriteTarget) fEditor.getAdapter(IRewriteTarget.class);
+				target= fEditor.getAdapter(IRewriteTarget.class);
 				if (target != null) {
 					target.beginCompoundChange();
 				}
@@ -534,6 +536,7 @@
 		ILabelProvider labelProvider= new TypeNameMatchLabelProvider(TypeNameMatchLabelProvider.SHOW_FULLYQUALIFIED);
 		
 		MultiElementListSelectionDialog dialog= new MultiElementListSelectionDialog(getShell(), labelProvider) {
+			@Override
 			protected void handleSelectionChanged() {
 				super.handleSelectionChanged();
 				// show choices in editor
diff --git a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsOperation.java b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsOperation.java
index 5a3c9cc..f312878 100644
--- a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsOperation.java
+++ b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/actions/AJOrganizeImportsOperation.java
@@ -52,22 +52,21 @@
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
+import org.eclipse.jdt.core.manipulation.ImportReferencesCollector;
+import org.eclipse.jdt.core.manipulation.TypeKinds;
+import org.eclipse.jdt.core.manipulation.TypeNameMatchCollector;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
 import org.eclipse.jdt.core.search.TypeNameMatch;
-import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationMessages;
-import org.eclipse.jdt.internal.corext.codemanipulation.ImportReferencesCollector;
+import org.eclipse.jdt.internal.core.manipulation.JavaManipulationMessages;
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
 import org.eclipse.jdt.internal.corext.dom.ScopeAnalyzer;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 import org.eclipse.jdt.internal.corext.util.Strings;
-import org.eclipse.jdt.internal.corext.util.TypeNameMatchCollector;
-import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
 import org.eclipse.jdt.internal.ui.text.correction.ASTResolving;
-import org.eclipse.jdt.internal.ui.text.correction.SimilarElementsRequestor;
 import org.eclipse.jdt.ui.SharedASTProvider;
 import org.eclipse.text.edits.TextEdit;
 
@@ -104,7 +103,7 @@
 			
 			public void addInfo(TypeNameMatch info) {
 				for (int i= this.foundInfos.size() - 1; i >= 0; i--) {
-					TypeNameMatch curr= (TypeNameMatch) this.foundInfos.get(i);
+					TypeNameMatch curr= this.foundInfos.get(i);
 					if (curr.getTypeContainerName().equals(info.getTypeContainerName())) {
 						return; // not added. already contains type with same name
 					}
@@ -255,7 +254,7 @@
 				
 				for (i= 0; i < typesFound.size(); i++) {
 					TypeNameMatch curr= typesFound.get(i);
-					UnresolvedTypeData data= (UnresolvedTypeData) fUnresolvedTypes.get(curr.getSimpleTypeName());
+					UnresolvedTypeData data= fUnresolvedTypes.get(curr.getSimpleTypeName());
 					if (data != null && isVisible(curr) && isOfKind(curr, data.typeKinds, is50OrHigher)) {
 						if (fAllowDefaultPackageImports || curr.getPackageName().length() > 0) {
 							data.addInfo(curr);
@@ -276,8 +275,8 @@
 				if (openChoices.isEmpty()) {
 					return false;
 				}
-				fOpenChoices= (TypeNameMatch[][]) openChoices.toArray(new TypeNameMatch[openChoices.size()][]);
-				fSourceRanges= (SourceRange[]) sourceRanges.toArray(new SourceRange[sourceRanges.size()]);
+				fOpenChoices= openChoices.toArray(new TypeNameMatch[openChoices.size()][]);
+				fSourceRanges= sourceRanges.toArray(new SourceRange[sourceRanges.size()]);
 				return true;
 			} finally {
 				monitor.done();
@@ -341,7 +340,7 @@
 				// nothing found
 				return null;
 			} else if (nFound == 1) {
-				TypeNameMatch typeRef= (TypeNameMatch) typeRefsFound.get(0);
+				TypeNameMatch typeRef= typeRefsFound.get(0);
 				fImpStructure.addImport(typeRef.getFullyQualifiedName());
 				return null;
 			} else {
@@ -350,7 +349,7 @@
 				
 				// multiple found, use old imports to find an entry
 				for (int i= 0; i < nFound; i++) {
-					TypeNameMatch typeRef= (TypeNameMatch) typeRefsFound.get(i);
+					TypeNameMatch typeRef= typeRefsFound.get(i);
 					String fullName= typeRef.getFullyQualifiedName();
 					String containerName= typeRef.getTypeContainerName();
 					if (fOldSingleImports.contains(fullName)) {
@@ -371,22 +370,22 @@
 					return null;
 				}
 				// return the open choices
-				return (TypeNameMatch[]) typeRefsFound.toArray(new TypeNameMatch[nFound]);
+				return typeRefsFound.toArray(new TypeNameMatch[nFound]);
 			}
 		}
 		
 		private boolean isOfKind(TypeNameMatch curr, int typeKinds, boolean is50OrHigher) {
 			int flags= curr.getModifiers();
 			if (Flags.isAnnotation(flags)) {
-				return is50OrHigher && ((typeKinds & SimilarElementsRequestor.ANNOTATIONS) != 0);
+				return is50OrHigher && ((typeKinds & TypeKinds.ANNOTATIONS) != 0);
 			}
 			if (Flags.isEnum(flags)) {
-				return is50OrHigher && ((typeKinds & SimilarElementsRequestor.ENUMS) != 0);
+				return is50OrHigher && ((typeKinds & TypeKinds.ENUMS) != 0);
 			}
 			if (Flags.isInterface(flags)) {
-				return (typeKinds & SimilarElementsRequestor.INTERFACES) != 0;
+				return (typeKinds & TypeKinds.INTERFACES) != 0;
 			}
-			return (typeKinds & SimilarElementsRequestor.CLASSES) != 0;
+			return (typeKinds & TypeKinds.CLASSES) != 0;
 		}
 
 		private boolean isVisible(TypeNameMatch curr) {
@@ -449,7 +448,7 @@
 			fNumberOfImportsAdded= 0;
 			fNumberOfImportsRemoved= 0;
 			
-			monitor.beginTask(Messages.format(CodeGenerationMessages.OrganizeImportsOperation_description, fCompilationUnit.getElementName()), 10);
+			monitor.beginTask(Messages.format(JavaManipulationMessages.OrganizeImportsOperation_description, fCompilationUnit.getElementName()), 10);
 			
 			CompilationUnit astRoot= fASTRoot;
 			if (astRoot == null) {
@@ -497,7 +496,8 @@
 			}
 			
 			TextEdit edit= importsRewrite.rewriteImports(new SubProgressMonitor(monitor, 3));
-			JavaElementUtil.applyEdit(fCompilationUnit, edit, fDoSave, new SubProgressMonitor(monitor, 1));
+
+			JavaModelUtil.applyEdit(fCompilationUnit, edit, fDoSave, new SubProgressMonitor(monitor, 1));
 						
 			determineImportDifferences(importsRewrite, oldSingleImports, oldDemandImports);
 			processor= null;
diff --git a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/outline/AJOutlineInformationControl.java b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/outline/AJOutlineInformationControl.java
index adeda06..be1ed81 100755
--- a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/outline/AJOutlineInformationControl.java
+++ b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/outline/AJOutlineInformationControl.java
@@ -50,6 +50,9 @@
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.bindings.TriggerSequence;
+import org.eclipse.jface.bindings.keys.KeySequence;
+import org.eclipse.jface.bindings.keys.SWTKeySupport;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
@@ -70,8 +73,6 @@
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.keys.KeySequence;
-import org.eclipse.ui.keys.SWTKeySupport;
 
 // Copied from org.eclipse.jdt.internal.ui.text.JavaOutlineInformationControl
 // to allow use of a decorating label provider which will make use of our registered
@@ -119,6 +120,7 @@
 		/*
 		 * @see ILabelProvider#getText
 		 */ 	
+		@Override
 		public String getText(Object element) {
 			String text= super.getText(element);
 			if (fShowDefiningType) {
@@ -139,6 +141,7 @@
 		/*
 		 * @see org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider#getForeground(java.lang.Object)
 		 */
+		@Override
 		public Color getForeground(Object element) {
 			if (fOutlineContentProvider.isShowingInheritedMembers()) {
 				if (element instanceof IJavaElement) {
@@ -228,6 +231,7 @@
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected Object[] getFilteredChildren(Object parent) {
 			Object[] result = getRawChildren(parent);
 			int unfilteredChildren= result.length;
@@ -243,6 +247,7 @@
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		protected void internalExpandToLevel(Widget node, int level) {
 			if (!fIsFiltering && node instanceof Item) {
 				Item i= (Item) node;
@@ -312,6 +317,7 @@
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public Object[] getChildren(Object element) {
 			// AspectJ Change begin
 			if (element instanceof ICompilationUnit) {
@@ -350,6 +356,7 @@
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 			super.inputChanged(viewer, oldInput, newInput);
 			fTypeHierarchies.clear();
@@ -358,6 +365,7 @@
 		/**
 		 * {@inheritDoc}
 		 */
+		@Override
 		public void dispose() {
 			super.dispose();
 			fTypeHierarchies.clear();
@@ -417,6 +425,7 @@
 		/*
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
+		@Override
 		public void run() {
 			setTopLevelTypeOnly(!fShowOnlyMainType);
 		}
@@ -449,6 +458,7 @@
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#getHierarchy(org.eclipse.jdt.core.IType)
 		 */
+		@Override
 		protected ITypeHierarchy getHierarchy(IType type) {
 			return getSuperTypeHierarchy(type);
 		}
@@ -456,6 +466,7 @@
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#isSortByDefiningType()
 		 */
+		@Override
 		public boolean isSortByDefiningType() {
 			return fSortByDefiningTypeAction.isChecked();
 		}
@@ -463,6 +474,7 @@
 		/* (non-Javadoc)
 		 * @see org.eclipse.jdt.internal.ui.typehierarchy.AbstractHierarchyViewerSorter#isSortAlphabetically()
 		 */
+		@Override
 		public boolean isSortAlphabetically() {
 			return fLexicalSortingAction.isChecked();
 		}
@@ -489,6 +501,7 @@
 			AspectJUIPlugin.getDefault().getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.LEXICAL_SORTING_BROWSING_ACTION);
 		}
 
+		@Override
 		public void run() {
 			valueChanged(isChecked(), true);
 		}
@@ -537,6 +550,7 @@
 		/*
 		 * @see Action#actionPerformed
 		 */
+		@Override
 		public void run() {
 			BusyIndicator.showWhile(fOutlineViewer.getControl().getDisplay(), new Runnable() {
 				public void run() {
@@ -574,6 +588,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected Text createFilterText(Composite parent) {
 		Text text= super.createFilterText(parent);
 		text.addKeyListener(getKeyAdapter());
@@ -583,6 +598,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected TreeViewer createTreeViewer(Composite parent, int style) {
 		Tree tree= new Tree(parent, SWT.SINGLE | (style & ~SWT.MULTI));
 		GridData gd= new GridData(GridData.FILL_BOTH);
@@ -627,8 +643,9 @@
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	protected String getStatusFieldText() {
-	    KeySequence[] sequences= getInvokingCommandKeySequences();
+	    TriggerSequence[] sequences= getInvokingCommandKeySequences();
 		if (sequences == null || sequences.length == 0)
 			return ""; //$NON-NLS-1$
 
@@ -644,6 +661,7 @@
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractInformationControl#getId()
 	 * @since 3.0
 	 */
+	@Override
 	protected String getId() {
 		return "org.eclipse.jdt.internal.ui.text.QuickOutline"; //$NON-NLS-1$
 	}
@@ -651,6 +669,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
+	@Override
 	public void setInput(Object information) {
 		if (information == null || information instanceof String) {
 			inputChanged(null, null);
@@ -669,10 +688,14 @@
 	private KeyAdapter getKeyAdapter() {
 		if (fKeyAdapter == null) {
 			fKeyAdapter= new KeyAdapter() {
+				@Override
 				public void keyPressed(KeyEvent e) {
 					int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(e);
 					KeySequence keySequence = KeySequence.getInstance(SWTKeySupport.convertAcceleratorToKeyStroke(accelerator));
-					KeySequence[] sequences= getInvokingCommandKeySequences();
+					TriggerSequence[] sequences = getInvokingCommandKeySequences();
+//					int accelerator = SWTKeySupport.convertEventToUnmodifiedAccelerator(e);
+//					KeySequence keySequence = KeySequence.getInstance(SWTKeySupport.convertAcceleratorToKeyStroke(accelerator));
+//					KeySequence[] sequences= getInvokingCommandKeySequences();
 					if (sequences == null)
 						return;
 					for (int i= 0; i < sequences.length; i++) {
@@ -709,6 +732,7 @@
 	/*
 	 * @see org.eclipse.jdt.internal.ui.text.AbstractInformationControl#fillViewMenu(org.eclipse.jface.action.IMenuManager)
 	 */
+	@Override
 	protected void fillViewMenu(IMenuManager viewMenu) {
 		super.fillViewMenu(viewMenu);
 		viewMenu.add(fShowOnlyMainTypeAction); 
diff --git a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/JavaCorrectionAssistant.java b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/JavaCorrectionAssistant.java
index bc806a7..fd65992 100755
--- a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/JavaCorrectionAssistant.java
+++ b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/JavaCorrectionAssistant.java
@@ -17,10 +17,10 @@
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.manipulation.CoreASTProvider;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.text.correction.QuickAssistLightBulbUpdater;
 import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.SharedASTProvider;
 import org.eclipse.jdt.ui.text.IColorManager;
 import org.eclipse.jdt.ui.text.JavaTextTools;
 import org.eclipse.jface.internal.text.html.HTMLTextPresenter;
@@ -110,6 +110,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.contentassist.IContentAssistant#install(org.eclipse.jface.text.ITextViewer)
 	 */
+	@Override
 	public void install(ISourceViewer sourceViewer) {
 		super.install(sourceViewer);
 		fViewer= sourceViewer;
@@ -123,6 +124,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.text.contentassist.ContentAssistant#uninstall()
 	 */
+	@Override
 	public void uninstall() {
 		if (fLightBulbUpdater != null) {
 			fLightBulbUpdater.uninstall();
@@ -145,6 +147,7 @@
 	 *
 	 * @see IQuickAssistAssistant#showPossibleQuickAssists()
 	 */
+	@Override
 	public String showPossibleQuickAssists() {
 		fPosition= null;
 		fCurrentAnnotations= null;
@@ -246,7 +249,7 @@
 	private static void ensureUpdatedAnnotations(ITextEditor editor) {
 		Object inputElement= editor.getEditorInput().getAdapter(IJavaElement.class);
 		if (inputElement instanceof ICompilationUnit) {
-			JavaPlugin.getDefault().getASTProvider().getAST((ICompilationUnit) inputElement, SharedASTProvider.WAIT_ACTIVE_ONLY, null);
+			CoreASTProvider.getInstance().getAST((ICompilationUnit) inputElement, CoreASTProvider.WAIT_ACTIVE_ONLY, null);
 		}
 	}
 
@@ -302,6 +305,7 @@
 	/*
 	 * @see org.eclipse.jface.text.contentassist.ContentAssistant#possibleCompletionsClosed()
 	 */
+	@Override
 	protected void possibleCompletionsClosed() {
 		super.possibleCompletionsClosed();
 		restorePosition();
diff --git a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/UnresolvedElementsSubProcessor.java b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/UnresolvedElementsSubProcessor.java
index 27e685a..2393b25 100755
--- a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/UnresolvedElementsSubProcessor.java
+++ b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/editor/quickfix/UnresolvedElementsSubProcessor.java
@@ -66,6 +66,7 @@
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
+import org.eclipse.jdt.core.manipulation.TypeKinds;
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
@@ -153,7 +154,7 @@
 				ASTNode parent= node.getParent();
 				StructuralPropertyDescriptor locationInParent= node.getLocationInParent();
 				if (locationInParent == MethodInvocation.EXPRESSION_PROPERTY) {
-					typeKind= SimilarElementsRequestor.CLASSES;
+					typeKind = TypeKinds.CLASSES;
 				} else if (locationInParent == FieldAccess.NAME_PROPERTY) {
 					Expression expression= ((FieldAccess) parent).getExpression();
 					if (expression != null) {
@@ -164,20 +165,20 @@
 					}
 				} else if (parent instanceof SimpleType) {
 					suggestVariableProposals= false;
-					typeKind= SimilarElementsRequestor.REF_TYPES;
+					typeKind= TypeKinds.REF_TYPES;
 				} else if (parent instanceof QualifiedName) {
 					Name qualifier= ((QualifiedName) parent).getQualifier();
 					if (qualifier != node) {
 						binding= qualifier.resolveTypeBinding();
 					} else {
-						typeKind= SimilarElementsRequestor.REF_TYPES & ~SimilarElementsRequestor.VARIABLES;
+						typeKind= TypeKinds.REF_TYPES & ~TypeKinds.VARIABLES;
 					}
 					ASTNode outerParent= parent.getParent();
 					while (outerParent instanceof QualifiedName) {
 						outerParent= outerParent.getParent();
 					}
 					if (outerParent instanceof SimpleType) {
-						typeKind= SimilarElementsRequestor.REF_TYPES & ~SimilarElementsRequestor.VARIABLES;
+						typeKind= TypeKinds.REF_TYPES & ~TypeKinds.VARIABLES;
 						suggestVariableProposals= false;
 					}
 				} else if (locationInParent == SwitchCase.EXPRESSION_PROPERTY) {
@@ -197,11 +198,11 @@
 					binding= qualifierBinding;
 				} else {
 					node= qualifierName.getQualifier();
-					typeKind= SimilarElementsRequestor.REF_TYPES & ~SimilarElementsRequestor.VARIABLES;
+					typeKind= TypeKinds.REF_TYPES & ~TypeKinds.VARIABLES;
 					suggestVariableProposals= node.isSimpleName();
 				}
 				if (selectedNode.getParent() instanceof SimpleType) {
-					typeKind= SimilarElementsRequestor.REF_TYPES & ~SimilarElementsRequestor.VARIABLES;
+					typeKind= TypeKinds.REF_TYPES & ~TypeKinds.VARIABLES;
 					suggestVariableProposals= false;
 				}
 				break;
@@ -229,7 +230,7 @@
 		// add type proposals
 		if (typeKind != 0) {
 			if (!JavaModelUtil.is50OrHigher(cu.getJavaProject())) {
-				typeKind= typeKind & ~(SimilarElementsRequestor.ANNOTATIONS | SimilarElementsRequestor.ENUMS | SimilarElementsRequestor.VARIABLES);
+				typeKind= typeKind & ~(TypeKinds.ANNOTATIONS | TypeKinds.ENUMS | TypeKinds.VARIABLES);
 			}
 
 			int relevance= Character.isUpperCase(ASTNodes.getSimpleNameIdentifier(node).charAt(0)) ? 5 : -2;
@@ -611,7 +612,7 @@
 		// add all similar elements
 		for (int i= 0; i < elements.length; i++) {
 			SimilarElement elem= elements[i];
-			if ((elem.getKind() & SimilarElementsRequestor.ALL_TYPES) != 0) {
+			if ((elem.getKind() & TypeKinds.ALL_TYPES) != 0) {
 				String fullName= elem.getName();
 				if (!fullName.equals(resolvedTypeName)) {
 					proposals.add(createTypeRefChangeProposal(cu, fullName, node, relevance, elements.length));
@@ -737,16 +738,16 @@
 						|| (enclosingType != null && !enclosingType.isReadOnly() && !enclosingType.getType(typeName).exists())) { // new member type
 					IJavaElement enclosing= enclosingPackage != null ? (IJavaElement) enclosingPackage : enclosingType;
 
-					if ((kind & SimilarElementsRequestor.CLASSES) != 0) {
+					if ((kind & TypeKinds.CLASSES) != 0) {
 			            proposals.add(new NewCUUsingWizardProposal(cu, node, NewCUUsingWizardProposal.K_CLASS, enclosing, rel+2));
 					}
-					if ((kind & SimilarElementsRequestor.INTERFACES) != 0) {
+					if ((kind & TypeKinds.INTERFACES) != 0) {
 			            proposals.add(new NewCUUsingWizardProposal(cu, node, NewCUUsingWizardProposal.K_INTERFACE, enclosing, rel+1));
 					}
-					if ((kind & SimilarElementsRequestor.ENUMS) != 0) {
+					if ((kind & TypeKinds.ENUMS) != 0) {
 			            proposals.add(new NewCUUsingWizardProposal(cu, node, NewCUUsingWizardProposal.K_ENUM, enclosing, rel));
 					}
-					if (kind == SimilarElementsRequestor.ANNOTATIONS) { // only when in annotation
+					if (kind == TypeKinds.ANNOTATIONS) { // only when in annotation
 			            proposals.add(new NewCUUsingWizardProposal(cu, node, NewCUUsingWizardProposal.K_ANNOTATION, enclosing, rel+4));
 					}
 				}
@@ -755,7 +756,7 @@
 		} while (node != null);
 
 		// type parameter proposals
-		if (refNode.isSimpleName() && ((kind & SimilarElementsRequestor.VARIABLES)  != 0)) {
+		if (refNode.isSimpleName() && ((kind & TypeKinds.VARIABLES)  != 0)) {
 			CompilationUnit root= (CompilationUnit) refNode.getRoot();
 			String name= ((SimpleName) refNode).getIdentifier();
 			BodyDeclaration declaration= ASTResolving.findParentBodyDeclaration(refNode);
diff --git a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/PushInRefactoring.java b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/PushInRefactoring.java
index aae4dc6..5017e65 100644
--- a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/PushInRefactoring.java
+++ b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/PushInRefactoring.java
@@ -78,11 +78,11 @@
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
+import org.eclipse.jdt.core.manipulation.ImportReferencesCollector;
 import org.eclipse.jdt.internal.core.DefaultWorkingCopyOwner;
 import org.eclipse.jdt.internal.core.JavaProject;
 import org.eclipse.jdt.internal.core.NameLookup;
 import org.eclipse.jdt.internal.core.NameLookup.Answer;
-import org.eclipse.jdt.internal.corext.codemanipulation.ImportReferencesCollector;
 import org.eclipse.jface.text.Region;
 import org.eclipse.ltk.core.refactoring.Change;
 import org.eclipse.ltk.core.refactoring.ChangeDescriptor;
@@ -132,7 +132,7 @@
         // does not handle imports for declare parents
         void rewriteImports() throws CoreException {
             // first check to see if this unit has been deleted.
-            Change change = (Change) allChanges.get(unit);
+            Change change = allChanges.get(unit);
             if (! (change instanceof TextFileChange)) {
                 return;
             }
@@ -213,7 +213,7 @@
             List<BodyDeclaration> bodyDecls = lastType.bodyDeclarations();
             List<Type> extraSimpleNames = new LinkedList<Type>();
             for (int i = bodyDecls.size()-1; i >= 0; i--) {
-                BodyDeclaration decl = (BodyDeclaration) bodyDecls.get(i);
+                BodyDeclaration decl = bodyDecls.get(i);
                 if (decl.getNodeType() == ASTNode.FIELD_DECLARATION) {
                     FieldDeclaration fDecl = (FieldDeclaration) decl;
                     if (fDecl.fragments().size() == 1) {
@@ -284,7 +284,8 @@
     }
     
 
-    public RefactoringStatus checkFinalConditions(IProgressMonitor monitor)
+    @Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor monitor)
             throws CoreException, OperationCanceledException {
         final RefactoringStatus status = new RefactoringStatus();
         try {
@@ -392,13 +393,14 @@
         
         // this requestor performs the real work
         ASTRequestor requestors = new ASTRequestor() {
-            public void acceptAST(ICompilationUnit source, CompilationUnit ast) {
+            @Override
+			public void acceptAST(ICompilationUnit source, CompilationUnit ast) {
                 try {
                     
                     // compute the imports that this itd adds to this unit
                     PerUnitInformation holder;
                     if (imports.containsKey(source)) {
-                        holder = (PerUnitInformation) imports.get(source);
+                        holder = imports.get(source);
                     } else {
                         holder = new PerUnitInformation(source);
                         imports.put(source, holder);
@@ -412,7 +414,7 @@
                     // make the simplifying assumption that the CU that contains the
                     // ITD does not also contain a target type
                     // Bug 310020
-                    if (isCUnitContainingITD(source, (IMember) itdsForUnit.get(0))) {
+                    if (isCUnitContainingITD(source, itdsForUnit.get(0))) {
                         // this is an AJCU.
                         rewriteAspectType(itdsForUnit, source, ast);
                     } else {
@@ -470,7 +472,7 @@
                     parser.setProject(project);
                     parser.setResolveBindings(true);
                     Collection<ICompilationUnit> collection= projects.get(project);
-                    parser.createASTs((ICompilationUnit[]) collection.toArray(
+                    parser.createASTs(collection.toArray(
                             new ICompilationUnit[collection.size()]), new String[0], 
                             requestors, new SubProgressMonitor(subMonitor, 1));
                 }
@@ -509,7 +511,7 @@
             IType parentAspectType = (IType) itd.getParent();
             int numRemovals;
             if (removalStored.containsKey(parentAspectType)) {
-                numRemovals = ((Integer) removalStored.get(parentAspectType)).intValue();
+                numRemovals = removalStored.get(parentAspectType).intValue();
                 removalStored.put(parentAspectType, new Integer(++numRemovals));
             } else {
                 removalStored.put(parentAspectType, new Integer(1));
@@ -1047,7 +1049,8 @@
         return unitToTypes;
     }
 
-    public RefactoringStatus checkInitialConditions(IProgressMonitor monitor)
+    @Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor monitor)
             throws CoreException, OperationCanceledException {
         if (monitor == null) {
             monitor = new NullProgressMonitor();
@@ -1128,14 +1131,16 @@
     }
 
 
-    public Change createChange(IProgressMonitor monitor) throws CoreException,
+    @Override
+	public Change createChange(IProgressMonitor monitor) throws CoreException,
             OperationCanceledException {
         monitor.beginTask("Creating change...", 1);
         try {
             final Collection<Change> changes= allChanges.values();
-            CompositeChange change= new CompositeChange(getName(), (Change[]) changes.toArray(new Change[changes.size()])) {
+            CompositeChange change= new CompositeChange(getName(), changes.toArray(new Change[changes.size()])) {
     
-                public ChangeDescriptor getDescriptor() {
+                @Override
+				public ChangeDescriptor getDescriptor() {
                     return new RefactoringChangeDescriptor(createDescriptor());
                 }
 
@@ -1168,7 +1173,8 @@
     }
 
     
-    public String getName() {
+    @Override
+	public String getName() {
         return "Push-In";
     }
 
@@ -1206,7 +1212,7 @@
      * @throws JavaModelException
      */
     private IMember[] getTargets(List<IMember> itds) throws JavaModelException {
-        AJProjectModelFacade model = getModel((IJavaElement) itds.get(0));
+        AJProjectModelFacade model = getModel(itds.get(0));
         List<IMember> targets = new ArrayList<IMember>();
         
         for (IMember itd : itds) {
@@ -1221,7 +1227,7 @@
                 targets.add((IMember) elt);
             }
         }
-        return (IMember[]) targets.toArray(new IMember[targets.size()]);
+        return targets.toArray(new IMember[targets.size()]);
     }
 
     private boolean isEmptyEdit(TextEdit edit) {
diff --git a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/pullout/PullOutRefactoring.java b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/pullout/PullOutRefactoring.java
index 1e71d41..0156bc7 100644
--- a/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/pullout/PullOutRefactoring.java
+++ b/org.eclipse.ajdt.ui/src/org/eclipse/ajdt/internal/ui/refactoring/pullout/PullOutRefactoring.java
@@ -63,6 +63,7 @@
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.Statement;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
+import org.eclipse.jdt.core.manipulation.ImportReferencesCollector;
 import org.eclipse.jdt.core.refactoring.CompilationUnitChange;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
@@ -71,7 +72,6 @@
 import org.eclipse.jdt.core.search.SearchParticipant;
 import org.eclipse.jdt.core.search.SearchPattern;
 import org.eclipse.jdt.core.search.SearchRequestor;
-import org.eclipse.jdt.internal.corext.codemanipulation.ImportReferencesCollector;
 import org.eclipse.jdt.internal.corext.refactoring.base.JavaStatusContext;
 import org.eclipse.jdt.internal.corext.util.CodeFormatterUtil;
 import org.eclipse.jdt.internal.corext.util.JdtFlags;
diff --git a/pom.xml b/pom.xml
index 2377f28..78fca22 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,6 +102,21 @@
 		</profile>
 
 		<profile>
+			<id>e48</id>
+			<properties>
+				<platform.version>e48</platform.version>
+				<weaving.hook.version>1.2.0.v20160929-1449</weaving.hook.version>
+			</properties>
+			<repositories>
+				<repository>
+					<id>photon-releases</id>
+					<layout>p2</layout>
+					<url>http://download.eclipse.org/releases/photon/</url>
+				</repository>
+			</repositories>
+		</profile>
+
+		<profile>
 			<id>os-macosx</id>
 			<activation>
 				<os>