mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PsiFile factory stuff moved from FileType to Language's ParserDefinition.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user