/******************************************************************************* * Copyright (c) 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 * Zend Technologies *******************************************************************************/ package org.eclipse.php.internal.ui.preferences; import java.io.*; import java.util.*; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.jface.text.templates.Template; import org.eclipse.jface.text.templates.TemplateContextType; import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData; import org.eclipse.jface.text.templates.persistence.TemplateReaderWriter; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.window.Window; import org.eclipse.php.internal.core.PHPCoreConstants; import org.eclipse.php.internal.core.documentModel.provisional.contenttype.ContentTypeIdForPHP; import org.eclipse.php.internal.ui.PHPUIMessages; import org.eclipse.php.internal.ui.PHPUiPlugin; import org.eclipse.php.internal.ui.corext.template.php.CodeTemplateContextType; import org.eclipse.php.internal.ui.editor.configuration.PHPStructuredTextViewerConfiguration; import org.eclipse.php.internal.ui.preferences.util.Key; import org.eclipse.php.internal.ui.text.template.TemplateVariableProcessor; import org.eclipse.php.internal.ui.util.Messages; import org.eclipse.php.internal.ui.util.PixelConverter; import org.eclipse.php.internal.ui.viewsupport.ProjectTemplateStore; import org.eclipse.php.internal.ui.wizards.fields.*; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration; import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; /** */ public class PHPCodeTemplateBlock extends PHPCoreOptionsConfigurationBlock { private class CodeTemplateAdapter extends ViewerComparator implements ITreeListAdapter, IDialogFieldListener { private final Object[] NO_CHILDREN = new Object[0]; @Override public void customButtonPressed(TreeListDialogField field, int index) { doButtonPressed(index, field.getSelectedElements()); } @Override public void selectionChanged(TreeListDialogField field) { List selected = field.getSelectedElements(); field.enableButton(IDX_EDIT, canEdit(selected)); field.enableButton(IDX_EXPORT, !selected.isEmpty()); updateSourceViewerInput(selected); } @Override public void doubleClicked(TreeListDialogField field) { List selected = field.getSelectedElements(); if (canEdit(selected)) { doButtonPressed(IDX_EDIT, selected); } } @Override public Object[] getChildren(TreeListDialogField field, Object element) { if (element == COMMENT_NODE || element == CODE_NODE) { return getTemplateOfCategory(element == COMMENT_NODE); } return NO_CHILDREN; } @Override public Object getParent(TreeListDialogField field, Object element) { if (element instanceof TemplatePersistenceData) { TemplatePersistenceData data = (TemplatePersistenceData) element; if (data.getTemplate().getName().endsWith(CodeTemplateContextType.COMMENT_SUFFIX)) { return COMMENT_NODE; } return CODE_NODE; } return null; } @Override public boolean hasChildren(TreeListDialogField field, Object element) { return (element == COMMENT_NODE || element == CODE_NODE); } @Override public void dialogFieldChanged(DialogField field) { if (field == fGenerateComments) { setValue(PREF_GENERATE_COMMENTS, fGenerateComments.isSelected()); } } @Override public void keyPressed(TreeListDialogField field, KeyEvent event) { } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object) */ @Override public int category(Object element) { if (element == COMMENT_NODE) { return 1; } else if (element == CODE_NODE) { return 2; } TemplatePersistenceData data = (TemplatePersistenceData) element; String id = data.getId(); if (CodeTemplateContextType.NEWTYPE_ID.equals(id)) { return 101; } else if (CodeTemplateContextType.CLASSBODY_ID.equals(id)) { return 102; } else if (CodeTemplateContextType.INTERFACEBODY_ID.equals(id)) { return 103; } else if (CodeTemplateContextType.ENUMBODY_ID.equals(id)) { return 104; } else if (CodeTemplateContextType.ANNOTATIONBODY_ID.equals(id)) { return 105; } else if (CodeTemplateContextType.METHODSTUB_ID.equals(id)) { return 106; } else if (CodeTemplateContextType.CONSTRUCTORSTUB_ID.equals(id)) { return 107; } else if (CodeTemplateContextType.GETTERSTUB_ID.equals(id)) { return 108; } else if (CodeTemplateContextType.SETTERSTUB_ID.equals(id)) { return 109; } else if (CodeTemplateContextType.CATCHBLOCK_ID.equals(id)) { return 110; } else if (CodeTemplateContextType.FILECOMMENT_ID.equals(id)) { return 1; } else if (CodeTemplateContextType.TYPECOMMENT_ID.equals(id)) { return 2; } else if (CodeTemplateContextType.FIELDCOMMENT_ID.equals(id)) { return 3; } else if (CodeTemplateContextType.MULTIFIELDCOMMENT_ID.equals(id)) { return 4; } else if (CodeTemplateContextType.CONSTRUCTORCOMMENT_ID.equals(id)) { return 5; } else if (CodeTemplateContextType.METHODCOMMENT_ID.equals(id)) { return 6; } else if (CodeTemplateContextType.OVERRIDECOMMENT_ID.equals(id)) { return 7; } else if (CodeTemplateContextType.DELEGATECOMMENT_ID.equals(id)) { return 8; } else if (CodeTemplateContextType.GETTERCOMMENT_ID.equals(id)) { return 9; } else if (CodeTemplateContextType.SETTERCOMMENT_ID.equals(id)) { return 10; } return 1000; } } private static class CodeTemplateLabelProvider extends LabelProvider { /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) */ @Override public Image getImage(Object element) { return null; } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { if (element == COMMENT_NODE || element == CODE_NODE) { return (String) element; } TemplatePersistenceData data = (TemplatePersistenceData) element; String id = data.getId(); if (CodeTemplateContextType.CATCHBLOCK_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_catchblock_label; } else if (CodeTemplateContextType.METHODSTUB_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_methodstub_label; } else if (CodeTemplateContextType.CONSTRUCTORSTUB_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_constructorstub_label; } else if (CodeTemplateContextType.GETTERSTUB_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_getterstub_label; } else if (CodeTemplateContextType.SETTERSTUB_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_setterstub_label; } else if (CodeTemplateContextType.NEWTYPE_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_newtype_label; } else if (CodeTemplateContextType.CLASSBODY_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_classbody_label; } else if (CodeTemplateContextType.INTERFACEBODY_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_interfacebody_label; } else if (CodeTemplateContextType.ENUMBODY_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_enumbody_label; } else if (CodeTemplateContextType.ANNOTATIONBODY_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_annotationbody_label; } else if (CodeTemplateContextType.FILECOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_filecomment_label; } else if (CodeTemplateContextType.TYPECOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_typecomment_label; } else if (CodeTemplateContextType.FIELDCOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_fieldcomment_label; } else if (CodeTemplateContextType.MULTIFIELDCOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_multifieldcomment_label; } else if (CodeTemplateContextType.METHODCOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_methodcomment_label; } else if (CodeTemplateContextType.OVERRIDECOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_overridecomment_label; } else if (CodeTemplateContextType.DELEGATECOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_delegatecomment_label; } else if (CodeTemplateContextType.CONSTRUCTORCOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_constructorcomment_label; } else if (CodeTemplateContextType.GETTERCOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_gettercomment_label; } else if (CodeTemplateContextType.SETTERCOMMENT_ID.equals(id)) { return PreferencesMessages.CodeTemplateBlock_settercomment_label; } return data.getTemplate().getDescription(); } } private static final Key PREF_GENERATE_COMMENTS = getPHPCoreKey(PHPCoreConstants.CODEGEN_ADD_COMMENTS);// PreferenceConstants.CODEGEN_ADD_COMMENTS); private static Key[] getAllKeys() { return new Key[] { PREF_GENERATE_COMMENTS }; } private final static int IDX_EDIT = 0; private final static int IDX_IMPORT = 2; private final static int IDX_EXPORT = 3; private final static int IDX_EXPORTALL = 4; protected final static Object COMMENT_NODE = PHPUIMessages.CodeTemplateBlock_templates_comment_node; protected final static Object CODE_NODE = PHPUIMessages.CodeTemplateBlock_templates_code_node; private TreeListDialogField fCodeTemplateTree; private SelectionButtonDialogField fGenerateComments; protected ProjectTemplateStore fTemplateStore; private PixelConverter fPixelConverter; private SourceViewer fPatternViewer; private TemplateVariableProcessor fTemplateProcessor; public PHPCodeTemplateBlock(IStatusChangeListener context, IProject project, IWorkbenchPreferenceContainer container) { super(context, project, getAllKeys(), container); fTemplateStore = new ProjectTemplateStore(project); try { fTemplateStore.load(); } catch (IOException e) { PHPUiPlugin.log(e); } fTemplateProcessor = new TemplateVariableProcessor(); CodeTemplateAdapter adapter = new CodeTemplateAdapter(); String[] buttonLabels = new String[] { PreferencesMessages.CodeTemplateBlock_templates_edit_button, /* */null, PreferencesMessages.CodeTemplateBlock_templates_import_button, PreferencesMessages.CodeTemplateBlock_templates_export_button, PreferencesMessages.CodeTemplateBlock_templates_exportall_button }; fCodeTemplateTree = new TreeListDialogField(adapter, buttonLabels, new CodeTemplateLabelProvider()); fCodeTemplateTree.setDialogFieldListener(adapter); fCodeTemplateTree.setLabelText(PreferencesMessages.CodeTemplateBlock_templates_label); fCodeTemplateTree.setViewerComparator(adapter); fCodeTemplateTree.enableButton(IDX_EXPORT, false); fCodeTemplateTree.enableButton(IDX_EDIT, false); fCodeTemplateTree.addElement(COMMENT_NODE); fCodeTemplateTree.addElement(CODE_NODE); fCodeTemplateTree.selectFirstElement(); fGenerateComments = new SelectionButtonDialogField(SWT.CHECK | SWT.WRAP); fGenerateComments.setDialogFieldListener(adapter); fGenerateComments.setLabelText(PreferencesMessages.CodeTemplateBlock_createcomment_label); updateControls(); } public void postSetSelection(Object element) { fCodeTemplateTree.postSetSelection(new StructuredSelection(element)); } @Override protected Control createContents(Composite parent) { fPixelConverter = new PixelConverter(parent); setShell(parent.getShell()); Composite composite = new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.numColumns = 2; composite.setLayout(layout); fCodeTemplateTree.doFillIntoGrid(composite, 3); LayoutUtil.setHorizontalSpan(fCodeTemplateTree.getLabelControl(null), 2); LayoutUtil.setHorizontalGrabbing(fCodeTemplateTree.getTreeControl(null)); fPatternViewer = createViewer(composite, 2); fGenerateComments.doFillIntoGrid(composite, 2); return composite; } /* * (non-Javadoc) * * @seeorg.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock# * updateControls() */ @Override protected void updateControls() { fGenerateComments.setSelection(getBooleanValue(PREF_GENERATE_COMMENTS)); } private SourceViewer createViewer(Composite parent, int nColumns) { Label label = new Label(parent, SWT.NONE); label.setText(PreferencesMessages.CodeTemplateBlock_preview); GridData data = new GridData(); data.horizontalSpan = nColumns; label.setLayoutData(data); // // JobSafeStructuredDocument document= new JobSafeStructuredDocument(); // IDocumentPartitioner partitioner= new PHPStructuredTextPartitioner(); // // //document.setDocumentPartitioner("org.eclipse.wst.sse.core.default_structured_text_partitioning", // partitioner); // document.setDocumentPartitioner( partitioner); // // IPreferenceStore store= // PHPUiPlugin.getDefault().getPreferenceStore(); // PHPStructuredTextViewer viewer= new PHPStructuredTextViewer(parent, // null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); // //PHPStructuredTextViewerConfiguration configuration= new // PHPStructuredTextViewerConfiguration(PHPUiPlugin.getDefault().getColorManager(), // store, null, fTemplateProcessor); // //ScriptSourceViewerConfiguration configuration = new // PHPStructuredEditor().getSourceViwerConfiguration(); // // PHPStructuredTextViewerConfiguration configuration = new // PHPStructuredTextViewerConfiguration(); // viewer.configure(configuration); // viewer.setEditable(false); // viewer.setDocument(document); // // Font font= JFaceResources.getFont("org.eclipse.wst.sse.ui.textfont"); // viewer.getTextWidget().setFont(font); // new PHPSourcePreviewerUpdater(viewer, configuration, store); // // Control control= viewer.getControl(); // data= new GridData(GridData.HORIZONTAL_ALIGN_FILL | // GridData.FILL_VERTICAL); // data.horizontalSpan= nColumns; // data.heightHint= fPixelConverter.convertHeightInCharsToPixels(5); // control.setLayoutData(data); StructuredTextViewer viewer = new StructuredTextViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY); IStructuredDocument document = StructuredModelManager.getModelManager() .createStructuredDocumentFor(ContentTypeIdForPHP.ContentTypeID_PHP); StyledText text = viewer.getTextWidget(); text.setLayoutData(data); text.setEditable(false); text.setFont(JFaceResources.getFont("org.eclipse.wst.sse.ui.textfont")); //$NON-NLS-1$ // PHPStructuredTextViewerConfiguration configuration = new // PHPStructuredTextViewerConfiguration(); SourceViewerConfiguration configuration = new StructuredTextViewerConfiguration() { StructuredTextViewerConfiguration baseConfiguration = new PHPStructuredTextViewerConfiguration(); @Override public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { return baseConfiguration.getConfiguredContentTypes(sourceViewer); } @Override public LineStyleProvider[] getLineStyleProviders(ISourceViewer sourceViewer, String partitionType) { return baseConfiguration.getLineStyleProviders(sourceViewer, partitionType); } }; viewer.configure(configuration); viewer.setEditable(false); viewer.setDocument(document); Control control = viewer.getControl(); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_VERTICAL); data.horizontalSpan = nColumns; data.heightHint = fPixelConverter.convertHeightInCharsToPixels(5); control.setLayoutData(data); return viewer; } protected TemplatePersistenceData[] getTemplateOfCategory(boolean isComment) { ArrayList res = new ArrayList(); TemplatePersistenceData[] templates = fTemplateStore.getTemplateData(); for (int i = 0; i < templates.length; i++) { TemplatePersistenceData curr = templates[i]; if (isComment == curr.getTemplate().getName().endsWith(CodeTemplateContextType.COMMENT_SUFFIX)) { res.add(curr); } } return (TemplatePersistenceData[]) res.toArray(new TemplatePersistenceData[res.size()]); } protected static boolean canEdit(List selected) { return selected.size() == 1 && (selected.get(0) instanceof TemplatePersistenceData); } protected void updateSourceViewerInput(List selection) { if (fPatternViewer == null || fPatternViewer.getTextWidget().isDisposed()) { return; } if (selection.size() == 1 && selection.get(0) instanceof TemplatePersistenceData) { TemplatePersistenceData data = (TemplatePersistenceData) selection.get(0); Template template = data.getTemplate(); TemplateContextType type = PHPUiPlugin.getDefault().getCodeTemplateContextRegistry() .getContextType(template.getContextTypeId()); fTemplateProcessor.setContextType(type); fPatternViewer.getDocument().set(template.getPattern()); } else { fPatternViewer.getDocument().set(""); //$NON-NLS-1$ } } protected void doButtonPressed(int buttonIndex, List selected) { if (buttonIndex == IDX_EDIT) { edit((TemplatePersistenceData) selected.get(0)); } else if (buttonIndex == IDX_EXPORT) { export(selected); } else if (buttonIndex == IDX_EXPORTALL) { exportAll(); } else if (buttonIndex == IDX_IMPORT) { import_(); } } private void edit(TemplatePersistenceData data) { Template newTemplate = new Template(data.getTemplate()); EditTemplateDialog dialog = new EditTemplateDialog(getShell(), newTemplate, true, false, PHPUiPlugin.getDefault().getCodeTemplateContextRegistry()); if (dialog.open() == Window.OK) { // changed data.setTemplate(dialog.getTemplate()); fCodeTemplateTree.refresh(data); fCodeTemplateTree.selectElements(new StructuredSelection(data)); } } private void import_() { FileDialog dialog = new FileDialog(getShell()); dialog.setText(PreferencesMessages.CodeTemplateBlock_import_title); dialog.setFilterExtensions(new String[] { PreferencesMessages.CodeTemplateBlock_import_extension }); String path = dialog.open(); if (path == null) return; try { TemplateReaderWriter reader = new TemplateReaderWriter(); File file = new File(path); if (file.exists()) { InputStream input = new BufferedInputStream(new FileInputStream(file)); try { TemplatePersistenceData[] datas = reader.read(input, null); for (int i = 0; i < datas.length; i++) { updateTemplate(datas[i]); } } finally { try { input.close(); } catch (IOException x) { } } } fCodeTemplateTree.refresh(); updateSourceViewerInput(fCodeTemplateTree.getSelectedElements()); } catch (FileNotFoundException e) { openReadErrorDialog(e); } catch (IOException e) { openReadErrorDialog(e); } } private void updateTemplate(TemplatePersistenceData data) { TemplatePersistenceData[] datas = fTemplateStore.getTemplateData(); for (int i = 0; i < datas.length; i++) { String id = datas[i].getId(); if (id != null && id.equals(data.getId())) { datas[i].setTemplate(data.getTemplate()); break; } } } private void exportAll() { export(fTemplateStore.getTemplateData()); } private void export(List selected) { Set datas = new HashSet(); for (int i = 0; i < selected.size(); i++) { Object curr = selected.get(i); if (curr instanceof TemplatePersistenceData) { datas.add(curr); } else { TemplatePersistenceData[] cat = getTemplateOfCategory(curr == COMMENT_NODE); datas.addAll(Arrays.asList(cat)); } } export((TemplatePersistenceData[]) datas.toArray(new TemplatePersistenceData[datas.size()])); } private void export(TemplatePersistenceData[] templates) { FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setText( Messages.format(PreferencesMessages.CodeTemplateBlock_export_title, String.valueOf(templates.length))); dialog.setFilterExtensions(new String[] { PreferencesMessages.CodeTemplateBlock_export_extension }); dialog.setFileName(PreferencesMessages.CodeTemplateBlock_export_filename); String path = dialog.open(); if (path == null) return; File file = new File(path); // FIXME /* * if (file.isHidden()) { String title= * PreferencesMessages.CodeTemplateBlock_export_error_title; String * message= Messages.format(PreferencesMessages. * CodeTemplateBlock_export_error_hidden , * BasicElementLabels.getPathLabel(file)); * MessageDialog.openError(getShell(), title, message); return; } * * if (file.exists() && !file.canWrite()) { String title= * PreferencesMessages.CodeTemplateBlock_export_error_title; String * message=Messages.format(PreferencesMessages. * CodeTemplateBlock_export_error_canNotWrite, * BasicElementLabels.getPathLabel(file)); * MessageDialog.openError(getShell(), title, message); return; } */ if (!file.exists() || confirmOverwrite(file)) { OutputStream output = null; try { output = new BufferedOutputStream(new FileOutputStream(file)); TemplateReaderWriter writer = new TemplateReaderWriter(); writer.save(templates, output); output.close(); } catch (IOException e) { if (output != null) { try { output.close(); } catch (IOException e2) { // ignore } } openWriteErrorDialog(); } } } private boolean confirmOverwrite(File file) { return MessageDialog.openQuestion(getShell(), PreferencesMessages.CodeTemplateBlock_export_exists_title, PreferencesMessages.PHPCodeTemplateBlock_2); } @Override public void performDefaults() { super.performDefaults(); fTemplateStore.restoreDefaults(); // refresh fCodeTemplateTree.refresh(); updateSourceViewerInput(fCodeTemplateTree.getSelectedElements()); } public boolean performOk(boolean enabled) { boolean res = super.performOk(); if (!res) return false; if (fProject != null) { TemplatePersistenceData[] templateData = fTemplateStore.getTemplateData(); for (int i = 0; i < templateData.length; i++) { fTemplateStore.setProjectSpecific(templateData[i].getId(), enabled); } } try { fTemplateStore.save(); } catch (IOException e) { PHPUiPlugin.log(e); openWriteErrorDialog(); } return true; } public void performCancel() { try { fTemplateStore.revertChanges(); } catch (IOException e) { openReadErrorDialog(e); } } private void openReadErrorDialog(Exception e) { String title = PreferencesMessages.CodeTemplateBlock_error_read_title; String message = e.getLocalizedMessage(); if (message != null) message = Messages.format(PreferencesMessages.CodeTemplateBlock_error_parse_message, message); else message = PreferencesMessages.CodeTemplateBlock_error_read_message; MessageDialog.openError(getShell(), title, message); } private void openWriteErrorDialog() { String title = PreferencesMessages.CodeTemplateBlock_error_write_title; String message = PreferencesMessages.CodeTemplateBlock_error_write_message; MessageDialog.openError(getShell(), title, message); } @Override protected String[] getFullBuildDialogStrings(boolean workspaceSettings) { return null; } /* * (non-Javadoc) * * @seeorg.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock# * validateSettings(java.lang.String, java.lang.String) */ @Override protected void validateSettings(Key changedKey, String oldValue, String newValue) { // no validation here } }