/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.eclipse.org/org/documents/epl-v10.php * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.ide.eclipse.ndk.internal.wizards; import com.android.ide.eclipse.ndk.internal.Activator; import com.android.ide.eclipse.ndk.internal.NdkManager; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.WorkbenchException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class AddNativeWizard extends Wizard { private final IProject mProject; private final IWorkbenchWindow mWindow; private AddNativeWizardPage mAddNativeWizardPage; private Map<String, String> mTemplateArgs = new HashMap<String, String>(); public AddNativeWizard(IProject project, IWorkbenchWindow window) { mProject = project; mWindow = window; mTemplateArgs.put(NdkManager.LIBRARY_NAME, project.getName()); } @Override public void addPages() { mAddNativeWizardPage = new AddNativeWizardPage(mTemplateArgs); addPage(mAddNativeWizardPage); } @Override public boolean performFinish() { // Switch to C/C++ Perspective try { mWindow.getWorkbench().showPerspective(CUIPlugin.ID_CPERSPECTIVE, mWindow); } catch (WorkbenchException e1) { Activator.log(e1); } mAddNativeWizardPage.updateArgs(mTemplateArgs); IRunnableWithProgress op = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { IWorkspaceRunnable op1 = new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor1) throws CoreException { // Convert to CDT project CCorePlugin.getDefault().convertProjectToCC(mProject, monitor1, MakeCorePlugin.MAKE_PROJECT_ID); // Set up build information new NdkWizardHandler().convertProject(mProject, monitor1); // When using CDT 8.1.x, disable the language settings provider mechanism // for scanner discovery. Use the classloader to load the class since it // will not be available pre 8.1. try { @SuppressWarnings("rawtypes") Class c = getClass().getClassLoader().loadClass( "org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport"); //$NON-NLS-1$ @SuppressWarnings("unchecked") Method m = c.getMethod( "setLanguageSettingsProvidersFunctionalityEnabled", //$NON-NLS-1$ IProject.class, boolean.class); m.invoke(null, mProject, false); } catch (Exception e) { // ignore all exceptions: On pre 8.1.x CDT, this class will not be // found, but this options only needs to be set in 8.1.x } // Run the template NdkManager.addNativeSupport(mProject, mTemplateArgs, monitor1); } }; // TODO run from a job IWorkspace workspace = ResourcesPlugin.getWorkspace(); try { workspace.run(op1, workspace.getRoot(), 0, new NullProgressMonitor()); } catch (CoreException e) { throw new InvocationTargetException(e); } } }; try { getContainer().run(false, true, op); return true; } catch (InterruptedException e) { Activator.log(e); return false; } catch (InvocationTargetException e) { Activator.log(e); return false; } } }