blob: 16adce4d1d6e2db011bb4bcb7889cd819b149ef3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 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.jdt.internal.ui.preferences;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.ui.dialogs.PropertyPage;
import org.eclipse.jdt.core.IClasspathAttribute;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter;
import org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathSupport;
import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
public class JavaCompilerPropertyPage extends PropertyPage {
public static final String PROP_ID= "org.eclipse.jdt.ui.propertyPages.JavaCompilerPropertyPage"; //$NON-NLS-1$
private IJavaProject fProject;
private CPListElement fElement;
private boolean fIsValidElement;
private SelectionButtonDialogField fIgnoreOptionalProblemsField;
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createControl(Composite parent) {
IAdaptable adaptable= getElement();
IJavaElement elem= adaptable.getAdapter(IJavaElement.class);
try {
if (elem instanceof IPackageFragmentRoot) {
fProject= elem.getJavaProject();
fElement= CPListElement.createFromExisting(((IPackageFragmentRoot) elem).getRawClasspathEntry(), fProject);
fIsValidElement= fElement != null;
} else {
fIsValidElement= false;
setDescription(PreferencesMessages.JavaCompilerPropertyPage_invalid_element_selection);
}
} catch (JavaModelException e) {
fIsValidElement= false;
setDescription(PreferencesMessages.JavaCompilerPropertyPage_invalid_element_selection);
}
super.createControl(parent);
}
/*
* @see PreferencePage#createContents(Composite)
*/
@Override
protected Control createContents(Composite parent) {
if (!fIsValidElement) {
return new Composite(parent, SWT.NONE);
}
Composite composite= new Composite(parent, SWT.NONE);
composite.setFont(parent.getFont());
GridLayout topLayout= new GridLayout();
topLayout.marginWidth= 0;
topLayout.marginHeight= 0;
composite.setLayout(topLayout);
fIgnoreOptionalProblemsField= new SelectionButtonDialogField(SWT.CHECK);
fIgnoreOptionalProblemsField.setLabelText(PreferencesMessages.JavaCompilerPropertyPage_ignore_optional_problems_label);
fIgnoreOptionalProblemsField.setSelection(isIgnoringOptionalProblems());
fIgnoreOptionalProblemsField.doFillIntoGrid(composite, 1);
return composite;
}
/*
* @see PreferencePage#performDefaults()
*/
@Override
protected void performDefaults() {
fIgnoreOptionalProblemsField.setSelection(false);
super.performDefaults();
}
/**
* @see org.eclipse.jface.preference.IPreferencePage#performOk()
*/
@Override
public boolean performOk() {
if (fIsValidElement && fIgnoreOptionalProblemsField.isSelected() != isIgnoringOptionalProblems()) {
String newValue= fIgnoreOptionalProblemsField.isSelected() ? "true" : null; //$NON-NLS-1$
fElement.setAttribute(IClasspathAttribute.IGNORE_OPTIONAL_PROBLEMS, newValue);
IWorkspaceRunnable runnable= getRunnable(getShell(), fProject, fElement.getClasspathEntry());
WorkbenchRunnableAdapter op= new WorkbenchRunnableAdapter(runnable);
op.runAsUserJob(PreferencesMessages.BuildPathsPropertyPage_job_title, null);
}
return true;
}
private static IWorkspaceRunnable getRunnable(final Shell shell, final IJavaProject project, final IClasspathEntry entry) {
return monitor -> {
String[] changedAttributes= { CPListElement.IGNORE_OPTIONAL_PROBLEMS };
BuildPathSupport.modifyClasspathEntry(shell, entry, changedAttributes, project, null, entry.getReferencingEntry() != null, monitor);
};
}
private boolean isIgnoringOptionalProblems() {
return "true".equals(fElement.getAttribute(IClasspathAttribute.IGNORE_OPTIONAL_PROBLEMS)); //$NON-NLS-1$
}
}