Lines 68-75
Link Here
|
68 |
import java.util.Set; |
68 |
import java.util.Set; |
69 |
import java.util.logging.Level; |
69 |
import java.util.logging.Level; |
70 |
import java.util.logging.Logger; |
70 |
import java.util.logging.Logger; |
71 |
import java.util.regex.Matcher; |
|
|
72 |
import java.util.regex.Pattern; |
73 |
import java.util.regex.PatternSyntaxException; |
71 |
import java.util.regex.PatternSyntaxException; |
74 |
import javax.swing.AbstractAction; |
72 |
import javax.swing.AbstractAction; |
75 |
import javax.swing.DefaultListCellRenderer; |
73 |
import javax.swing.DefaultListCellRenderer; |
Lines 100-105
Link Here
|
100 |
import org.netbeans.spi.jumpto.file.FileDescriptor; |
98 |
import org.netbeans.spi.jumpto.file.FileDescriptor; |
101 |
import org.netbeans.spi.jumpto.file.FileProvider; |
99 |
import org.netbeans.spi.jumpto.file.FileProvider; |
102 |
import org.netbeans.spi.jumpto.file.FileProviderFactory; |
100 |
import org.netbeans.spi.jumpto.file.FileProviderFactory; |
|
|
101 |
import org.netbeans.spi.jumpto.support.NameMatcher; |
102 |
import org.netbeans.spi.jumpto.support.NameMatcherFactory; |
103 |
import org.netbeans.spi.jumpto.type.SearchType; |
103 |
import org.netbeans.spi.jumpto.type.SearchType; |
104 |
import org.openide.DialogDescriptor; |
104 |
import org.openide.DialogDescriptor; |
105 |
import org.openide.DialogDisplayer; |
105 |
import org.openide.DialogDisplayer; |
Lines 467-473
Link Here
|
467 |
} |
467 |
} |
468 |
} |
468 |
} |
469 |
//Ask GTF providers |
469 |
//Ask GTF providers |
470 |
final FileProvider.Context ctx = FileProviderAccessor.getInstance().createContext(text, toJumpToSearchType(searchType), currentProject); |
470 |
final SearchType jumpToSearchType = toJumpToSearchType(searchType); |
|
|
471 |
final FileProvider.Context ctx = FileProviderAccessor.getInstance().createContext(text, jumpToSearchType, currentProject); |
471 |
final FileProvider.Result fpR = FileProviderAccessor.getInstance().createResult(files,new String[1], ctx); |
472 |
final FileProvider.Result fpR = FileProviderAccessor.getInstance().createResult(files,new String[1], ctx); |
472 |
for (FileProvider provider : getProviders()) { |
473 |
for (FileProvider provider : getProviders()) { |
473 |
currentProvider = provider; |
474 |
currentProvider = provider; |
Lines 497-502
Link Here
|
497 |
allFolders = searchSources(root, allFolders, excludes, filters); |
498 |
allFolders = searchSources(root, allFolders, excludes, filters); |
498 |
} |
499 |
} |
499 |
//Looking for matching files in all found folders |
500 |
//Looking for matching files in all found folders |
|
|
501 |
final NameMatcher matcher = NameMatcherFactory.createNameMatcher(text, jumpToSearchType); |
500 |
for (FileObject folder: allFolders) { |
502 |
for (FileObject folder: allFolders) { |
501 |
assert folder.isFolder(); |
503 |
assert folder.isFolder(); |
502 |
Enumeration<? extends FileObject> filesInFolder = folder.getData(false); |
504 |
Enumeration<? extends FileObject> filesInFolder = folder.getData(false); |
Lines 504-510
Link Here
|
504 |
FileObject file = filesInFolder.nextElement(); |
506 |
FileObject file = filesInFolder.nextElement(); |
505 |
if (file.isFolder()) continue; |
507 |
if (file.isFolder()) continue; |
506 |
|
508 |
|
507 |
if (isMatchedFileObject(searchType, file, text)) { |
509 |
if (matcher.accept(file.getNameExt())) { |
508 |
Project project = FileOwnerQuery.getOwner(file); |
510 |
Project project = FileOwnerQuery.getOwner(file); |
509 |
boolean preferred = project != null && currentProject != null ? project.getProjectDirectory() == currentProject.getProjectDirectory() : false; |
511 |
boolean preferred = project != null && currentProject != null ? project.getProjectDirectory() == currentProject.getProjectDirectory() : false; |
510 |
String relativePath = FileUtil.getRelativePath(project.getProjectDirectory(), file); |
512 |
String relativePath = FileUtil.getRelativePath(project.getProjectDirectory(), file); |
Lines 564-697
Link Here
|
564 |
// } |
566 |
// } |
565 |
} |
567 |
} |
566 |
return result; |
568 |
return result; |
567 |
} |
|
|
568 |
|
569 |
private boolean isMatchedFileObject(QuerySupport.Kind searchType, FileObject file, String text) { |
570 |
boolean isMatched = false; |
571 |
switch (searchType) { |
572 |
case EXACT: { |
573 |
isMatched = file.getNameExt().equals(text); |
574 |
break; |
575 |
} |
576 |
case PREFIX: { |
577 |
if (text.length() == 0) { |
578 |
isMatched = true; |
579 |
} else { |
580 |
isMatched = file.getNameExt().startsWith(text); |
581 |
} |
582 |
break; |
583 |
} |
584 |
case CASE_INSENSITIVE_PREFIX: { |
585 |
if (text.length() == 0) { |
586 |
isMatched = true; |
587 |
} else { |
588 |
isMatched = file.getNameExt().toLowerCase().startsWith(text.toLowerCase()); |
589 |
} |
590 |
break; |
591 |
} |
592 |
case CAMEL_CASE: { |
593 |
if (text.length() == 0) { |
594 |
throw new IllegalArgumentException (); |
595 |
} |
596 |
{ |
597 |
StringBuilder sb = new StringBuilder(); |
598 |
String prefix = null; |
599 |
int lastIndex = 0; |
600 |
int index; |
601 |
do { |
602 |
index = findNextUpper(text, lastIndex + 1); |
603 |
String token = text.substring(lastIndex, index == -1 ? text.length(): index); |
604 |
if ( lastIndex == 0 ) { |
605 |
prefix = token; |
606 |
} |
607 |
sb.append(token); |
608 |
sb.append( index != -1 ? "[\\p{javaLowerCase}\\p{Digit}_\\$]*" : ".*"); // NOI18N |
609 |
lastIndex = index; |
610 |
} |
611 |
while(index != -1); |
612 |
|
613 |
final Pattern pattern = Pattern.compile(sb.toString()); |
614 |
Matcher m = pattern.matcher(file.getNameExt()); |
615 |
isMatched = m.matches(); |
616 |
} |
617 |
break; |
618 |
|
619 |
} |
620 |
|
621 |
case CASE_INSENSITIVE_REGEXP: |
622 |
if (text.length() == 0) { |
623 |
throw new IllegalArgumentException (); |
624 |
} else { |
625 |
if (Character.isJavaIdentifierStart(text.charAt(0))) { |
626 |
Pattern pattern = Pattern.compile(text,Pattern.CASE_INSENSITIVE); |
627 |
Matcher m = pattern.matcher(file.getNameExt()); |
628 |
isMatched = m.matches(); |
629 |
} |
630 |
else { |
631 |
Pattern pattern = Pattern.compile(text,Pattern.CASE_INSENSITIVE|Pattern.DOTALL); |
632 |
Matcher m = pattern.matcher(file.getNameExt()); |
633 |
isMatched = m.matches(); |
634 |
} |
635 |
break; |
636 |
} |
637 |
case REGEXP: |
638 |
if (text.length() == 0) { |
639 |
throw new IllegalArgumentException (); |
640 |
} else { |
641 |
if (Character.isJavaIdentifierStart(text.charAt(0))) { |
642 |
final Pattern pattern = Pattern.compile(text); |
643 |
Matcher m = pattern.matcher(file.getNameExt()); |
644 |
isMatched = m.matches(); |
645 |
} |
646 |
else { |
647 |
final Pattern pattern = Pattern.compile(text,Pattern.DOTALL); |
648 |
Matcher m = pattern.matcher(file.getNameExt()); |
649 |
isMatched = m.matches(); |
650 |
} |
651 |
break; |
652 |
} |
653 |
|
654 |
case CASE_INSENSITIVE_CAMEL_CASE: { |
655 |
if (text.length() == 0) { |
656 |
throw new IllegalArgumentException (); |
657 |
} |
658 |
{ |
659 |
StringBuilder sb = new StringBuilder(); |
660 |
String prefix = null; |
661 |
int lastIndex = 0; |
662 |
int index; |
663 |
do { |
664 |
index = findNextUpper(text, lastIndex + 1); |
665 |
String token = text.substring(lastIndex, index == -1 ? text.length(): index); |
666 |
if ( lastIndex == 0 ) { |
667 |
prefix = token; |
668 |
} |
669 |
sb.append(token); |
670 |
sb.append( index != -1 ? "[\\p{javaLowerCase}\\p{Digit}_\\$]*" : ".*"); // NOI18N |
671 |
lastIndex = index; |
672 |
} |
673 |
while(index != -1); |
674 |
|
675 |
final Pattern pattern = Pattern.compile(sb.toString(),Pattern.CASE_INSENSITIVE); |
676 |
Matcher m = pattern.matcher(file.getNameExt()); |
677 |
isMatched = m.matches(); |
678 |
} |
679 |
break; |
680 |
} |
681 |
default: |
682 |
throw new UnsupportedOperationException (searchType.toString()); |
683 |
|
684 |
} |
685 |
return isMatched; |
686 |
}//checkMatch |
687 |
private static int findNextUpper(String text, int offset ) { |
688 |
|
689 |
for( int i = offset; i < text.length(); i++ ) { |
690 |
if ( Character.isUpperCase(text.charAt(i)) ) { |
691 |
return i; |
692 |
} |
693 |
} |
694 |
return -1; |
695 |
} |
569 |
} |
696 |
|
570 |
|
697 |
private boolean checkAgainstFilters(FileObject folder, FileObjectFilter[] filters) { |
571 |
private boolean checkAgainstFilters(FileObject folder, FileObjectFilter[] filters) { |