From e005a2df9a9965b867b9f46e186265dc9ddf28a5 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Fri, 23 Jul 2010 15:44:20 +0400 Subject: [PATCH] CIDR: code fragments CIDR-debugger: value type resolving --- .../intellij/psi/tree/IFileElementType.java | 4 ---- .../com/intellij/psi/util/PsiTreeUtil.java | 20 ++++++++++++++++++ .../com/intellij/extapi/psi/PsiFileBase.java | 21 ------------------- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/platform/lang-api/src/com/intellij/psi/tree/IFileElementType.java b/platform/lang-api/src/com/intellij/psi/tree/IFileElementType.java index d21b5255b26f..221fa01d1570 100644 --- a/platform/lang-api/src/com/intellij/psi/tree/IFileElementType.java +++ b/platform/lang-api/src/com/intellij/psi/tree/IFileElementType.java @@ -42,8 +42,4 @@ public class IFileElementType extends ILazyParseableElementType { final PsiParser parser = LanguageParserDefinitions.INSTANCE.forLanguage(getLanguage()).createParser(project); return parser.parse(this, builder).getFirstChildNode(); } - - //public boolean isParsable(CharSequence buffer, final Project project) { - // return true; - //} } diff --git a/platform/lang-api/src/com/intellij/psi/util/PsiTreeUtil.java b/platform/lang-api/src/com/intellij/psi/util/PsiTreeUtil.java index 471c3b15720e..f20559eef3fd 100644 --- a/platform/lang-api/src/com/intellij/psi/util/PsiTreeUtil.java +++ b/platform/lang-api/src/com/intellij/psi/util/PsiTreeUtil.java @@ -175,6 +175,26 @@ public class PsiTreeUtil { return parents; } + @Nullable public static T findChildOfType(@NotNull final PsiElement element, @NotNull final Class aClass) { + return findChildOfType(element, aClass, true); + } + + @Nullable public static T findChildOfType(@NotNull final PsiElement element, @NotNull final Class aClass, final boolean strict) { + PsiElementProcessor.FindElement processor = new PsiElementProcessor.FindElement() { + @Override + public boolean execute(PsiElement each) { + if (strict && each == element) return true; + if (instanceOf(aClass, each)) { + return setFound(each); + } + return true; + } + }; + + PsiTreeUtil.processElements(element, processor); + return (T)processor.getFoundElement(); + } + @Nullable public static T getChildOfType(@NotNull PsiElement element, @NotNull Class aClass) { for(PsiElement child = element.getFirstChild(); child != null; child = child.getNextSibling()){ if (instanceOf(aClass, child)) return (T)child; diff --git a/platform/lang-impl/src/com/intellij/extapi/psi/PsiFileBase.java b/platform/lang-impl/src/com/intellij/extapi/psi/PsiFileBase.java index 6a69377c94ae..04f32480e7a9 100644 --- a/platform/lang-impl/src/com/intellij/extapi/psi/PsiFileBase.java +++ b/platform/lang-impl/src/com/intellij/extapi/psi/PsiFileBase.java @@ -66,27 +66,6 @@ public abstract class PsiFileBase extends PsiFileImpl { return myLanguage; } - protected final FileElement createFileElement(final CharSequence docText) { - //final ParserDefinition parserDefinition = myLanguage.getParserDefinition(); - //if (parserDefinition != null && parserDefinition.createParser(getProject()) != PsiUtil.NULL_PARSER) { - // return _createFileElement(docText, myLanguage, getProject(), parserDefinition); - //} - return super.createFileElement(docText); - } - - //private static FileElement _createFileElement(final CharSequence docText, - // final Language language, - // Project project, - // final ParserDefinition parserDefinition) { - // final PsiParser parser = parserDefinition.createParser(project); - // final IElementType root = parserDefinition.getFileNodeType(); - // final PsiBuilderImpl builder = new PsiBuilderImpl(language, project, null, docText); - // final FileElement fileRoot = (FileElement)parser.parse(root, builder); - // LOG.assertTrue(fileRoot.getElementType() == root, - // "Parsing file text returns rootElement with type different from declared in parser definition"); - // return fileRoot; - //} - public void accept(@NotNull PsiElementVisitor visitor) { visitor.visitFile(this); }