d90f4a8d4ec06596e958bc75c2cc7dfea117e299
[idea/community.git] / java / java-impl / src / com / intellij / psi / impl / file / PsiJavaDirectoryFactory.java
1 /*
2  * Copyright 2000-2013 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.psi.impl.file;
17
18 import com.intellij.openapi.roots.ProjectFileIndex;
19 import com.intellij.openapi.roots.ProjectRootManager;
20 import com.intellij.openapi.util.io.FileUtil;
21 import com.intellij.openapi.util.text.StringUtil;
22 import com.intellij.openapi.vfs.VirtualFile;
23 import com.intellij.psi.*;
24 import com.intellij.psi.impl.PsiManagerImpl;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27 import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
28
29 /**
30  * @author yole
31  */
32 public class PsiJavaDirectoryFactory extends PsiDirectoryFactory {
33   private final PsiManagerImpl myManager;
34
35   public PsiJavaDirectoryFactory(final PsiManagerImpl manager) {
36     myManager = manager;
37   }
38
39   @NotNull
40   @Override
41   public PsiDirectory createDirectory(@NotNull final VirtualFile file) {
42     return new PsiJavaDirectoryImpl(myManager, file);
43   }
44
45   @Override
46   @NotNull
47   public String getQualifiedName(@NotNull final PsiDirectory directory, final boolean presentable) {
48     final PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(directory);
49     if (aPackage != null) {
50       final String qualifiedName = aPackage.getQualifiedName();
51       if (!qualifiedName.isEmpty()) return qualifiedName;
52       if (presentable) {
53         return PsiBundle.message("default.package.presentation") + " (" + directory.getVirtualFile().getPresentableUrl() + ")";
54       }
55       return "";
56     }
57     return presentable ? StringUtil.notNullize(FileUtil.getLocationRelativeToUserHome(directory.getVirtualFile().getPresentableUrl())) : "";
58   }
59
60   @Nullable
61   @Override
62   public PsiDirectoryContainer getDirectoryContainer(@NotNull PsiDirectory directory) {
63     return JavaDirectoryService.getInstance().getPackage(directory);
64   }
65
66   @Override
67   public boolean isPackage(@NotNull PsiDirectory directory) {
68     ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myManager.getProject()).getFileIndex();
69     VirtualFile virtualFile = directory.getVirtualFile();
70     return fileIndex.isUnderSourceRootOfType(virtualFile, JavaModuleSourceRootTypes.SOURCES) && fileIndex.getPackageNameByDirectory(virtualFile) != null;
71   }
72
73   @Override
74   public boolean isValidPackageName(String name) {
75     return PsiNameHelper.getInstance(myManager.getProject()).isQualifiedName(name);
76   }
77 }