Index: src/org/netbeans/api/java/source/ClassIndex.java =================================================================== RCS file: /cvs/java/source/src/org/netbeans/api/java/source/ClassIndex.java,v retrieving revision 1.12 diff -u -r1.12 ClassIndex.java --- src/org/netbeans/api/java/source/ClassIndex.java 14 Nov 2007 10:59:03 -0000 1.12 +++ src/org/netbeans/api/java/source/ClassIndex.java 27 Nov 2007 15:55:25 -0000 @@ -148,7 +148,14 @@ * The name parameter of the {@link ClassIndex#getDeclaredTypes} is * an case insensitive regular expression of the declared type name. */ - CASE_INSENSITIVE_REGEXP + CASE_INSENSITIVE_REGEXP, + + /** + * The name parameter of the {@link ClassIndex#getDeclaredTypes} is + * an camel case or case insensitive prefix of the declared type name. + * For example all these names NPE, NulPoEx, NULLPOInter leads to NullPointerException returned. + */ + CAMEL_CASE_INSENSITIVE }; Index: src/org/netbeans/modules/java/source/usages/LuceneIndex.java =================================================================== RCS file: /cvs/java/source/src/org/netbeans/modules/java/source/usages/LuceneIndex.java,v retrieving revision 1.28 diff -u -r1.28 LuceneIndex.java --- src/org/netbeans/modules/java/source/usages/LuceneIndex.java 26 Nov 2007 16:31:32 -0000 1.28 +++ src/org/netbeans/modules/java/source/usages/LuceneIndex.java 27 Nov 2007 15:55:25 -0000 @@ -284,6 +284,34 @@ } break; } + case CAMEL_CASE_INSENSITIVE: + if (name.length() == 0) { + //Special case (all) handle in different way + emptyPrefixSearch(in, convertor, result, cancel); + return; + } + else { + final Term nameTerm = DocumentUtil.caseInsensitiveNameTerm(name.toLowerCase()); //XXX: I18N, Locale + prefixSearh(nameTerm, in, toSearch, cancel); + StringBuilder sb = new StringBuilder(); + String prefix = null; + int lastIndex = 0; + int index; + do { + index = findNextUpper(name, lastIndex + 1); + String token = name.substring(lastIndex, index == -1 ? name.length(): index); + if ( lastIndex == 0 ) { + prefix = token; + } + sb.append(token); + sb.append( index != -1 ? "[\\p{javaLowerCase}\\p{Digit}_\\$]*" : ".*"); // NOI18N + lastIndex = index; + } + while(index != -1); + final Pattern pattern = Pattern.compile(sb.toString()); + regExpSearch(pattern,DocumentUtil.simpleNameTerm(prefix),in,toSearch,cancel, true); + break; + } default: throw new UnsupportedOperationException (kind.toString()); }