Java tutorial
/******************************************************************************* * Copyright (c) 2015 itemis AG (http://www.itemis.eu) 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 *******************************************************************************/ package org.eclipse.xtext.xbase.ui.builder; import static org.eclipse.xtext.xbase.ui.builder.XbaseBuilderPreferenceAccess.*; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.xtext.builder.preferences.BuilderConfigurationBlock; import org.eclipse.xtext.util.JavaVersion; import com.google.inject.Inject; /** * Builder configuration block that adds compiler settings for Xbase. * * @author Miro Spoenemann - Initial contribution and API */ public class XbaseBuilderConfigurationBlock extends BuilderConfigurationBlock { @Inject private XbaseBuilderPreferenceAccess preferenceAccess; private Combo versionCombo; private Button useComplianceButton; @Override protected void createGeneralSectionItems(Composite composite) { super.createGeneralSectionItems(composite); useComplianceButton = addCheckBox(composite, "Use source compatibility level from Java settings", PREF_USE_COMPILER_SOURCE, BOOLEAN_VALUES, 0); int valueCount = JavaVersion.values().length; String[] values = new String[valueCount]; String[] valueLabels = new String[valueCount]; for (int i = 0; i < valueCount; i++) { JavaVersion v = JavaVersion.values()[i]; values[i] = v.toString(); valueLabels[i] = v.getLabel(); } versionCombo = addComboBox(composite, "Source compatibility level of generated code:", PREF_JAVA_VERSION, 0, values, valueLabels); SelectionListener selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateVersionCombo(); } }; selectionListener.widgetSelected(null); useComplianceButton.addSelectionListener(selectionListener); addCheckBox(composite, "Generate @SuppressWarnings annotations", PREF_GENERATE_SUPPRESS_WARNINGS, BOOLEAN_VALUES, 0); final Button generateGeneratedButton = addCheckBox(composite, "Generate @Generated annotations", PREF_GENERATE_GENERATED, BOOLEAN_VALUES, 0); final Button includeDateButton = addCheckBox(composite, "Include current time information", PREF_DATE_IN_GENERATED, BOOLEAN_VALUES, INDENT_AMOUNT); includeDateButton.setEnabled(generateGeneratedButton.getSelection()); final Text commentText = addTextField(composite, "Comment:", PREF_GENERATED_COMMENT, INDENT_AMOUNT, 0); commentText.setEnabled(generateGeneratedButton.getSelection()); generateGeneratedButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { includeDateButton.setEnabled(generateGeneratedButton.getSelection()); commentText.setEnabled(generateGeneratedButton.getSelection()); } }); } @Override protected void updateCombo(Combo curr) { if (curr == versionCombo) updateVersionCombo(); else super.updateCombo(curr); } private void updateVersionCombo() { boolean useCompliance = useComplianceButton.getSelection(); versionCombo.setEnabled(!useCompliance); if (useCompliance) { String javaSourceOption = javaValue(JavaCore.COMPILER_SOURCE); JavaVersion javaVersion = preferenceAccess.fromCompilerSourceLevel(javaSourceOption); JavaVersion selectedVersion = JavaVersion.values()[versionCombo.getSelectionIndex()]; if (javaVersion != selectedVersion) { versionCombo.select(javaVersion.ordinal()); } } } protected String javaValue(final String javaPreference) { IJavaProject javaProject = JavaCore.create(getProject()); if (javaProject != null && javaProject.exists() && javaProject.getProject().isAccessible()) { return javaProject.getOption(javaPreference, true); } else { return JavaCore.getOption(javaPreference); } } }