/*******************************************************************************
* Copyright (c) 2014, 2014 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package com.github.rustdt.ide.ui.editor;
import org.eclipse.ui.IEditorInput;
import melnorme.lang.ide.ui.editor.structure.AbstractLangStructureEditor;
import melnorme.lang.ide.ui.editor.structure.LangOutlinePage;
import melnorme.lang.ide.ui.editor.structure.StructureElementContentProvider;
import melnorme.lang.ide.ui.editor.text.LangPairMatcher;
import melnorme.lang.tooling.structure.IStructureElementContainer;
import melnorme.lang.tooling.structure.StructureElement;
import melnorme.lang.tooling.structure.StructureElementKind;
public class RustEditor extends AbstractLangStructureEditor {
public RustEditor() {
}
@Override
protected void internalDoSetInput(IEditorInput input) {
super.internalDoSetInput(input);
if(editorLocation != null) {
if(editorLocation.getFileName().equals("mod.rs")) {
setPartName("[" + editorLocation.getParent().getFileName() + "].rs" );
}
}
}
@Override
protected LangPairMatcher init_createBracketMatcher() {
return new LangPairMatcher("{}[]()".toCharArray());
}
@Override
protected LangOutlinePage init_createOutlinePage() {
return new LangOutlinePage(this) {
@Override
protected StructureElementContentProvider createContentProvider() {
return new SpecializedStructureElementContentProvider();
}
};
}
public class SpecializedStructureElementContentProvider extends StructureElementContentProvider {
@Override
protected Object[] getChildren(IStructureElementContainer elementContainer) {
if(elementContainer instanceof StructureElement) {
StructureElement structureElement = (StructureElement) elementContainer;
if(structureElement.getKind() == StructureElementKind.ENUM) {
return null; // don't provide enum variants
}
if(structureElement.getKind() == StructureElementKind.FUNCTION
|| structureElement.getKind() == StructureElementKind.USE_GROUP) {
return null; // don't provide children, simplify structure
}
}
return super.getChildren(elementContainer);
}
}
}