PsiFile factory stuff moved from FileType to Language's ParserDefinition.

This commit is contained in:
Maxim Shafirov
2005-01-26 13:43:03 +03:00
parent d447cb36ef
commit a8aab98101
44 changed files with 504 additions and 396 deletions
@@ -1,7 +1,10 @@
package com.intellij.lang;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
@@ -22,4 +25,7 @@ public interface ParserDefinition {
PsiParser createParser();
PsiElement createElement(ASTNode node);
PsiFile createFile(Project project, VirtualFile file);
PsiFile createFile(Project project, String name, CharSequence text);
}
@@ -5,10 +5,8 @@
package com.intellij.openapi.fileTypes;
import com.intellij.ide.structureView.StructureViewModel;
import com.intellij.lang.Language;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import javax.swing.*;
@@ -31,13 +29,7 @@ public interface FileType {
SyntaxHighlighter getHighlighter(Project project);
PsiFile createPsiFile(VirtualFile file, Project project);
PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset);
FileTypeSupportCapabilities getSupportCapabilities();
StructureViewModel getStructureViewModel(VirtualFile file, Project project);
Language getLanguage();
}
@@ -32,18 +32,18 @@
package com.intellij.openapi.fileTypes;
public class StdFileTypes {
public static FileType JAVA;
public static LanguageFileType JAVA;
public static FileType CLASS;
public static FileType JSP;
public static FileType JSPX;
public static FileType XML;
public static FileType DTD;
public static FileType HTML;
public static FileType XHTML;
public static LanguageFileType JSP;
public static LanguageFileType JSPX;
public static LanguageFileType XML;
public static LanguageFileType DTD;
public static LanguageFileType HTML;
public static LanguageFileType XHTML;
public static LanguageFileType ASPECT;
public static FileType PLAIN_TEXT;
public static FileType ARCHIVE;
public static FileType UNKNOWN;
public static FileType ASPECT;
public static FileType GUI_DESIGNER_FORM;
public static FileType IDEA_WORKSPACE;
public static FileType IDEA_PROJECT;
@@ -39,10 +39,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.file.PsiBinaryFileImpl;
import javax.swing.*;
@@ -81,14 +77,6 @@ public class ArchiveFileType implements FileType {
return null;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new PsiBinaryFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return null;
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -35,14 +35,9 @@ import com.intellij.ide.structureView.StructureViewModel;
import com.intellij.lang.dtd.DTDLanguage;
import com.intellij.openapi.fileTypes.FileTypeSupportCapabilities;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import javax.swing.*;
@@ -69,14 +64,6 @@ public class DTDFileType extends LanguageFileType {
return ICON;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new XmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new XmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, text, startOffset, endOffset, StdFileTypes.DTD);
}
private FileTypeSupportCapabilities mySupportCapabilities = new FileTypeSupportCapabilities() {
public boolean hasCompletion() {
return false; //To change body of implemented methods use File | Settings | File Templates.
@@ -39,10 +39,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import javax.swing.*;
@@ -81,14 +77,6 @@ public class GuiFormFileType implements FileType {
return new XmlFileHighlighter();
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, this, text, startOffset, endOffset);
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -36,14 +36,10 @@ import com.intellij.ide.structureView.impl.xml.XmlStructureViewTreeModel;
import com.intellij.lang.html.HTMLLanguage;
import com.intellij.openapi.fileTypes.FileTypeSupportCapabilities;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.html.HtmlFileImpl;
import com.intellij.psi.xml.XmlFile;
import javax.swing.*;
@@ -71,14 +67,6 @@ public class HtmlFileType extends LanguageFileType {
return ICON;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new HtmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new HtmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, text, startOffset, endOffset, StdFileTypes.HTML);
}
private static FileTypeSupportCapabilities capabilities = new FileTypeSupportCapabilities() {
public boolean hasCompletion() {
return true;
@@ -37,15 +37,9 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeSupportCapabilities;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.compiled.ClsFileImpl;
import javax.swing.*;
@@ -84,25 +78,6 @@ public class JavaClassFileType implements FileType {
return new JavaFileHighlighter(LanguageLevel.HIGHEST);
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
if (fileIndex.isInLibraryClasses(file)) {
// skip inners & anonymous
String name = file.getName();
int dotIndex = name.lastIndexOf('.');
if (dotIndex < 0) dotIndex = name.length();
int index = name.lastIndexOf('$', dotIndex);
if (index >= 0) return null;
return new ClsFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
return null;
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return null;
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -37,16 +37,11 @@ import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.fileTypes.FileTypeSupportCapabilities;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.PsiJavaFileImpl;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import javax.swing.*;
@@ -73,18 +68,6 @@ public class JavaFileType extends LanguageFileType {
return ICON;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
if (fileIndex.isInSource(file)) {
return new PsiJavaFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new PsiJavaFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, text, startOffset, endOffset);
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -39,10 +39,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import javax.swing.*;
@@ -81,14 +77,6 @@ public class ModuleFileType implements FileType {
return new XmlFileHighlighter();
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, this, text, startOffset, endOffset);
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -39,10 +39,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import javax.swing.*;
@@ -81,14 +77,6 @@ public class ProjectFileType implements FileType {
return new XmlFileHighlighter();
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, this, text, startOffset, endOffset);
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -39,7 +39,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import javax.swing.*;
@@ -78,14 +77,6 @@ public class UnknownFileType implements FileType {
return null;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return null;
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return null;
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -39,10 +39,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import javax.swing.*;
@@ -81,14 +77,6 @@ public class WorkspaceFileType implements FileType {
return new XmlFileHighlighter();
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, this, text, startOffset, endOffset);
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -35,14 +35,9 @@ import com.intellij.ide.structureView.StructureViewModel;
import com.intellij.lang.xhtml.XHTMLLanguage;
import com.intellij.openapi.fileTypes.FileTypeSupportCapabilities;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import javax.swing.*;
@@ -69,14 +64,6 @@ public class XHtmlFileType extends LanguageFileType {
return ICON;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new XmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new XmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, text, startOffset, endOffset, StdFileTypes.XHTML);
}
private static FileTypeSupportCapabilities capabilities = new FileTypeSupportCapabilities() {
public boolean hasCompletion() {
return true;
@@ -36,14 +36,10 @@ import com.intellij.ide.structureView.impl.xml.XmlStructureViewTreeModel;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.fileTypes.FileTypeSupportCapabilities;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import com.intellij.psi.xml.XmlFile;
import javax.swing.*;
@@ -71,14 +67,6 @@ public class XmlFileType extends LanguageFileType {
return ICON;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new XmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new XmlFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, text, startOffset, endOffset, StdFileTypes.XML);
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -2,6 +2,7 @@ package com.intellij.lang.dtd;
import com.intellij.ide.highlighter.XmlFileHighlighter;
import com.intellij.lang.Language;
import com.intellij.lang.ParserDefinition;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
@@ -22,4 +23,7 @@ public class DTDLanguage extends Language {
return new XmlFileHighlighter(true);
}
public ParserDefinition getParserDefinition(Project project) {
return new DTDParserDefinition();
}
}
@@ -0,0 +1,55 @@
package com.intellij.lang.dtd;
import com.intellij.lang.ASTNode;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.PsiParser;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
/**
* Created by IntelliJ IDEA.
* User: max
* Date: Jan 26, 2005
* Time: 12:43:27 PM
* To change this template use File | Settings | File Templates.
*/
public class DTDParserDefinition implements ParserDefinition {
public Lexer createLexer() {
return null;
}
public IElementType getFileNodeType() {
return null;
}
public TokenSet getWhitespaceTokens() {
return null;
}
public TokenSet getCommentTokens() {
return null;
}
public PsiParser createParser() {
return null;
}
public PsiElement createElement(ASTNode node) {
return null;
}
public PsiFile createFile(Project project, VirtualFile file) {
return new XmlFileImpl(project, file);
}
public PsiFile createFile(Project project, String name, CharSequence text) {
return new XmlFileImpl(project, name, text, StdFileTypes.DTD);
}
}
@@ -3,12 +3,11 @@ package com.intellij.lang.html;
import com.intellij.codeFormatting.PseudoTextBuilder;
import com.intellij.codeFormatting.xml.html.HtmlPseudoTextBuilder;
import com.intellij.ide.highlighter.HtmlFileHighlighter;
import com.intellij.lang.Language;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.psi.impl.source.xml.XmlPsiPolicy;
import com.intellij.psi.impl.source.xml.behavior.EncodeEachSymbolPolicy;
/**
* Created by IntelliJ IDEA.
@@ -33,4 +32,8 @@ public class HTMLLanguage extends XMLLanguage {
public XmlPsiPolicy getPsiPolicy() {
return ENCODE_EACH_SYMBOL_POLICY;
}
public ParserDefinition getParserDefinition(Project project) {
return new HTMLParserDefinition();
}
}
@@ -0,0 +1,55 @@
package com.intellij.lang.html;
import com.intellij.lang.ASTNode;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.PsiParser;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.html.HtmlFileImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
/**
* Created by IntelliJ IDEA.
* User: max
* Date: Jan 26, 2005
* Time: 1:01:36 PM
* To change this template use File | Settings | File Templates.
*/
public class HTMLParserDefinition implements ParserDefinition {
public Lexer createLexer() {
return null;
}
public IElementType getFileNodeType() {
return null;
}
public TokenSet getWhitespaceTokens() {
return null;
}
public TokenSet getCommentTokens() {
return null;
}
public PsiParser createParser() {
return null;
}
public PsiElement createElement(ASTNode node) {
return null;
}
public PsiFile createFile(Project project, VirtualFile file) {
return new HtmlFileImpl(project, file);
}
public PsiFile createFile(Project project, String name, CharSequence text) {
return new HtmlFileImpl(project, name, text, StdFileTypes.HTML);
}
}
@@ -25,13 +25,15 @@ public class PsiBuilderImpl implements PsiBuilder {
private List<Object> myProduction = new ArrayList<Object>();
private Lexer myLexer;
private boolean myFileLevelParsing;
private int myCurrentLexem;
private CharTable myCharTable;
private boolean myStarted = false;
public PsiBuilderImpl(final Lexer lexer, final CharTable charTable) {
public PsiBuilderImpl(final Lexer lexer, final CharTable charTable, boolean fileLevelParsing) {
myCharTable = charTable;
myLexer = lexer;
myFileLevelParsing = fileLevelParsing;
}
private static class MarkerImpl implements Marker {
@@ -165,8 +167,16 @@ public class PsiBuilderImpl implements PsiBuilder {
public ASTNode getTreeBuilt() {
MarkerImpl rootMarker = (MarkerImpl)myProduction.get(0);
ASTNode rootNode = new CompositeElement(rootMarker.myType);
rootNode.putUserData(CharTable.CHAR_TABLE_KEY, myCharTable);
final ASTNode rootNode;
if (myFileLevelParsing) {
rootNode = new FileElement(rootMarker.myType);
myCharTable = ((FileElement)rootNode).getCharTable();
}
else {
rootNode = new CompositeElement(rootMarker.myType);
rootNode.putUserData(CharTable.CHAR_TABLE_KEY, myCharTable);
}
ASTNode curNode = rootNode;
for (int i = 1; i < myProduction.size(); i++) {
@@ -3,6 +3,7 @@ package com.intellij.lang.java;
import com.intellij.codeFormatting.PseudoTextBuilder;
import com.intellij.ide.highlighter.JavaFileHighlighter;
import com.intellij.lang.Language;
import com.intellij.lang.ParserDefinition;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
@@ -35,4 +36,8 @@ public class JavaLanguage extends Language {
}
};
}
public ParserDefinition getParserDefinition(Project project) {
return new JavaParserDefinition();
}
}
@@ -0,0 +1,63 @@
package com.intellij.lang.java;
import com.intellij.lang.ASTNode;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.PsiParser;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.PsiJavaFileImpl;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
/**
* Created by IntelliJ IDEA.
* User: max
* Date: Jan 26, 2005
* Time: 12:40:22 PM
* To change this template use File | Settings | File Templates.
*/
public class JavaParserDefinition implements ParserDefinition {
public Lexer createLexer() {
return null;
}
public IElementType getFileNodeType() {
return null;
}
public TokenSet getWhitespaceTokens() {
return null;
}
public TokenSet getCommentTokens() {
return null;
}
public PsiParser createParser() {
return null;
}
public PsiElement createElement(ASTNode node) {
return null;
}
public PsiFile createFile(Project project, VirtualFile file) {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
if (fileIndex.isInSource(file)) {
return new PsiJavaFileImpl(project, file);
}
else {
return new PsiPlainTextFileImpl(project, file);
}
}
public PsiFile createFile(Project project, String name, CharSequence text) {
return new PsiJavaFileImpl(project, name, text);
}
}
@@ -1,11 +1,11 @@
package com.intellij.lang.xhtml;
import com.intellij.codeFormatting.PseudoTextBuilder;
import com.intellij.ide.highlighter.XmlFileHighlighter;
import com.intellij.lang.Language;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.codeFormatting.PseudoTextBuilder;
import com.intellij.psi.impl.source.xml.XmlPsiPolicy;
/**
@@ -27,7 +27,12 @@ public class XHTMLLanguage extends XMLLanguage {
public PseudoTextBuilder getFormatter() {
return null;
}
public XmlPsiPolicy getPsiPolicy() {
return ENCODE_EACH_SYMBOL_POLICY;
}
public ParserDefinition getParserDefinition(Project project) {
return new XHTMLParserDefinition();
}
}
@@ -0,0 +1,55 @@
package com.intellij.lang.xhtml;
import com.intellij.lang.ASTNode;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.PsiParser;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
/**
* Created by IntelliJ IDEA.
* User: max
* Date: Jan 26, 2005
* Time: 1:02:53 PM
* To change this template use File | Settings | File Templates.
*/
public class XHTMLParserDefinition implements ParserDefinition {
public Lexer createLexer() {
return null;
}
public IElementType getFileNodeType() {
return null;
}
public TokenSet getWhitespaceTokens() {
return null;
}
public TokenSet getCommentTokens() {
return null;
}
public PsiParser createParser() {
return null;
}
public PsiElement createElement(ASTNode node) {
return null;
}
public PsiFile createFile(Project project, VirtualFile file) {
return new XmlFileImpl(project, file);
}
public PsiFile createFile(Project project, String name, CharSequence text) {
return new XmlFileImpl(project, name, text, StdFileTypes.XHTML);
}
}
@@ -4,6 +4,7 @@ import com.intellij.codeFormatting.PseudoTextBuilder;
import com.intellij.codeFormatting.xml.xml.XmlPseudoTextBuilder;
import com.intellij.ide.highlighter.XmlFileHighlighter;
import com.intellij.lang.Language;
import com.intellij.lang.ParserDefinition;
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.psi.impl.source.xml.XmlPsiPolicy;
@@ -41,4 +42,8 @@ public class XMLLanguage extends Language {
public XmlPsiPolicy getPsiPolicy(){
return CDATA_ON_ANY_ENCODED_POLICY;
}
public ParserDefinition getParserDefinition(Project project) {
return new XMLParserDefinition();
}
}
@@ -0,0 +1,55 @@
package com.intellij.lang.xml;
import com.intellij.lang.ASTNode;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.PsiParser;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
/**
* Created by IntelliJ IDEA.
* User: max
* Date: Jan 26, 2005
* Time: 1:00:32 PM
* To change this template use File | Settings | File Templates.
*/
public class XMLParserDefinition implements ParserDefinition {
public Lexer createLexer() {
return null;
}
public IElementType getFileNodeType() {
return null;
}
public TokenSet getWhitespaceTokens() {
return null;
}
public TokenSet getCommentTokens() {
return null;
}
public PsiParser createParser() {
return null;
}
public PsiElement createElement(ASTNode node) {
return null;
}
public PsiFile createFile(Project project, VirtualFile file) {
return new XmlFileImpl(project, file);
}
public PsiFile createFile(Project project, String name, CharSequence text) {
return new XmlFileImpl(project, name, text, StdFileTypes.XML);
}
}
@@ -36,10 +36,6 @@ import com.intellij.lang.Language;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import javax.swing.*;
@@ -78,14 +74,6 @@ public class PlainTextFileType implements FileType {
return new PlainSyntaxHighlighter();
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return new PsiPlainTextFileImpl((PsiManagerImpl)PsiManager.getInstance(project), name, this, text, startOffset, endOffset);
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -33,11 +33,6 @@ package com.intellij.openapi.fileTypes;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.file.PsiBinaryFileImpl;
public class UserBinaryFileType extends UserFileType<UserBinaryFileType> {
public SettingsEditor<UserBinaryFileType> getEditor() {
@@ -52,11 +47,4 @@ public class UserBinaryFileType extends UserFileType<UserBinaryFileType> {
return null;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return new PsiBinaryFileImpl((PsiManagerImpl)PsiManager.getInstance(project), file);
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return null;
}
}
@@ -12,7 +12,6 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeSupportCapabilities;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import javax.swing.*;
@@ -39,14 +38,6 @@ public abstract class FakeFileType implements FileType {
return null;
}
public PsiFile createPsiFile(VirtualFile file, Project project) {
return null;
}
public PsiFile createPsiFile(Project project, String name, char[] text, int startOffset, int endOffset) {
return null;
}
public FileTypeSupportCapabilities getSupportCapabilities() {
return null;
}
@@ -6,10 +6,13 @@ import com.intellij.aspects.psi.PsiWithinPointcut;
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.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
@@ -28,9 +31,9 @@ import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.xml.*;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
import com.intellij.util.text.CharArrayCharSequence;
import com.intellij.xml.util.XmlTagTextUtil;
import com.intellij.xml.util.XmlUtil;
import com.intellij.lang.ASTNode;
import java.util.Iterator;
import java.util.Map;
@@ -609,8 +612,12 @@ public class PsiElementFactoryImpl implements PsiElementFactory {
int startOffset,
int endOffset) {
LOG.assertTrue(!fileType.isBinary());
PsiFile psiFile = fileType.createPsiFile(manager.getProject(), name, chars, startOffset, endOffset);
return psiFile != null ? psiFile : new PsiPlainTextFileImpl(manager, name, fileType, chars, startOffset, endOffset);
final Project project = manager.getProject();
final CharArrayCharSequence text = new CharArrayCharSequence(chars, startOffset, endOffset);
if (fileType instanceof LanguageFileType) {
return ((LanguageFileType)fileType).getLanguage().getParserDefinition(project).createFile(project, name, text);
}
return new PsiPlainTextFileImpl(project, name, fileType, text);
}
public PsiClass createClassFromText(String text, PsiElement context) throws IncorrectOperationException {
@@ -751,19 +758,17 @@ public class PsiElementFactoryImpl implements PsiElementFactory {
public PsiExpressionCodeFragment createExpressionCodeFragment(String text, PsiElement context, boolean isPhysical) {
final PsiExpressionCodeFragmentImpl result = new PsiExpressionCodeFragmentImpl(
myManager, isPhysical, "fragment.java", text.toCharArray(), 0, text.length());
myManager.getProject(), isPhysical, "fragment.java", text);
result.setContext(context);
return result;
}
public PsiCodeFragment createCodeBlockCodeFragment(String text, PsiElement context, boolean isPhysical) {
final PsiCodeFragmentImpl result = new PsiCodeFragmentImpl(myManager,
final PsiCodeFragmentImpl result = new PsiCodeFragmentImpl(myManager.getProject(),
ElementType.STATEMENTS,
isPhysical,
"fragment.java",
text.toCharArray(),
0,
text.length());
text);
result.setContext(context);
return result;
}
@@ -786,13 +791,11 @@ public class PsiElementFactoryImpl implements PsiElementFactory {
boolean isVoidValid,
boolean isPhysical,
boolean allowEllipsis) {
final PsiTypeCodeFragmentImpl result = new PsiTypeCodeFragmentImpl(myManager,
final PsiTypeCodeFragmentImpl result = new PsiTypeCodeFragmentImpl(myManager.getProject(),
isPhysical,
allowEllipsis,
"fragment.java",
text.toCharArray(),
0,
text.length());
text);
result.setContext(context);
if (isVoidValid) {
result.putUserData(PsiUtil.VALID_VOID_TYPE_IN_CODE_FRAGMENT, Boolean.TRUE);
@@ -1,18 +1,17 @@
package com.intellij.psi.impl.file.impl;
import com.intellij.ide.highlighter.JavaClassFileType;
import com.intellij.lang.Language;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileDocumentManagerAdapter;
import com.intellij.openapi.fileEditor.FileDocumentManagerListener;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeEvent;
import com.intellij.openapi.fileTypes.FileTypeListener;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.*;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.vfs.*;
import com.intellij.psi.*;
@@ -346,19 +345,30 @@ public class FileManagerImpl implements FileManager {
if (psiDir == null) return null;
FileType fileType = myFileTypeManager.getFileTypeByFileName(name);
PsiFile psiFile = fileType.createPsiFile(vFile, myManager.getProject());
if (psiFile == null) {
// a bit hacky.
if (fileType instanceof JavaClassFileType) return null;
if (fileType.isBinary()) {
psiFile = new PsiBinaryFileImpl(myManager, vFile);
}
else {
psiFile = new PsiPlainTextFileImpl(myManager, vFile);
}
final Project project = myManager.getProject();
if (fileType instanceof LanguageFileType) {
final Language language = ((LanguageFileType)fileType).getLanguage();
return language.getParserDefinition(project).createFile(project, vFile);
}
return psiFile;
if (fileType instanceof JavaClassFileType) {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
if (fileIndex.isInLibraryClasses(vFile)) {
// skip inners & anonymous
int dotIndex = name.lastIndexOf('.');
if (dotIndex < 0) dotIndex = name.length();
int index = name.lastIndexOf('$', dotIndex);
if (index >= 0) return null;
return new ClsFileImpl((PsiManagerImpl)PsiManager.getInstance(project), vFile);
}
return null;
}
if (fileType.isBinary()) {
return new PsiBinaryFileImpl(myManager, vFile);
}
return new PsiPlainTextFileImpl(project, vFile);
}
public PsiDirectory findDirectory(VirtualFile vFile) {
@@ -11,7 +11,6 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.tree.ElementType;
import com.intellij.psi.scope.ElementClassHint;
import com.intellij.psi.scope.NameHint;
@@ -30,14 +29,12 @@ public class PsiCodeFragmentImpl extends PsiFileImpl implements PsiCodeFragment,
private LinkedHashMap<String, String> myPseudoImports = new LinkedHashMap<String, String>();
private VisibilityChecker myVisibilityChecker;
public PsiCodeFragmentImpl(PsiManagerImpl manager,
public PsiCodeFragmentImpl(Project manager,
IElementType contentElementType,
boolean isPhysical,
String name,
char[] text,
int startOffset,
int endOffset) {
super(manager, CODE_FRAGMENT, contentElementType, name, text, startOffset, endOffset);
CharSequence text) {
super(manager, CODE_FRAGMENT, contentElementType, name, text);
myPhysical = isPhysical;
}
@@ -173,7 +170,7 @@ public class PsiCodeFragmentImpl extends PsiFileImpl implements PsiCodeFragment,
}
IElementType i = getContentElementType();
IElementType i = myContentElementType;
if (i == ElementType.TYPE_TEXT) {
return true;
}
@@ -1,20 +1,19 @@
package com.intellij.psi.impl.source;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiExpressionCodeFragment;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.tree.*;
import com.intellij.psi.impl.source.parsing.ChameleonTransforming;
import com.intellij.lang.ASTNode;
import com.intellij.psi.impl.source.tree.ElementType;
import com.intellij.psi.impl.source.tree.TreeUtil;
public class PsiExpressionCodeFragmentImpl extends PsiCodeFragmentImpl implements PsiExpressionCodeFragment {
public PsiExpressionCodeFragmentImpl(PsiManagerImpl manager,
public PsiExpressionCodeFragmentImpl(Project project,
boolean isPhysical,
String name,
char[] text,
int startOffset,
int endOffset) {
super(manager, ElementType.EXPRESSION_TEXT, isPhysical, name, text, startOffset, endOffset);
CharSequence text) {
super(project, ElementType.EXPRESSION_TEXT, isPhysical, name, text);
}
public PsiExpression getExpression() {
@@ -7,6 +7,9 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.ex.dummy.DummyFileSystem;
@@ -17,6 +20,7 @@ import com.intellij.psi.impl.file.PsiFileImplUtil;
import com.intellij.psi.impl.source.tree.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.ArrayUtil;
import com.intellij.util.CharTable;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.LocalTimeCounter;
import com.intellij.util.text.CharArrayUtil;
@@ -28,7 +32,7 @@ public abstract class PsiFileImpl extends NonSlaveRepositoryPsiElement implement
private String myName; // for myFile == null only
private final IElementType myElementType;
private final IElementType myContentElementType;
protected final IElementType myContentElementType;
private long myModificationStamp;
private boolean myModificationStampSticky = false;
@@ -37,33 +41,36 @@ public abstract class PsiFileImpl extends NonSlaveRepositoryPsiElement implement
private boolean myExplicitlySetAsPhysical;
private boolean myExplicitlySetAsValid;
protected PsiFileImpl(PsiManagerImpl manager, IElementType elementType, IElementType contentElementType, VirtualFile file) {
super(manager, -2);
protected PsiFileImpl(Project project, IElementType elementType, IElementType contentElementType, VirtualFile file) {
super((PsiManagerImpl)PsiManager.getInstance(project), -2);
myFile = file;
myElementType = elementType;
myContentElementType = contentElementType;
myModificationStamp = file.getModificationStamp();
}
protected PsiFileImpl(PsiManagerImpl manager,
protected PsiFileImpl(Project project,
IElementType elementType,
IElementType contentElementType,
String name,
char[] text,
int startOffset,
int endOffset) {
super(manager, (RepositoryTreeElement)Factory.createCompositeElement(elementType));
CharSequence text) {
super((PsiManagerImpl)PsiManager.getInstance(project), (RepositoryTreeElement)Factory.createCompositeElement(elementType));
LOG.assertTrue(name != null);
myName = name;
myFile = null;
myElementType = elementType;
myContentElementType = contentElementType;
final FileElement parent = getTreeElement();
TreeElement contentElement = Factory.createLeafElement(myContentElementType, text, startOffset, endOffset, -1, parent.getCharTable());
char[] chars = CharArrayUtil.fromSequence(text);
TreeElement contentElement = createContentLeafElement(chars, 0, text.length(), parent.getCharTable());
TreeUtil.addChildren(parent, contentElement);
myModificationStamp = LocalTimeCounter.currentTime();
}
public TreeElement createContentLeafElement(final char[] text, final int startOffset, final int endOffset, final CharTable table) {
return Factory.createLeafElement(myContentElementType, text, startOffset, endOffset, -1, table);
}
protected PsiFileImpl(PsiManagerImpl manager, IElementType elementType) {
super(manager, (RepositoryTreeElement)Factory.createCompositeElement(elementType));
myElementType = elementType;
@@ -114,13 +121,6 @@ public abstract class PsiFileImpl extends NonSlaveRepositoryPsiElement implement
return myFile;
}
public void setVirtualFile(VirtualFile file) {
myFile = file;
if (file != null) {
myName = null;
}
}
public boolean isValid() {
if (myFile == null || myExplicitlySetAsValid) return true; // "dummy" file
if (!myFile.isValid()) return false;
@@ -132,34 +132,39 @@ public abstract class PsiFileImpl extends NonSlaveRepositoryPsiElement implement
}
public FileElement loadTreeElement() {
// load document outside lock for better performance
if (!isPhysical()) {
return getTreeElement();
}
final Document document = FileDocumentManager.getInstance().getDocument(myFile);
synchronized (PsiLock.LOCK) {
FileElement treeElement = getTreeElement();
if (treeElement != null) return treeElement;
if (myFile != null && myManager.isAssertOnFileLoading(myFile)) {
LOG.error("File text loaded " + myFile.getPresentableUrl());
// load document outside lock for better performance
if (!isPhysical()) {
return getTreeElement();
}
treeElement = (FileElement)Factory.createCompositeElement(myElementType);
treeElement.setDocument(document);
final CharSequence docText = document.getCharsSequence();
char[] chars = CharArrayUtil.fromSequence(docText);
final Document document = FileDocumentManager.getInstance().getDocument(myFile);
TreeElement contentElement =
Factory.createLeafElement(myContentElementType, chars, 0, docText.length(), -1, treeElement.getCharTable());
TreeUtil.addChildren(treeElement, contentElement);
setTreeElement(treeElement);
treeElement.setPsiElement(this);
synchronized (PsiLock.LOCK) {
FileElement treeElement = getTreeElement();
if (treeElement != null) return treeElement;
if (myFile != null && myManager.isAssertOnFileLoading(myFile)) {
LOG.error("File text loaded " + myFile.getPresentableUrl());
}
final CharSequence docText = document.getCharsSequence();
treeElement = createFileElement(docText);
treeElement.setDocument(document);
setTreeElement(treeElement);
treeElement.setPsiElement(this);
((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(myManager.getProject())).contentsLoaded(this);
if (LOG.isDebugEnabled()) {
LOG.debug("Loaded text for file " + myFile.getPresentableUrl());
if (LOG.isDebugEnabled()) {
LOG.debug("Loaded text for file " + myFile.getPresentableUrl());
}
return treeElement;
}
return treeElement;
}
protected FileElement createFileElement(final CharSequence docText) {
final FileElement treeElement = (FileElement)Factory.createCompositeElement(myElementType);
char[] chars = CharArrayUtil.fromSequence(docText);
TreeElement contentElement = createContentLeafElement(chars, 0, docText.length(), treeElement.getCharTable());
TreeUtil.addChildren(treeElement, contentElement);
return treeElement;
}
public PsiJavaCodeReferenceElement findImportReferenceTo(PsiClass aClass) {
@@ -318,10 +323,6 @@ public abstract class PsiFileImpl extends NonSlaveRepositoryPsiElement implement
return copy;
}
public IElementType getContentElementType() {
return myContentElementType;
}
public <T> T getCopyableUserData(Key<T> key) {
return getCopyableUserDataImpl(key);
}
@@ -337,6 +338,7 @@ public abstract class PsiFileImpl extends NonSlaveRepositoryPsiElement implement
public abstract Lexer createLexer();
public Language getLanguage() {
return getFileType().getLanguage();
final FileType fileType = getFileType();
return fileType instanceof LanguageFileType ? ((LanguageFileType)fileType).getLanguage() : null;
}
}
@@ -1,12 +1,11 @@
package com.intellij.psi.impl.source;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.impl.PsiImplUtil;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.resolve.ClassResolverProcessor;
import com.intellij.psi.impl.source.resolve.ResolveCache;
import com.intellij.psi.impl.source.tree.ChildRole;
@@ -14,6 +13,7 @@ import com.intellij.psi.scope.ElementClassHint;
import com.intellij.psi.scope.NameHint;
import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.psi.scope.util.PsiScopesUtil;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.containers.HashMap;
import com.intellij.util.containers.HashSet;
@@ -34,18 +34,16 @@ public abstract class PsiJavaFileBaseImpl extends PsiFileImpl implements PsiJava
private static final String[] IMPLICIT_IMPORTS = new String[]{ "java.lang" };
protected PsiJavaFileBaseImpl(PsiManagerImpl manager,
IElementType elementType,
IElementType contentElementType,
String name,
char[] text,
int startOffset,
int endOffset) {
super(manager, elementType, contentElementType, name, text, startOffset, endOffset);
protected PsiJavaFileBaseImpl(Project project,
IElementType elementType,
IElementType contentElementType,
String name,
CharSequence text) {
super(project, elementType, contentElementType, name, text);
}
protected PsiJavaFileBaseImpl(PsiManagerImpl manager, IElementType elementType, IElementType contentElementType, VirtualFile file) {
super(manager, elementType, contentElementType, file);
protected PsiJavaFileBaseImpl(Project project, IElementType elementType, IElementType contentElementType, VirtualFile file) {
super(project, elementType, contentElementType, file);
}
public void subtreeChanged() {
@@ -4,17 +4,17 @@ import com.intellij.lexer.JavaLexer;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiManagerImpl;
public class PsiJavaFileImpl extends PsiJavaFileBaseImpl {
public PsiJavaFileImpl(PsiManagerImpl manager, VirtualFile file) {
super(manager, JAVA_FILE, JAVA_FILE_TEXT, file);
public PsiJavaFileImpl(Project project, VirtualFile file) {
super(project, JAVA_FILE, JAVA_FILE_TEXT, file);
}
public PsiJavaFileImpl(PsiManagerImpl manager, String name, char[] text, int startOffset, int endOffset) {
super(manager, JAVA_FILE, JAVA_FILE_TEXT, name, text, startOffset, endOffset);
public PsiJavaFileImpl(Project project, String name, CharSequence text) {
super(project, JAVA_FILE, JAVA_FILE_TEXT, name, text);
}
public String toString(){
@@ -4,29 +4,27 @@ import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiPlainTextFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.resolve.ResolveUtil;
import com.intellij.uiDesigner.ReferenceUtil;
public class PsiPlainTextFileImpl extends PsiFileImpl implements PsiPlainTextFile{
private final FileType myFileType;
public PsiPlainTextFileImpl(PsiManagerImpl manager, VirtualFile file) {
super(manager, PLAIN_TEXT_FILE, PLAIN_TEXT, file);
public PsiPlainTextFileImpl(Project project, VirtualFile file) {
super(project, PLAIN_TEXT_FILE, PLAIN_TEXT, file);
myFileType = FileTypeManager.getInstance().getFileTypeByFile(file);
}
public PsiPlainTextFileImpl(PsiManagerImpl manager,
public PsiPlainTextFileImpl(Project project,
String name,
FileType fileType,
char[] text,
int startOffset,
int endOffset) {
super(manager, PLAIN_TEXT_FILE, PLAIN_TEXT, name, text, startOffset, endOffset);
CharSequence text) {
super(project, PLAIN_TEXT_FILE, PLAIN_TEXT, name, text);
myFileType = fileType;
}
@@ -1,7 +1,7 @@
package com.intellij.psi.impl.source;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.util.PsiUtil;
/**
@@ -10,13 +10,11 @@ import com.intellij.psi.util.PsiUtil;
public class PsiTypeCodeFragmentImpl extends PsiCodeFragmentImpl implements PsiTypeCodeFragment {
private final boolean myAllowEllipsis;
public PsiTypeCodeFragmentImpl(PsiManagerImpl manager,
public PsiTypeCodeFragmentImpl(Project manager,
boolean isPhysical,
boolean allowEllipsis, String name,
char[] text,
int startOffset,
int endOffset) {
super(manager, TYPE_TEXT, isPhysical, name, text, startOffset, endOffset);
CharSequence text) {
super(manager, TYPE_TEXT, isPhysical, name, text);
myAllowEllipsis = allowEllipsis;
}
@@ -6,6 +6,7 @@ import com.intellij.lang.ASTNode;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ex.ApplicationEx;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiFile;
@@ -110,7 +111,7 @@ public class CodeFormatterFacade implements Constants {
public ASTNode processRange(ASTNode element, int startOffset, int endOffset) {
FileType fileType = myHelper.getFileType();
if (useNewFormatter(fileType)) {
PseudoTextBuilder pseudoTextBuilder = fileType.getLanguage().getFormatter();
PseudoTextBuilder pseudoTextBuilder = ((LanguageFileType)fileType).getLanguage().getFormatter();
if (pseudoTextBuilder == null) {
return element;
}
@@ -1,14 +1,14 @@
package com.intellij.psi.impl.source.html;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import com.intellij.psi.impl.source.tree.CompositeElement;
import com.intellij.psi.impl.source.tree.ChildRole;
import com.intellij.psi.impl.source.parsing.ChameleonTransforming;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.xml.XmlElementType;
import com.intellij.psi.xml.XmlDocument;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.impl.source.parsing.ChameleonTransforming;
import com.intellij.psi.impl.source.tree.ChildRole;
import com.intellij.psi.impl.source.tree.CompositeElement;
import com.intellij.psi.impl.source.xml.XmlFileImpl;
import com.intellij.psi.xml.XmlDocument;
import com.intellij.psi.xml.XmlElementType;
/**
* Created by IntelliJ IDEA.
@@ -18,12 +18,12 @@ import com.intellij.openapi.fileTypes.FileType;
* To change this template use File | Settings | File Templates.
*/
public class HtmlFileImpl extends XmlFileImpl {
public HtmlFileImpl(PsiManagerImpl manager, VirtualFile file) {
super(manager, file, XmlElementType.HTML_FILE, XmlElementType.HTML_FILE_TEXT);
public HtmlFileImpl(Project project, VirtualFile file) {
super(project, file, XmlElementType.HTML_FILE, XmlElementType.HTML_FILE_TEXT);
}
public HtmlFileImpl(PsiManagerImpl manager, String name, char[] text, int startOffset, int endOffset, FileType fileType) {
super(manager, name, text, startOffset, endOffset, fileType, XmlElementType.HTML_FILE);
public HtmlFileImpl(Project project, String name, CharSequence text, FileType fileType) {
super(project, name, text, fileType, XmlElementType.HTML_FILE);
}
public String toString() {
@@ -1,5 +1,6 @@
package com.intellij.psi.impl.source.text;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
@@ -20,7 +21,6 @@ import com.intellij.psi.impl.source.tree.*;
import com.intellij.psi.text.BlockSupport;
import com.intellij.util.CharTable;
import com.intellij.util.IncorrectOperationException;
import com.intellij.lang.ASTNode;
public class BlockSupportImpl extends BlockSupport implements Constants, ProjectComponent {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.text.BlockSupportImpl");
@@ -147,8 +147,7 @@ public class BlockSupportImpl extends BlockSupport implements Constants, Project
FileType fileType) {
if(parent instanceof CodeFragmentElement){
final FileElement holderElement = new DummyHolder(fileImpl.getManager(), null).getTreeElement();
LeafElement chameleon = Factory.createLeafElement(fileImpl.getContentElementType(), newFileText, 0, textLength, -1, holderElement.getCharTable());
TreeUtil.addChildren(holderElement, chameleon);
TreeUtil.addChildren(holderElement, fileImpl.createContentLeafElement(newFileText, 0, textLength, holderElement.getCharTable()));
parent.replaceAllChildrenToChildrenOf(holderElement);
}
else{
@@ -1,5 +1,6 @@
package com.intellij.psi.impl.source.tree;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.psi.PsiLock;
@@ -9,9 +10,8 @@ import com.intellij.psi.impl.source.SourceTreeToPsiMap;
import com.intellij.psi.impl.source.SrcRepositoryPsiElement;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.CharTable;
import com.intellij.lang.ASTNode;
public abstract class FileElement extends RepositoryTreeElement{
public class FileElement extends RepositoryTreeElement{
private Document myDocument; // only to hold document
private CharTable myCharTable = new CharTableImpl();
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.tree.FileElement");
@@ -20,7 +20,7 @@ public abstract class FileElement extends RepositoryTreeElement{
return myCharTable;
}
protected FileElement(IElementType type) {
public FileElement(IElementType type) {
super(type);
}
@@ -4,17 +4,17 @@ import com.intellij.lexer.Lexer;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.source.PsiFileImpl;
import com.intellij.psi.impl.source.parsing.ChameleonTransforming;
import com.intellij.psi.impl.source.parsing.xml.XmlPsiLexer;
import com.intellij.psi.impl.source.tree.ChildRole;
import com.intellij.psi.impl.source.tree.CompositeElement;
import com.intellij.psi.search.PsiElementProcessor;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.xml.XmlDocument;
import com.intellij.psi.xml.XmlFile;
@@ -22,12 +22,12 @@ import com.intellij.psi.xml.XmlFile;
* @author Mike
*/
public class XmlFileImpl extends PsiFileImpl implements XmlFile {
public XmlFileImpl(PsiManagerImpl manager, VirtualFile file) {
super(manager, XML_FILE, getChameleonTypeByFile(file), file);
public XmlFileImpl(Project project, VirtualFile file) {
super(project, XML_FILE, getChameleonTypeByFile(file), file);
}
public XmlFileImpl(PsiManagerImpl manager, VirtualFile file, IElementType elementType, IElementType contentElementType) {
super(manager, elementType, contentElementType, file);
public XmlFileImpl(Project project, VirtualFile file, IElementType elementType, IElementType contentElementType) {
super(project, elementType, contentElementType, file);
}
private static IElementType getChameleonTypeByFile(VirtualFile file) {
@@ -36,27 +36,19 @@ public class XmlFileImpl extends PsiFileImpl implements XmlFile {
}
private static IElementType getElementType(final FileType fileTypeByFile) {
if(fileTypeByFile == StdFileTypes.XML) {
return XML_FILE_TEXT;
}
if (fileTypeByFile == StdFileTypes.XHTML) {
return XHTML_FILE_TEXT;
}
if(fileTypeByFile == StdFileTypes.HTML) return HTML_FILE_TEXT;
if(fileTypeByFile == StdFileTypes.DTD) return DTD_FILE_TEXT;
if (fileTypeByFile == StdFileTypes.XML) return XML_FILE_TEXT;
if (fileTypeByFile == StdFileTypes.XHTML) return XHTML_FILE_TEXT;
if (fileTypeByFile == StdFileTypes.HTML) return HTML_FILE_TEXT;
if (fileTypeByFile == StdFileTypes.DTD) return DTD_FILE_TEXT;
return null;
}
public IElementType getContentElementType() {
return getElementType(myType);
public XmlFileImpl(Project project, String name, CharSequence text, FileType fileType) {
super(project, XML_FILE, getElementType(fileType), name, text);
}
public XmlFileImpl(PsiManagerImpl manager, String name, char[] text, int startOffset, int endOffset, FileType fileType) {
super(manager, XML_FILE, getElementType(fileType), name, text, startOffset, endOffset);
}
public XmlFileImpl(PsiManagerImpl manager, String name, char[] text, int startOffset, int endOffset, FileType fileType, IElementType elementType) {
super(manager, elementType, getElementType(fileType), name, text, startOffset, endOffset);
public XmlFileImpl(Project project, String name, CharSequence text, FileType fileType, IElementType elementType) {
super(project, elementType, getElementType(fileType), name, text);
}
public XmlDocument getDocument() {
@@ -1,30 +1,22 @@
package com.intellij.psi.impl.source.xml;
import com.intellij.psi.xml.*;
import com.intellij.psi.impl.source.tree.*;
import com.intellij.psi.impl.source.xml.aspect.XmlTextChanged;
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
import com.intellij.psi.impl.source.DummyHolder;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.html.HtmlTag;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.CharTable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.xml.util.XmlTagTextUtil;
import com.intellij.pom.PomModel;
import com.intellij.pom.PomTransaction;
import com.intellij.pom.impl.PomTransactionBase;
import com.intellij.pom.event.PomModelEvent;
import com.intellij.lang.ASTNode;
import com.intellij.lang.Language;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.impl.source.tree.TreeElement;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.xml.*;
import com.intellij.util.IncorrectOperationException;
import com.intellij.xml.util.XmlTagTextUtil;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class XmlTextImpl extends XmlElementImpl implements XmlText {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.xml.XmlTextImpl");
@@ -245,6 +237,6 @@ public class XmlTextImpl extends XmlElementImpl implements XmlText {
public Language getLanguage() {
final FileType fileType = getContainingFile().getFileType();
return fileType.getLanguage();
return ((LanguageFileType)fileType).getLanguage();
}
}