View | Details | Raw Unified | Return to bug 136313
Collapse All | Expand All

(-)search/org/eclipse/jdt/internal/core/search/BasicSearchEngine.java (+3 lines)
Lines 237-242 Link Here
237
	 * @param matchRule
237
	 * @param matchRule
238
	 */
238
	 */
239
	public static String getMatchRuleString(final int matchRule) {
239
	public static String getMatchRuleString(final int matchRule) {
240
		if (matchRule == 0) {
241
			return "R_EXACT_MATCH"; //$NON-NLS-1$
242
		}
240
		StringBuffer buffer = new StringBuffer();
243
		StringBuffer buffer = new StringBuffer();
241
		for (int i=1; i<=8; i++) {
244
		for (int i=1; i<=8; i++) {
242
			int bit = matchRule & (1<<(i-1));
245
			int bit = matchRule & (1<<(i-1));
(-)search/org/eclipse/jdt/core/search/SearchPattern.java (-11 / +15 lines)
Lines 1853-1873 Link Here
1853
	}
1853
	}
1854
1854
1855
	// Verify Pattern match rule
1855
	// Verify Pattern match rule
1856
	int starIndex = stringPattern.indexOf('*');
1857
	int questionIndex = stringPattern.indexOf('?');
1858
	if (starIndex < 0 && questionIndex < 0) {
1859
		// reset pattern match bit if any
1860
		matchRule &= ~R_PATTERN_MATCH;
1861
	} else {
1862
		matchRule |= R_PATTERN_MATCH;
1863
		// Remove Camel Case match when there's '*' or '?' characters
1864
		matchRule &= ~R_CAMELCASE_MATCH;
1865
	}
1856
	if ((matchRule & R_PATTERN_MATCH) != 0) {
1866
	if ((matchRule & R_PATTERN_MATCH) != 0) {
1857
		if ((matchRule & R_PREFIX_MATCH) != 0) {
1867
		if ((matchRule & R_PREFIX_MATCH) != 0) {
1858
			matchRule &= ~R_PREFIX_MATCH;
1868
			matchRule &= ~R_PREFIX_MATCH;
1859
		}
1869
		}
1860
		int starIndex = stringPattern.indexOf('*');
1861
		int questionIndex = stringPattern.indexOf('?');
1862
		if (starIndex < 0 && questionIndex < 0) {
1863
			// No need to have pattern match
1864
			matchRule &= ~R_PATTERN_MATCH;
1865
		} else {
1866
			// Remove Camel Case match when there's '*' or '?' characters
1867
			if ((matchRule & R_CAMELCASE_MATCH) != 0) {
1868
				matchRule &= ~R_CAMELCASE_MATCH;
1869
			}
1870
		}
1871
	}
1870
	}
1872
1871
1873
	// Verify Camel Case match rule
1872
	// Verify Camel Case match rule
Lines 1875-1884 Link Here
1875
		// Verify sting pattern validity
1874
		// Verify sting pattern validity
1876
		int length = stringPattern.length();
1875
		int length = stringPattern.length();
1877
		boolean validCamelCase = true;
1876
		boolean validCamelCase = true;
1877
		boolean uppercase = false;
1878
		for (int i=0; i<length && validCamelCase; i++) {
1878
		for (int i=0; i<length && validCamelCase; i++) {
1879
			char ch = stringPattern.charAt(i++);
1879
			char ch = stringPattern.charAt(i++);
1880
			validCamelCase = ScannerHelper.isJavaIdentifierStart(ch);
1880
			validCamelCase = ScannerHelper.isJavaIdentifierStart(ch);
1881
			// at least one uppercase character is need in CamelCase pattern
1882
			// (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=136313)
1883
			if (!uppercase) uppercase = ScannerHelper.isUpperCase(ch);
1881
		}
1884
		}
1885
		validCamelCase = validCamelCase && uppercase;
1882
		// Verify bits compatibility
1886
		// Verify bits compatibility
1883
		if (validCamelCase) {
1887
		if (validCamelCase) {
1884
			if ((matchRule & R_PREFIX_MATCH) != 0) {
1888
			if ((matchRule & R_PREFIX_MATCH) != 0) {
(-)src/org/eclipse/jdt/core/tests/model/SearchTests.java (-8 / +44 lines)
Lines 18-39 Link Here
18
import org.eclipse.core.resources.IResource;
18
import org.eclipse.core.resources.IResource;
19
import org.eclipse.core.resources.IWorkspaceRunnable;
19
import org.eclipse.core.resources.IWorkspaceRunnable;
20
import org.eclipse.core.runtime.*;
20
import org.eclipse.core.runtime.*;
21
import org.eclipse.core.runtime.CoreException;
22
import org.eclipse.core.runtime.IProgressMonitor;
23
import org.eclipse.core.runtime.Path;
24
import org.eclipse.jdt.core.*;
21
import org.eclipse.jdt.core.*;
25
import org.eclipse.jdt.core.IJavaProject;
26
import org.eclipse.jdt.core.JavaCore;
27
import org.eclipse.jdt.core.JavaModelException;
28
import org.eclipse.jdt.core.compiler.CharOperation;
22
import org.eclipse.jdt.core.compiler.CharOperation;
29
import org.eclipse.jdt.core.search.*;
23
import org.eclipse.jdt.core.search.*;
30
import org.eclipse.jdt.core.search.IJavaSearchConstants;
31
import org.eclipse.jdt.core.search.SearchEngine;
32
import org.eclipse.jdt.core.tests.model.Semaphore.TimeOutException;
24
import org.eclipse.jdt.core.tests.model.Semaphore.TimeOutException;
33
import org.eclipse.jdt.core.tests.util.Util;
25
import org.eclipse.jdt.core.tests.util.Util;
34
import org.eclipse.jdt.internal.core.JavaElement;
26
import org.eclipse.jdt.internal.core.JavaElement;
35
import org.eclipse.jdt.internal.core.JavaModelManager;
27
import org.eclipse.jdt.internal.core.JavaModelManager;
36
import org.eclipse.jdt.internal.core.LocalVariable;
28
import org.eclipse.jdt.internal.core.LocalVariable;
29
import org.eclipse.jdt.internal.core.search.BasicSearchEngine;
37
import org.eclipse.jdt.internal.core.search.indexing.IndexManager;
30
import org.eclipse.jdt.internal.core.search.indexing.IndexManager;
38
import org.eclipse.jdt.internal.core.search.processing.IJob;
31
import org.eclipse.jdt.internal.core.search.processing.IJob;
39
32
Lines 182-187 Link Here
182
		expected,
175
		expected,
183
		actual);
176
		actual);
184
}
177
}
178
protected void assertValidMatchRule(String pattern, int rule) {
179
	assertValidMatchRule(pattern, rule, rule);
180
}
181
protected void assertValidMatchRule(String pattern, int rule, int expected) {
182
	int validated = SearchPattern.validateMatchRule(pattern, rule);
183
	String validatedRule = BasicSearchEngine.getMatchRuleString(validated);
184
	String expectedRule = BasicSearchEngine.getMatchRuleString(expected);
185
	if (!validatedRule.equals(expectedRule)) {
186
		System.out.println("Test "+getName());
187
		System.out.print("	assertValidMatchRule(\"");
188
		System.out.print(pattern);
189
		System.out.print("\", ");
190
		System.out.print(validatedRule);
191
		System.out.println(");");
192
		assertEquals(pattern+"' does not match expected match rule!", expectedRule, validatedRule);
193
	}
194
}
185
public void setUpSuite() throws Exception {
195
public void setUpSuite() throws Exception {
186
	super.setUpSuite();
196
	super.setUpSuite();
187
	createJavaProject("P");
197
	createJavaProject("P");
Lines 978-981 Link Here
978
		"TypeReferencePattern: qualification<X.*>, type<Y>, exact match, case sensitive",
988
		"TypeReferencePattern: qualification<X.*>, type<Y>, exact match, case sensitive",
979
		searchPattern);
989
		searchPattern);
980
}
990
}
991
/**
992
 * Test CamelCase validation
993
 */
