package com.jetbrains.lang.dart.psi.impl;
import com.intellij.lang.ASTNode;
import com.intellij.navigation.ItemPresentation;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNameIdentifierOwner;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.jetbrains.lang.dart.psi.DartId;
import com.jetbrains.lang.dart.psi.DartLibraryNameElement;
import com.jetbrains.lang.dart.util.DartElementGenerator;
import icons.DartIcons;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public abstract class DartLibraryNameElementBase extends DartPsiCompositeElementImpl implements PsiNameIdentifierOwner {
public DartLibraryNameElementBase(@NotNull ASTNode node) {
super(node);
}
@Override
public PsiElement setName(@NonNls @NotNull String newLibraryName) throws IncorrectOperationException {
final DartLibraryNameElement libraryNameElementNew =
DartElementGenerator.createLibraryNameElementFromText(getProject(), newLibraryName);
if (libraryNameElementNew != null) {
getNode().replaceAllChildrenToChildrenOf(libraryNameElementNew.getNode());
}
return this;
}
@NotNull
@Override
public String getName() {
StringBuilder name = new StringBuilder();
for (DartId id : PsiTreeUtil.getChildrenOfTypeAsList(this, DartId.class)) {
if (name.length() > 0) {
name.append('.');
}
name.append(id.getText());
}
return name.toString();
}
@Nullable
public ItemPresentation getPresentation() {
return new ItemPresentation() {
@Override
public String getPresentableText() {
return getName();
}
@Override
@Nullable
public String getLocationString() {
return null;
}
@Override
public Icon getIcon(boolean open) {
return DartLibraryNameElementBase.this.getIcon(0);
}
};
}
@Override
public Icon getIcon(int flags) {
return DartIcons.Dart_file; // todo better icon?
}
@Override
public PsiElement getNameIdentifier() {
return this;
}
}