2 * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
5 package com
.intellij
.patterns
;
7 import com
.intellij
.openapi
.vfs
.VirtualFile
;
8 import com
.intellij
.openapi
.fileTypes
.FileType
;
9 import com
.intellij
.util
.xml
.NanoXmlUtil
;
10 import org
.jetbrains
.annotations
.NotNull
;
12 import java
.io
.IOException
;
17 public class VirtualFilePattern
extends TreeElementPattern
<VirtualFile
, VirtualFile
, VirtualFilePattern
> {
18 public VirtualFilePattern() {
19 super(VirtualFile
.class);
22 public VirtualFilePattern
ofType(final FileType type
) {
23 return with(new PatternCondition
<VirtualFile
>() {
24 public boolean accepts(@NotNull final VirtualFile virtualFile
, final MatchingContext matchingContext
, @NotNull final TraverseContext traverseContext
) {
25 return type
.equals(virtualFile
.getFileType());
30 public VirtualFilePattern
withName(final ElementPattern namePattern
) {
31 return with(new PatternCondition
<VirtualFile
>() {
32 public boolean accepts(@NotNull final VirtualFile virtualFile
,
33 final MatchingContext matchingContext
, @NotNull final TraverseContext traverseContext
) {
34 return namePattern
.accepts(virtualFile
.getName(), matchingContext
, traverseContext
);
39 public VirtualFilePattern
xmlWithRootTag(final ElementPattern tagNamePattern
) {
40 return with(new PatternCondition
<VirtualFile
>() {
41 public boolean accepts(@NotNull final VirtualFile virtualFile
, final MatchingContext matchingContext
, @NotNull final TraverseContext traverseContext
) {
43 NanoXmlUtil
.RootTagNameBuilder rootTagNameBuilder
= new NanoXmlUtil
.RootTagNameBuilder();
44 NanoXmlUtil
.parse(virtualFile
.getInputStream(), rootTagNameBuilder
);
45 String tagName
= rootTagNameBuilder
.getResult();
46 return tagName
!= null && tagNamePattern
.accepts(tagName
, matchingContext
, traverseContext
);
48 catch (IOException e
) {
55 protected VirtualFile
getParent(@NotNull final VirtualFile t
) {
59 protected VirtualFile
[] getChildren(@NotNull final VirtualFile file
) {
60 return file
.getChildren();