Folding API refined. More foldings added in JavaScript.

This commit is contained in:
Maxim Shafirov
2005-02-01 11:59:47 +03:00
parent 524c11acf4
commit a25dfeb153
12 changed files with 54 additions and 19 deletions
@@ -1,7 +1,7 @@
package com.intellij.lang.folding;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.editor.Document;
import com.intellij.psi.PsiElement;
/**
* Created by IntelliJ IDEA.
@@ -11,9 +11,9 @@ import com.intellij.psi.PsiElement;
* To change this template use File | Settings | File Templates.
*/
public interface FoldingBuilder {
FoldingDescriptor[] buildFoldRegions(PsiElement file, Document document);
FoldingDescriptor[] buildFoldRegions(ASTNode node, Document document);
String getPlaceholderText(PsiElement elt);
String getPlaceholderText(ASTNode node);
boolean isCollapsedByDefault(PsiElement elt);
boolean isCollapsedByDefault(ASTNode node);
}
@@ -1,7 +1,7 @@
package com.intellij.lang.folding;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
/**
* Created by IntelliJ IDEA.
@@ -11,15 +11,15 @@ import com.intellij.psi.PsiElement;
* To change this template use File | Settings | File Templates.
*/
public class FoldingDescriptor {
private PsiElement myElement;
private ASTNode myElement;
private TextRange myRange;
public FoldingDescriptor(final PsiElement element, final TextRange range) {
myElement = element;
public FoldingDescriptor(final ASTNode node, final TextRange range) {
myElement = node;
myRange = range;
}
public PsiElement getElement() {
public ASTNode getElement() {
return myElement;
}
@@ -4,6 +4,7 @@
*/
package com.intellij.psi;
import com.intellij.lang.ASTNode;
import com.intellij.lang.Language;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Iconable;
@@ -116,4 +117,6 @@ public interface PsiElement extends UserDataHolder, Iconable {
GlobalSearchScope getResolveScope();
SearchScope getUseScope();
ASTNode getNode();
}
@@ -35,10 +35,10 @@ class FoldingPolicy {
if (lang != null) {
final FoldingBuilder foldingBuilder = lang.getFoldingBuilder();
if (foldingBuilder != null) {
final FoldingDescriptor[] foldingDescriptors = foldingBuilder.buildFoldRegions(file, document);
final FoldingDescriptor[] foldingDescriptors = foldingBuilder.buildFoldRegions(file.getNode(), document);
for (int i = 0; i < foldingDescriptors.length; i++) {
FoldingDescriptor descriptor = foldingDescriptors[i];
map.put(descriptor.getElement(), descriptor.getRange());
map.put(SourceTreeToPsiMap.treeElementToPsi(descriptor.getElement()), descriptor.getRange());
}
return map;
}
@@ -261,7 +261,7 @@ class FoldingPolicy {
if (lang != null) {
final FoldingBuilder foldingBuilder = lang.getFoldingBuilder();
if (foldingBuilder != null) {
return foldingBuilder.getPlaceholderText(element);
return foldingBuilder.getPlaceholderText(element.getNode());
}
}
@@ -291,7 +291,7 @@ class FoldingPolicy {
if (lang != null) {
final FoldingBuilder foldingBuilder = lang.getFoldingBuilder();
if (foldingBuilder != null) {
return foldingBuilder.isCollapsedByDefault(element);
return foldingBuilder.isCollapsedByDefault(element.getNode());
}
}
@@ -516,10 +516,8 @@ class FoldingPolicy {
return buffer.toString();
} else if (element instanceof PsiJavaFile) {
return null;
} else {
LOG.error("Unknown element:" + element);
return null;
}
return null;
}
private static <T extends PsiNamedElement> T restoreElementInternal (PsiElement parent, String name, int index, Class<T> hisClass) {
@@ -1,5 +1,6 @@
package com.intellij.psi.impl.compiled;
import com.intellij.lang.ASTNode;
import com.intellij.lang.Language;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.StdFileTypes;
@@ -183,4 +184,8 @@ abstract class ClsElementImpl extends PsiElementBase implements PsiCompiledEleme
public PsiElement getOriginalElement() {
return this;
}
public ASTNode getNode() {
return null;
}
}
@@ -1,5 +1,6 @@
package com.intellij.psi.impl.file;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
@@ -248,4 +249,8 @@ public class PsiBinaryFileImpl extends PsiElementBase implements PsiBinaryFile,
LOG.assertTrue(false);
return null;
}
public ASTNode getNode() {
return null;
}
}
@@ -3,6 +3,7 @@ package com.intellij.psi.impl.file;
import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.FileType;
@@ -590,5 +591,9 @@ public class PsiDirectoryImpl extends PsiElementBase implements PsiDirectory {
public String toString() {
return "PsiDirectory:" + myFile.getPresentableUrl();
}
public ASTNode getNode() {
return null;
}
}
@@ -1,5 +1,6 @@
package com.intellij.psi.impl.file;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.undo.DocumentReference;
import com.intellij.openapi.command.undo.UndoManager;
@@ -21,9 +22,6 @@ import com.intellij.psi.scope.NameHint;
import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.IncorrectOperationException;
import com.intellij.ide.impl.PackageViewSelectInTarget;
import com.intellij.ide.projectView.impl.PackageViewPane;
import com.intellij.ide.projectView.ProjectView;
import java.util.ArrayList;
import java.util.Iterator;
@@ -424,4 +422,8 @@ public class PsiPackageImpl extends PsiElementBase implements PsiPackage {
public boolean isPhysical() {
return true;
}
public ASTNode getNode() {
return null;
}
}
@@ -1,5 +1,6 @@
package com.intellij.psi.impl.light;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -108,4 +109,7 @@ public abstract class LightElement extends PsiElementBase {
throw new IncorrectOperationException();
}
public ASTNode getNode() {
return null;
}
}
@@ -1,5 +1,6 @@
package com.intellij.psi.impl.migration;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.impl.file.PsiPackageImpl;
@@ -38,4 +39,8 @@ public class MigrationPackageImpl extends PsiPackageImpl implements PsiPackage {
public VirtualFile[] occursInPackagePrefixes() {
return VirtualFile.EMPTY_ARRAY;
}
public ASTNode getNode() {
return null;
}
}
@@ -242,4 +242,8 @@ public abstract class CompositePsiElement extends CompositeElement implements Ps
public Language getLanguage() {
return getElementType().getLanguage();
}
public ASTNode getNode() {
return this;
}
}
@@ -190,4 +190,8 @@ public class LeafPsiElement extends LeafElementImpl implements PsiElement {
public Language getLanguage() {
return getElementType().getLanguage();
}
public ASTNode getNode() {
return this;
}
}