Struts2 tests fixed
authorDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Thu, 11 Feb 2010 13:53:59 +0000 (16:53 +0300)
committerDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Thu, 11 Feb 2010 13:53:59 +0000 (16:53 +0300)
platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java
platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java

index 50e6dbdd2d473cd0e33ee635985fd4c3d71bf12a..df03bb66ab630fe157a9fd7ebdd869093903ae8a 100644 (file)
@@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Iconable;
 import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.VfsUtil;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.*;
@@ -127,7 +128,7 @@ public class FileReference implements FileReferenceOwner, PsiPolyVariantReferenc
 
   protected void innerResolveInContext(@NotNull final String text, @NotNull final PsiFileSystemItem context, final Collection<ResolveResult> result,
                                        final boolean caseSensitive) {
-    if (text.length() == 0 && !myFileReferenceSet.isEndingSlashNotAllowed() && isLast() || ".".equals(text) || "/".equals(text)) {
+    if (isAllowedEmptyPath(text) || ".".equals(text) || "/".equals(text)) {
       result.add(new PsiElementResolveResult(context));
     }
     else if ("..".equals(text)) {
@@ -172,6 +173,12 @@ public class FileReference implements FileReferenceOwner, PsiPolyVariantReferenc
     }
   }
 
+  private boolean isAllowedEmptyPath(String text) {
+    return text.length() == 0 && isLast() &&
+           (StringUtil.isEmpty(myFileReferenceSet.getPathString()) && myFileReferenceSet.isEmptyPathAllowed() ||
+           !myFileReferenceSet.isEndingSlashNotAllowed() && myIndex > 0);
+  }
+
   @Nullable
   private String decode(final String text) {
     // strip http get parameters
index 6139a75577e08451d7eec0ba9e1af512b6637cce..93342a6f88771b8ddad6b8d9b9893973d2567808 100644 (file)
@@ -62,6 +62,7 @@ public class FileReferenceSet {
   private final String myPathString;
   private Collection<PsiFileSystemItem> myDefaultContexts;
   private final boolean myEndingSlashNotAllowed;
+  private boolean myEmptyPathAllowed;
   private @Nullable Map<CustomizableReferenceProvider.CustomizationKey, Object> myOptions;
   private FileType[] mySuitableFileTypes;
 
@@ -77,6 +78,7 @@ public class FileReferenceSet {
     myCaseSensitive = caseSensitive;
     myPathString = str.trim();
     myEndingSlashNotAllowed = endingSlashNotAllowed;
+    myEmptyPathAllowed = !endingSlashNotAllowed;
     myOptions = provider instanceof CustomizableReferenceProvider ? ((CustomizableReferenceProvider)provider).getOptions() : null;
     mySuitableFileTypes = suitableFileTypes;
 
@@ -391,4 +393,12 @@ public class FileReferenceSet {
   public FileType[] getSuitableFileTypes() {
     return mySuitableFileTypes == null ? EMPTY_FILE_TYPES : mySuitableFileTypes;
   }
+
+  public boolean isEmptyPathAllowed() {
+    return myEmptyPathAllowed;
+  }
+
+  public void setEmptyPathAllowed(boolean emptyPathAllowed) {
+    myEmptyPathAllowed = emptyPathAllowed;
+  }
 }