994
public void testSearchPatternValidMatchRule01() {
995
	assertValidMatchRule("foo", SearchPattern.R_EXACT_MATCH, SearchPattern.R_EXACT_MATCH);
996
	assertValidMatchRule("foo", SearchPattern.R_PREFIX_MATCH, SearchPattern.R_PREFIX_MATCH);
997
	assertValidMatchRule("foo", SearchPattern.R_PATTERN_MATCH, SearchPattern.R_EXACT_MATCH);
998
	assertValidMatchRule("foo", SearchPattern.R_PATTERN_MATCH|SearchPattern.R_PREFIX_MATCH, SearchPattern.R_PREFIX_MATCH);
999
	assertValidMatchRule("foo", SearchPattern.R_CAMELCASE_MATCH, SearchPattern.R_PREFIX_MATCH|SearchPattern.R_CASE_SENSITIVE);
1000
}
1001
public void testSearchPatternValidMatchRule02() {
1002
	assertValidMatchRule("CP*P", SearchPattern.R_EXACT_MATCH, SearchPattern.R_PATTERN_MATCH);
1003
	assertValidMatchRule("CP*P", SearchPattern.R_PREFIX_MATCH, SearchPattern.R_PATTERN_MATCH);
1004
	assertValidMatchRule("CP*P", SearchPattern.R_PATTERN_MATCH, SearchPattern.R_PATTERN_MATCH);
1005
	assertValidMatchRule("CP*P", SearchPattern.R_PATTERN_MATCH|SearchPattern.R_PREFIX_MATCH, SearchPattern.R_PATTERN_MATCH);
1006
	assertValidMatchRule("CP*P", SearchPattern.R_CAMELCASE_MATCH, SearchPattern.R_PATTERN_MATCH);
1007
}
1008
public void testSearchPatternValidMatchRule03() {
1009
	assertValidMatchRule("NPE", SearchPattern.R_CAMELCASE_MATCH);
1010
}
1011
public void testSearchPatternValidMatchRule04() {
1012
	assertValidMatchRule("nPE", SearchPattern.R_CAMELCASE_MATCH);
1013
}
1014
public void testSearchPatternValidMatchRule05() {
1015
	assertValidMatchRule("NuPoEx", SearchPattern.R_CAMELCASE_MATCH);
1016
}
981
}
1017
}

Return to bug 136313