Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 126012 Details for
Bug 265065
[search] java.lang.ClassCastException while running "Refactor...Extract Class"
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch
v00.txt (text/plain), 7.04 KB, created by
Frederic Fusier
on 2009-02-18 06:45:32 EST
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Frederic Fusier
Created:
2009-02-18 06:45:32 EST
Size:
7.04 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java,v >retrieving revision 1.320 >diff -u -r1.320 MatchLocator.java >--- search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 12 Feb 2009 16:54:27 -0000 1.320 >+++ search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 17 Feb 2009 17:10:48 -0000 >@@ -1403,7 +1403,15 @@ > if (reference instanceof QualifiedNameReference) { > char[][] tokens = ((QualifiedNameReference)reference).tokens; > char[] lastToken = tokens[tokens.length-1]; >- if (!this.patternLocator.matchesName(((VariablePattern)this.pattern).name, lastToken)) { >+ if (this.pattern instanceof OrPattern) { >+ SearchPattern[] patterns = ((OrPattern) this.pattern).patterns; >+ for (int i = 0, pLength = patterns.length; i < pLength; i++) { >+ if (!this.patternLocator.matchesName(((VariablePattern)patterns[i]).name, lastToken)) { >+ isWriteAccess = false; >+ isReadAccess = true; >+ } >+ } >+ } else if (!this.patternLocator.matchesName(((VariablePattern)this.pattern).name, lastToken)) { > isWriteAccess = false; > isReadAccess = true; > } >@@ -1434,7 +1442,15 @@ > if (reference instanceof QualifiedNameReference) { > char[][] tokens = ((QualifiedNameReference)reference).tokens; > char[] lastToken = tokens[tokens.length-1]; >- if (!this.patternLocator.matchesName(((VariablePattern)this.pattern).name, lastToken)) { >+ if (this.pattern instanceof OrPattern) { >+ SearchPattern[] patterns = ((OrPattern) this.pattern).patterns; >+ for (int i = 0, pLength = patterns.length; i < pLength; i++) { >+ if (!this.patternLocator.matchesName(((VariablePattern)patterns[i]).name, lastToken)) { >+ isWriteAccess = false; >+ isReadAccess = true; >+ } >+ } >+ } else if (!this.patternLocator.matchesName(((VariablePattern)this.pattern).name, lastToken)) { > isWriteAccess = false; > isReadAccess = true; > } >#P org.eclipse.jdt.core.tests.model >Index: src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java,v >retrieving revision 1.163 >diff -u -r1.163 JavaSearchBugsTests.java >--- src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 16 Jan 2009 14:29:34 -0000 1.163 >+++ src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 17 Feb 2009 17:10:54 -0000 >@@ -10424,4 +10424,95 @@ > deleteProject("P"); > } > } >+ >+ >+/** >+ * @bug 265065: [search] java.lang.ClassCastException while running "Refactor...Extract Class" >+ * @test Ensure that no CCE occurs while using an OrPattern made of VariablePattern >+ * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=265065" >+ */ >+public void testBug265065() throws CoreException { >+ this.workingCopies = new ICompilationUnit[1]; >+ this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/MyClass.java", >+ "public class MyClass {\n" + >+ " class MyPrivateClass {\n" + >+ " public String type = TYPE_A;\n" + >+ " public Object value = null;\n" + >+ " public MyPrivateClass(String type, Object value) {\n" + >+ " this.type = type;\n" + >+ " this.value = value;\n" + >+ " }\n" + >+ " }\n" + >+ "\n" + >+ " private static final String TYPE_A = \"A\";\n" + >+ " private static final String TYPE_B = \"B\";\n" + >+ " private static final String TYPE_C = \"C\";\n" + >+ "\n" + >+ " void foo (Object value) {\n" + >+ " MyPrivateClass mpc = new MyPrivateClass(TYPE_B, value);\n" + >+ " if (mpc.value == null) {\n" + >+ " mpc.type = TYPE_C;\n" + >+ " }\n" + >+ " }\n" + >+ "}\n" >+ ); >+ this.resultCollector.showRule(); >+ this.resultCollector.showAccess(); >+ SearchPattern leftPattern = SearchPattern.createPattern("MyClass.MyPrivateClass.value Object", FIELD, ALL_OCCURRENCES, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE); >+ SearchPattern rightPattern = SearchPattern.createPattern("MyClass.MyPrivateClass.type String", FIELD, ALL_OCCURRENCES, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE); >+ new SearchEngine(this.workingCopies).search( >+ SearchPattern.createOrPattern(leftPattern, rightPattern), >+ new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, >+ getJavaSearchWorkingCopiesScope(), >+ this.resultCollector, >+ null); >+ assertSearchResults( >+ "src/MyClass.java void MyClass.foo(Object) [value] EXACT_MATCH READ ACCESS\n" + >+ "src/MyClass.java void MyClass.foo(Object) [type] EXACT_MATCH READ ACCESS\n" + >+ "src/MyClass.java MyClass$MyPrivateClass.type [type] EXACT_MATCH\n" + >+ "src/MyClass.java MyClass$MyPrivateClass.value [value] EXACT_MATCH\n" + >+ "src/MyClass.java MyClass$MyPrivateClass(String, Object) [type] EXACT_MATCH WRITE ACCESS\n" + >+ "src/MyClass.java MyClass$MyPrivateClass(String, Object) [value] EXACT_MATCH WRITE ACCESS" >+ ); >+} >+public void testBug265065b() throws CoreException { >+ this.workingCopies = new ICompilationUnit[2]; >+ this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/pack/Test.java", >+ "package pack;\n" + >+ "public class Test {\n" + >+ " public int field;\n" + >+ "}\n" >+ ); >+ this.workingCopies[1] = getWorkingCopy("/JavaSearchBugs/src/test/X.java", >+ "package test;\n" + >+ "import pack.Test;\n" + >+ "public class X {\n" + >+ " void foo(Test t1, Test t2) {\n" + >+ " t1 = t2;\n" + >+ " t1.field = t1.field;\n" + >+ " t2.field = t1.field;\n" + >+ " }\n" + >+ "}\n" >+ ); >+ this.resultCollector.showAccess(); >+ ILocalVariable localVar1 = selectLocalVariable(this.workingCopies[1], "t1"); >+ SearchPattern leftPattern = createPattern(localVar1, IJavaSearchConstants.REFERENCES); >+ ILocalVariable localVar2 = selectLocalVariable(this.workingCopies[1], "t2"); >+ SearchPattern rightPattern = createPattern(localVar2, IJavaSearchConstants.REFERENCES); >+ new SearchEngine(this.workingCopies).search( >+ SearchPattern.createOrPattern(leftPattern, rightPattern), >+ new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, >+ getJavaSearchWorkingCopiesScope(), >+ this.resultCollector, >+ null); >+ assertSearchResults( >+ "src/test/X.java void test.X.foo(Test, Test) [t1] EXACT_MATCH WRITE ACCESS\n" + >+ "src/test/X.java void test.X.foo(Test, Test) [t2] EXACT_MATCH READ ACCESS\n" + >+ "src/test/X.java void test.X.foo(Test, Test) [t1] EXACT_MATCH READ ACCESS\n" + >+ "src/test/X.java void test.X.foo(Test, Test) [t1] EXACT_MATCH READ ACCESS\n" + >+ "src/test/X.java void test.X.foo(Test, Test) [t2] EXACT_MATCH READ ACCESS\n" + >+ "src/test/X.java void test.X.foo(Test, Test) [t1] EXACT_MATCH READ ACCESS" >+ ); >+} >+ > } >\ No newline at end of file
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 265065
: 126012