summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-09-27 10:19:19 -0700
committerTor Norbye <tnorbye@google.com>2013-09-27 10:19:28 -0700
commitf7998d05c40c24ae66d1972abfcb070552b1d7b5 (patch)
treeb0b97491f6e6591e53ea6a8f6c3a79a7dc685771 /java/java-impl/src/com/intellij
parentbeca9839b2866f90da9dc517c29df2ec25a6f6a8 (diff)
downloadidea-f7998d05c40c24ae66d1972abfcb070552b1d7b5.tar.gz
Snapshot cd724ea5e27634f1c84f893f10b646937a677d56 from idea/132.425 of git://git.jetbrains.org/idea/community.git
cd724ea: Code cleanup - Idea's warnings fixed - message moved to .properties file c84855b: for performance use processNames api for java symbol contributor 334c509: IDEA-114064 Create "From Maven" library dialog doesn't handle full coords correctly (as advertised) 4e10a17: IDEA-109943 Download Library from Maven Repository: artifacts from repository with provider != maven2 are suggested, but repository is filtered off d4bc48d: IDEA-114037 Code completion should prefer variable names to unimported class names b7e5e6c: refix RUBY-11716: do not play with fire, always save and load in UTF-8 ! bb7ed8a: cleanup 15bd24e: cleanup e56b270: ProjectId, don't add project level provider if project is not mapped a0fb6a5: let IsNullCheck mean null->true, the former !null->false meaning was useless 26402542: test data fixed f800733: new inference: input/output inference variables 56d872d: NPE: find usage for db element 3ffd6a0: IDEA-114003 XDebuger breakpoint properties: strage selection jumps in breakpoint tree bbdef54: IDEA-114001 XDebuger Breakpoint Properties: enable in tree is not saved IDEA-114002 XDebuger breakpoint properties: don't close the dialog by double click IDEA-114004 XDebugger breakpoint properties: checkboxes synchronization is broken f6ff871: IDEA-114001 XDebuger Breakpoint Properties: enable in tree is not saved IDEA-114002 XDebuger breakpoint properties: don't close the dialog by double click IDEA-114004 XDebugger breakpoint properties: checkboxes synchronization is broken 8f3d962: IDEABKL-6897 Enter inserts closing brace in wrong place 6a78643: IDEABKL-6897 Enter inserts closing brace in wrong place 06b899c: IDEA-114001 XDebuger Breakpoint Properties: enable in tree is not saved IDEA-114002 XDebuger breakpoint properties: don't close the dialog by double click IDEA-114004 XDebugger breakpoint properties: checkboxes synchronization is broken aeda985: don't give focus to ant messages view f525708: new inference: overload resolution for SAM return type for implicit lambda should be ignored 6692602: cleanup current file from highlighting markup 27c6645: compilation fix 1936bb2: IDEA-107453 Compilation error if overriding methods have different access modifiers 0ddcc36: api a7f05e1: card layout fixed b007608: IDEA-110203 IDEA ignores space after comma setting for methods declaration/call [CR-IC-2022] ae02c17: hiding artifacts 90e6ed2: back to AddModuleWizard 4a029e9: Groovy: Pull-up members 6f9e810: NPE fc48bab: pull-up cbf7531: prepare pull-up refactoring for Groovy 6762d5f: cleanup b26ffb2: spaces around inner classes 41e8e70: IDEA-113333 Java formatter breaks source code: Merges statements into line comments [CR-IC-2245] ea91b55: IDEA-113815 keep "simple methods in one line" does not keep long methods [CR-IC-2486] ecd65ad: Import Eclipse code style settings from XML profile (a part of IDEA-104068) [CR-IC-2219] aacf1e4: IDEA-113844 (handling of core component initialization failures when spoiled by plugins) 8dc3ede: IDEA-112387 Reformat code with rearrange entires on = fail on enum [CR-IC-2205] 72ddb9e: Merge remote-tracking branch 'origin/master' 209340b: Add the description for MavenDuplicatePluginInspection. de367e1: Merge branch 'svn1_8_new' 1a70497: IdeaTestAssistant: fix test data d6a2510: svn: Fixed "Import" when path/url contains '@' symbol 94c4223: svn: Implemented "Export" action for command line 8913712: parameter popup: escape for annotation methods (IDEA-113971) fdf7312: svn: Made event handler for checkout/export utilize passed progress indicator (instead of just current thread progress indicator) f653713: IDEA-105758: Contradiction between error and fix actions (Java EE artifact) eac456f: Platform: ability to provide native icons for PsiElements (PsiFile/Directory) AppCode: blue icons for folders 4d5c47a: IDEA-77519: Project fails to open when workspace.xml is empty c40e732: two classes temporary restored to fix backward compatibility b6b3bc6: added optional dependencies for framework support providers a9dae78: IDEA-90661: recognize IBM JDK jars 6b44958: cleanup & javadoc 0c0a6a6: IDEA-108785 Allow applying the same context to many selected live templates 247661b: don't search for unknown path macros in the middle of xml unless asked so by PathMacroFilter (IDEA-102674) 90222d5: hopefully fix control flow building stack inconsistency assertions in case when a PCE is thrown 241e44b: EA-50288 - CCE: RefJavaUtilImpl.getTopLevelClass 22d5c2f: ensure to filter already inserted annotations (IDEA-113785) 27b76b4: inplace introducer: another case to restore expression (IDEA-113352) 603e138: add mnemonics (IDEA-113889) a8c374c: XSuspendPolicyPanel "Make default" (requires for new JavaBreakpointType) remove unused methods 4f19472: CR-IC-2485 (deprecation policy specified; deprecated API usage upgraded) 7231807: JavaBreakpointType isSuspendThreadSupported true 8637e89: register JavaBreakpointType, but hide under system property java.debugger.xBreakpoint 0b2d5f0: cleanup 5cc1f5e: EA-50289 (CCE: TooBroadScopeInspection$TooBroadScopeInspectionFix.getCommentText) 505b86e: new inference: pertinent to applicability 8ac21fd: cleanup 2c5f39e: cleanup f6efaa9: simplify DebuggerInvocationUtil bf8865f: overrides 0d49e5b: JavaBreakpointType canPutAt 33ebea3: extract XLineBreakpointTypeBase de7d963: extract XDebuggerEditorsProviderBase, init JavaBreakpointType (is not registered, so, not in action now) ed777e6: remove deprecated canPutAt 9163435: overrides 44af67f8: extract XDebuggerUtil.getInstance().getGroupingByFileRuleAsList() b93b27c: add missing Overrides 0857036: cleanup ae791a7: new inference: test preparations 48120ab: IdeaTestAssistant: add resolving and completion inside TestDataPath annotation 971544b: remove empty unused class c5642d9: hippie completion: split complex tokens by spaces e1383b1: refix and add test for IDEA-90294 Don't use substring match in word completion fbae94c: EA-49809 Made client factories final in SvnVcs 2b4b70f: Fix OC-8127: Appcode hangs on reformatting (endless right shift) +review CR-OC @Anton.Makeev, @Rustam.Vishnyakov b7314cf: fix pycharm detection 5f0bb3c: revert error checking 5f99590: svn: Implemented "Import" action for command line ad04905: svn: Changed import logic to use common commit event handler (instead of checkout event handler) 1a45be0: custom options 8d278a3: MavenArchetypesPanel extracted 32eeb4c: aggregation panel invisible 9388cc4: new project wizard: project type sorting 2c02a07: svn: Add "Skipped" event processing in commit/import output for command line d365580: svn: Refactored commit output parsing for command line b1cc312: immutable dfa offset stack 5c494fb: toolbarIcon is nullable 4304880: dfa: traverse only flushable variables, not all ed08eab: immutable EqClass 03de519: overrides f8661d9: return empty collection if list of storage files is empty 81a998c: IDEA-111030: Add Framework Support: Ok is disabled for the only selected Web Application 4ce1cc8: unused class removed 84f7401: svn: Added final status bar message for Import ("Committed revision xxx") aa1d479: library editor: 'attach javadoc' extracted to separate button so the main '+' button won't show popup 1612198: cleanup e180456: cleanup 546fffe: Merge remote-tracking branch 'origin/master' c3caf6c: Merge remote-tracking branch 'origin/master' 5cd2b37: assertion for EA-45385 - NPE: XmlTagImpl.getDescriptor 99563ea: EA-49418 - NPE: InjectLanguageAction.invokeImpl dc82859: cleanup f70ef96: EA-50139 - assert: TextRange.<init> 990e410: svn: Removed unused code (from "Ignore" functionality) 6604613: svn: Implemented "Ignore" functionality on subversion level d544d03: cleanup after notnullification 5330d9e: plugin suggester: suggest plugins from repository by unknown facet 1ccf92a: error which should never happen replaced by assertion 889d3ce: improved dialog for choosing root types of added roots 0eb34fa: hide "use out of process build" option from UI d79e13e: plugin suggester: suggest plugins from repository by unknown facet 00a127b: Use shell options only if applicable. b4f21b9: Don't fail to create SSH terminal session if we failed to create local terminal session. 8e5cb57: test for "Unnecessary unicode escape sequence" inspection dc8acce: temp revert c7c4431: fix SliceBackwardTest 3e16a04: svn: Implemented "Edit Revision Comment" action for command line c54948a: 'async' added e4f7950: svn: Correctly create externals that have '@' in url - add '@' at url end 9b66e1c: svn: Fix line separators duplication for "Create External" action for SVNKit a98dc14: svn: Implemented "Create External" action for command line 32e30d1: EA-50206 - assert: FileManagerImpl.findFile 4a4c0cc: svn: Unify line separator for multiline properties 4b9422b: Reverted: Semantic highlighting level to avoid conflicts with "unused symbol" annotations [CR-IC-2435] ad970ef: lambda: propagate wildcards elimination e78ab51: lambda: check formal params for equality, eliminate wildcards during inference according to 15.27.3 fc9a196: new inference: ignore proper types in mutual eq constraints generation 7bc0048: new inference: void compatible according to return values 939fc45: prepare for test new inference eef6eb2: new inference: exact method reference 172daec: new inference: eliminate delayed constrains according to 0.6.3 ec93384: postpone type evaluation e689d68: new inference: make use of ex constraint 7838f8e: Merge branch 'safe-sudo-escaping' 1c22df9: Add grails-app/resources as resources folder, not a source folder. a7f094d: fix NPE e1fe819: Added ExecUtil.sudoAndGetOutput() with safe escaping and quoting for Mac and Linux 6bf3a02: fixed EA-48905 - SIOOBE: ParameterInfoComponent$OneLineComponent.buildLabelText c853c69: system dependent paths in groovy shell db7d97f: Merge remote-tracking branch 'origin/master' 65426f9: mark as DumbAware 0d1a074: Support active links in GotIt panel c7297a0: debugging blinking test 755c6b2: IDEA-113938 "Submit feedback" should pre-fill project and affected version ff45141: dfa: don't go into the same instruction twice with the same state 3361944: a bit more parsimonous DfaMemoryStateImpl.createCopy 028d28b: dfa states should not change while in queue => no need to copy them 1709382: dfa: use UnorderedPair instead of two-element set e8dbc21: immutable DfaVariableState, for faster copying and less memory usage 666ed52: IDEA-70241 (Replace with '{@code}' inspection doesn't replace all occurrences in file.) 71bd9cf: Merge remote-tracking branch 'origin/master' c923098: EA-47881 - IOE: GroovyPsiElementFactoryImpl.createGroovyFileChecked 8b97940: cleanup logging 6e4b81e: EA-50137 - assert: TestObject.addClassesListToJavaParameters 5381d51: cleanup dc2d1b2: notnull f419fab: "todo" moved out of lang-impl 97cd633: attributes cleanup 75b3eaa: notnull c7fa9af: cleanup f5b5bf4: cleanup 776b16b: cleanup bf3cea4: made fields final 87913f7: cleanup 798e94e: cleanup, get rid of buggy duplicate node renderer 50f13e4: removed deprecated methods from ExternalAnnotator 6d9c887: avoid deprecated methods 4852116: minor 9cd549c: now Searchable. fixes test. 302302a: typo 26d8885: - handle strings with more than one quote used for start / end delimiters - proper retrieving syntax highlighter in case of non languge based syntaxhighlighter (quite often it is bound to file type) - Find: String literals only: Throwable at StringSearcher.scan() on XML with a string (IDEA-113885) - fix for backward search not ending when whole word option used 4dfd0c7: Encapsulate field dialog: explicit value for "Use accessors when field is accessible" when "as is" visibility is selected e1aff45: typo :((( 6237b9b: test fixed 6c0d31b: test fixed 493cfae: update test data 711bca1: update test data f1bc615: update test data 8dd18de: update test data e61a901: update test data 0be96e9: update test data aac178b: dfa: remove queued state duplication 6a25f5d: dfa: don't reschedule already processed states, cleanup 7559dfc: Semantic highlighting level to avoid conflicts with "unused symbol" annotations [CR-IC-2435], for WI-19396, WI-20126 (cherry picked from commit 56d66dc) 7c27aef: extract collectUsedJars() function 12f59ff: update test data 03df890: update test data 1efd604: update test data 2c1726e: update test data 24bf1d1: Merge remote-tracking branch 'origin/master' 8f26a8b: improved duplicates search in python extract method 9bfcbbe: setup resource roots when project is imported from Maven (IDEA-57398) 64594cd: diagnostics for EA-49831 0d76c32: add support for frameworks step: sorting restored b510334: IDEA-113294 indentation of brace in a lambda expression corrected [CR-IC-2426] 9651be4: IDEA-113910 Gradle: code insight; dependencies DSL resolving 25595c8: new inference: checked exceptions compatibility constraint 6b8f295: dump highlighting test data without markup 636719b: now that we have dfa state hashing, use it instead of linear lookup 3813120: dfa: don't merge states when there's only one 3fd9ba8: IDEA-113910 Gradle: code insight; dependencies DSL resolving 57a6aeb: IDEA-113910 Gradle: code insight; dependencies resolving da23b6c: Merge remote-tracking branch 'origin/master' 7ca6ea3: Merge remote branch 'origin/master' cdc6d6a: show deprecated make implementation warning once on first compilation after project opening 090c4e3: dfa state merging: cache copies e6ee024: Allows getting Gradle home without having a Project. 0391639: Gradle VM Options are now saved in between sessions. f5412f0: resource root: show 'New Directory' action instead of 'New Package' under resource roots 1637f6b: notnullification 87f394f: IDEA-113904 (Add New Module from Project Structure dialog wants to create new project) a7c75f6: IDEA-113865 ('Equals should check class of parameter' shouldn't warn on identity equals) 2486e9e: dfa: merge several states to account for variables with several possible values 4d4f4b0: dfa: some minor things and caching c14961f: UnorderedPair in platform 5ad442d: Merge remote-tracking branch 'origin/master' 946a281: Scroll to bottom on typing in terminal (PY-10344). e5a0548: Close all connections on dispose. f61f6a2: changes from tech-writers b82b0bb: dfa: state merging interruptibility 3893373: VcsDirtyScopeManagerImpl: log who marks everything dirty 41e5381: Merge remote-tracking branch 'origin/master' da21efb: JediTerm updated. beb1d1a: Merge remote-tracking branch 'origin/master' ed3a2b5: skip the whole document if some component has disabled roaming type (details CR-IU-308) d66309b: Fix antialiasing. e55fae1: dfa: abstract out eq class into EqClass class 370d44d: dfa: remove trivial state facts that constant != another constant 4ccfcf7: UsagesStatistic must specify roaming disabled 75894ae: cleanup 784b4e3: DimensionService: cleanup, order of stored data should be stable 36443b6: overrides b70b1dc: overrides dfe38fb: simplify some constant conditions and greenify 9a08478: IDEA-85961 (Pattern BACKSLASH_PATTERN = Pattern.compile("\\", Pattern.LITERAL) is always marked red.) d0bdc3b: simplify load from providers – we don't need to filter again (our save do it, in any case it is absurd to store component with global roaming in the project level file, — should be refine later) bf85e1b: cleanup 9c30823: remove unused methods f671c09: overrides 3bd62bc: ComponentRoamingManager should not keep defaults (we use RoamingType.PER_USER by default) a8f1063: CR-IU-300 remove outdated EP ComponentRoamingType b182751: CR-IU-300 remove outdated RoamingTypePerPlatform 994389c: another java.util.regex.Pattern.compile() parameter annotation 301710d: IDEA-113866 (this. not suggested for fields of anonymous inner classes) f5d03c4: dfa: don't consider final getters same as immutable fields 272a6d0: Corresponding parents for console colors. 71298ce: Bright console colors for Monokai. f39c34b: Console colors for WarmNeon scheme. 7548e47: Black is invisible on dark background (in RegExps for example). ca6b784: Change bloody red to light pink for numbers (pink is specific to Neon color schemes while red is not, also eyes say thanks). 7f627d9: Console colors for Twilight scheme fixed. a5eb2fc: Console colors for Monokai scheme fixed. f7da145: DfaPsiType: add @NotNull b216102: rebomb test b349547: diagnostics for inconsistencies during control flow building 6823425: dfa: only perform costly state merging when it has chances - after jumps fea8871: dfa: fighting too complex methods; join complementary memory states after fork to avoid having too many states 0ac2084: DfaMemoryStateImpl: introduce unwrap; compare variable values with their non-initialized counterparts e919b8b: dfa: only goto catch on non-trivial method calls and throws e2ea04f: new inference: initial method reference constraint a9dde36: new inference: check substituted descriptor return type 3e5b164: new inference: expression inside condition should be poly, target type for conditional expression ff9f2e9: new inference: emulate fresh variable - do not override vars with captured ones f415702: new inference: default constructor as poly expression argument ee56497: new inference: symmetric variable bounds 4a46b24: new inference: init inter call inference 06829c5: Merge remote-tracking branch 'origin/master' e3f213f: Console colors for Darcula. f748505: IDEA-57940 Cyclic expand word should take into account all open files 460ef47: StreamProvider.isVersioningRequired 8029f47: Bright yellow made more visible on white background. 96006be: Default console colors as in xterm palette, gray and dark gray from standard vga palette for better readability. a378414: Bight console colors added to settings. 54e6582: builder-based project types b0b2cf8: template-based project types? e741484: CPU hogging fix again eb22a99: fix todo duplication when several pattern match -> prefer finding match with last pattern (in settings list), thus default TODO pattern is matched last a4d4371: fix compilation 2f823ba: Difference Groovy Shell & Groovy Console actions 3e876f4: IDEA-113590 annotations as annotation values 732cafd: dead code a712f87: pull up 'isQualified()' method 4edd102: extract base class from PullUpDialog 10d89d6: remove obsolete test a0750e4: delete envFile manually 114cbb2: IDEA-113861 Gradle: it could be possible to hide 'Gradle: download' progress to the background ca416b8: 'More' element for classes, files, action, and settings. Better renderer. b2a550c: test framework: drop temp directory on light project close 8aaf53b: greenify ActionsTreeUtil a bit 922d41a: layout 2cd7326: adding frameworks support 2bd8fb0: cleanup 4ea6442: ProjectSummaryStep 9fdcdcd: commit project name bd39918: new project wizard: first test 630fc14: External system: use URLs in compile output paths 85dbe5f: IDEA-65114 "Add Maven projects" cannot be undone 5041ae5: test framework: returning of the data provider 16e2072: @Nullable XBreakpoint.getProperties reverted +review CR-IC-2418 df4da38: dump shell environment to a temporary file to reduce probability of malformed lines occurrence 280d52a: let event log warning color be orange (IDEA-113802) a30b2ae: IDEA-113836 Console folding: add TestNG related patterns cbeb0f1: don't change mouse cursor during goto name population (IDEA-113800) fb5ad5b: IDEA-113638 ChooseByName restart on write action spawns a new thread 89b3767: disable autopopup in groovy shell if selection by chars is enabled (IDEA-112820) 9fa36be: CompletionConfidence: don't force API users to implement unused method 34cf7eb: Console Folding: proper capitalization 5e8aa44: IDEA-113855 Search Everywhere looks scrambled at first start 71723cb: svn: Refactored executable validation - use separate version client 1114cfe: javadoc 0738800: jps model: simplification, source roots always have default properties b1d5062: jps model: JpsElementType converted to interface to allow reusing common base class 229deb0: test framework: ok, put light project file into ephemeral directory, but keep it for a project's life 6e8b950: ensure "thread" suspend policy for logging breakpoints d67c04e: EA-49809 Move client factories creation to SvnVcs constructor (instead of active() method) 935cdba: new inference: initial tests 970a180: encapsulate read access to USE_COMPILE_SERVER option b9b3fc8: remote agents - extract to remote servers cfe8e2b: WEB-9335 Bad insert pair brace in CSS 2815c22: WEB-9334 Incremental selection works bad with negative CSS values d023471: new "Unnecessary unicode escape sequence" inspection 945b069: unicode escape needs at least one 'u' 8e7797b: chrome still crashed, revert to old, not-recursive speed search 1917d86: Merge remote-tracking branch 'origin/master' c18e6bd: Lense mode "internal" preview db88427: Merge branch 'svn1_8_new' 7c64e8b: test framework: do not put light project file into ephemeral directory af09e11: remove @Nullable from key.get as it's too generic d49df32: svn: Refactored prompting for working copy format - make return not null format d6086ae: dfa: types with wildcard parameters are not equal 3d28aa5: Optimization: check exiting of griffon-app first b016c04: correct ephemeral state copy (IDEA-113143 Calling method with contract shouldn't result in nullability suspicion) 189573f: svn: Refactored upgrade working copy format dialog - use list of available formats (instead of separate fields for each format) 60c471b: Rename test 1a42f59: Remove using of unnecessary StringBuilder a56db90: Use MultiMap 340cf22: Calling method with contract shouldn't result in nullability suspicion (IDEA-113763, IDEA-113699, almost IDEA-113143) f2a563b: dfa: unify nullability violation processing 709af86: dfa: expand contract test 1cddfb4: dfa cleanup: skipping reports on method calls is now done via unknown variable mechanism 2765dab: dfa: spare some minor cpu cycles 8bc7465: svn: Added "1.8" option to upgrade/checkout dialogs c266bd2: IDEA-66603 Maven3: provide inspection that checks duplicate declarations of plugins af32923: SpellChecker: "cyclomatic" 5f4f98f: svn: Refactored working copy format selection dialog to use WorkingCopyFormat instances instead of just strings e33b58b: MismatchedCollectionQueryUpdateInspection -- added "compute" prefix (from j.u.Map in JDK8) 7d54b2e: new inference: accept nonProper eq bounds 457d95b: new inference: distinguish different captures 5b5f52e: new inference: assertions caused by raw types 3848de4: new inference: open top level captured wildcards 35d59c0: new inference: extend usage of already inferred variables 4f7b572: new inference: inference of calls in arguments during outer call inference bfa7879: new inference: captured variables from outer calls to be included ed95269: new inference: eq bound for S<=T constraint reduction 12a0faf: better positioning 13029b7: different position layout algorithms 39e6e21: EA-49923 - Fixed working copy format detection for default project d521e9d: JDK combobox should show JDK home 17fe05e: Fix typo 7ab769b: IDEA-16077 Maven embedder runs in the 'wrong' JDK add "embedder JDK" option 418ddc0: Inline string constant 6a8f1e2: IDEA-16077 Maven embedder runs in the 'wrong' JDK extract MavenJdkCombobox 46078c4: svn: Refactored detection if command line implementation should be used (use utility method) 24106fc: XDebugger: @Nullable XBreakpoint.getProperties() 3dc6f07: extract util method 476dac4: Reinit checkbox state on create 39cf1fd: Structure viewer for simple editors support fixed a38a251: Show filters only for table editor + a few model and UI fixes cbd5630: Initial dynamic filters model + columns header improved 281c008: svn: Support nullable SVNStatusClient in status implementation for SVNKit 1840d42: simplification fbcba0f: svn: Make command line clients (info, status) use vcs instead of project instances ae8b41b: Merge remote-tracking branch 'origin/master' a97397c: Extract method. 3b9eca4: new project wizard: preparing test infrastructure 327ddb0: Lense mode "internal" preview 0ede5e1: new project wizard: AbstractProjectWizard extracted a94b556: IDEA-111335 Gradle: task tree is incorrectly displayed if tasks are added to sub-projects via 'subprojects' method bfd366f: Merge remote-tracking branch 'origin/master' 0ef2a82: calls to obsolete method removed from build scripts 2df016f: AntLoggerFactory inner class made static to fix NoSuchMethodException in Logger.setFactory fe876e2: svn: Clients for update command renamed and moved to corresponding package a38d90e: Terminal color settings. bd285b8: svn: Refactored update logic to common ClientFactory model 9cc13da: platform: ignore hidden Windows files d87664c: test framework: relic property dropped 5f6ef06: svn: Removed unused "common ancestor" behavior from command line update client 3667fe1: Find in strings with reg exp with start / end match markers doesn't work without string delimiters (IDEA-113788) 94a079f: svn: Refactored "update" command - explicitly create new SVNKit update client for each update/switch operation 0344e91: new project wizard: added option to use framework libraries from an app server 2882ac0: svn: Removed unused methods from "update" client 17ea275: svn: Removed unused SvnProxies class c926181: WEB-9342 External Tool fails on OSX if an executable file basename specified a3433f9: svn: Removed unused methods from "info" client ec3112d: Optimize SassExtensionFunctionsIndex 9f1abf7: nosplash shouldn't prevent from plugin update 4c7154d: dfa: use cached nullability b81e9c3: dfa: less frequent "too long" check 0b0eba9: DfaValueFactory: use List instead of TIntObjectHashMap for sequential keys 95d5433: introduce DfaPsiType without nullability, to quickly check assignability/convertibility in DfaVariableState b901d90: IDEA-96713 Incorrect options shown for 'implements' e02e2c4: IDEA-113780 "Annotate" from history fixed for renamed/moved files fe00f73: test framework: stability improvements 76d664d: platform: suspicious event logging b204bdf: Cleanup (de-duplication) 7ba9ff0: spelling ece939c: make public for Upsource 496db4d: xdebugger: rebuild standalone variables view on EDT eae27cb: xdebugger: supported rebuilding of standalone variables view 8bf5204: xdebugger api: added convenient method 43dbb6f: Terminal options. 3db1f5c: Blink period and antialiasing settings. 88264bd: IDEA-108147 Use "merge sources" wrapper object instead of just string representation as data model for "Merge Sources" column (to correctly get file revision object and show details panel) 111e6ba: IDEA-108147 While building history for element make check "if element parent or child was changed in given revision" only be performed for non-"merge source" revisions e07828d: svn: Implemented support for "merged revisions" parsing in history logic for command line 1586c4a: svn: history logic refactored for command line - get and parse history data in xml format 0ac1dd2: IDEA-94942 Refactored "Annotate" implementation for command line - use utility method for parsing ba1e5e0: IDEA-94942 Implemented merge history support for "Annotate" action 4c3b0a8: IDEA-94942 Implemented "Switch" logic (during update) Change-Id: I7092ae66ff47d353a5b9770d1d91f77369bb7734
Diffstat (limited to 'java/java-impl/src/com/intellij')
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java2
-rw-r--r--java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java15
-rw-r--r--java/java-impl/src/com/intellij/codeInspection/magicConstant/MagicConstantInspection.java2
-rw-r--r--java/java-impl/src/com/intellij/ide/highlighter/JavaFileHighlighter.java2
-rw-r--r--java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java13
-rw-r--r--java/java-impl/src/com/intellij/lang/java/JavaSyntaxHighlighterFactory.java2
-rw-r--r--java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java3
-rw-r--r--java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java8
-rw-r--r--java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildBlockWrapFactory.java6
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/file/PsiJavaDirectoryFactory.java9
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/search/JavaIndexPatternBuilder.java5
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java7
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/search/LexerEditorHighlighterLexer.java6
-rw-r--r--java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java14
-rw-r--r--java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java2
-rw-r--r--java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassDialog.java66
-rw-r--r--java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java3
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java9
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java47
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpDialog.java143
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java305
-rw-r--r--java/java-impl/src/com/intellij/refactoring/ui/AbstractMemberSelectionPanel.java14
-rw-r--r--java/java-impl/src/com/intellij/refactoring/ui/MemberSelectionPanel.java2
-rw-r--r--java/java-impl/src/com/intellij/slicer/DuplicateMap.java3
-rw-r--r--java/java-impl/src/com/intellij/slicer/MyColoredTreeCellRenderer.java12
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceDereferenceUsage.java2
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceForwardUtil.java (renamed from java/java-impl/src/com/intellij/slicer/forward/SliceFUtil.java)8
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceLeafValueClassNode.java4
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceLeafValueRootNode.java11
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceManager.java6
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceNode.java8
-rw-r--r--java/java-impl/src/com/intellij/slicer/SlicePanel.java4
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceRootNode.java8
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceTooComplexDFAUsage.java2
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceUsage.java13
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceUsageCellRenderer.java14
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceUtil.java6
-rw-r--r--java/java-impl/src/com/intellij/testIntegration/JavaTestFramework.java2
-rw-r--r--java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java7
-rw-r--r--java/java-impl/src/com/intellij/usageView/UsageContextDataflowToPanel.java2
-rw-r--r--java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java1
41 files changed, 403 insertions, 395 deletions
diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java
index f33c6e4a394a..15e6d5a04d9f 100644
--- a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java
@@ -255,7 +255,7 @@ public class OverrideImplementUtil extends OverrideImplementExploreUtil {
for (OverrideImplementsAnnotationsHandler each : Extensions.getExtensions(OverrideImplementsAnnotationsHandler.EP_NAME)) {
for (String annotation : each.getAnnotations(project)) {
if (moduleScope != null && facade.findClass(annotation, moduleScope) == null) continue;
- if (AnnotationUtil.isAnnotated(overridden, annotation, false, false)) {
+ if (AnnotationUtil.isAnnotated(overridden, annotation, false, false) && !AnnotationUtil.isAnnotated(method, annotation, false, false)) {
AddAnnotationPsiFix.removePhysicalAnnotations(method, each.annotationsToRemove(project, annotation));
AddAnnotationPsiFix.addPhysicalAnnotation(annotation, PsiNameValuePair.EMPTY_ARRAY, method.getModifierList());
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java
index b3434ac20c10..9646ef9983ad 100644
--- a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java
+++ b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.DumbAware;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.text.CharArrayUtil;
+import com.intellij.xml.util.XmlStringUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -110,14 +111,18 @@ public class AnnotationParameterInfoHandler implements ParameterInfoHandler<PsiA
@Override
public void updateUI(final PsiAnnotationMethod p, final ParameterInfoUIContext context) {
- @NonNls StringBuffer buffer = new StringBuffer();
+ updateUIText(p, context);
+ }
+
+ public static String updateUIText(PsiAnnotationMethod p, ParameterInfoUIContext context) {
+ @NonNls StringBuilder buffer = new StringBuilder();
int highlightStartOffset;
int highlightEndOffset;
buffer.append(p.getReturnType().getPresentableText());
buffer.append(" ");
- highlightStartOffset = buffer.length();
+ highlightStartOffset = XmlStringUtil.escapeString(buffer.toString()).length();
buffer.append(p.getName());
- highlightEndOffset = buffer.length();
+ highlightEndOffset = XmlStringUtil.escapeString(buffer.toString()).length();
buffer.append("()");
if (p.getDefaultValue() != null) {
@@ -125,8 +130,8 @@ public class AnnotationParameterInfoHandler implements ParameterInfoHandler<PsiA
buffer.append(p.getDefaultValue().getText());
}
- context.setupUIComponentPresentation(buffer.toString(), highlightStartOffset, highlightEndOffset, false, p.isDeprecated(),
- false, context.getDefaultParameterColor());
+ return context.setupUIComponentPresentation(buffer.toString(), highlightStartOffset, highlightEndOffset, false, p.isDeprecated(),
+ false, context.getDefaultParameterColor());
}
private static PsiAnnotationMethod findAnnotationMethod(PsiFile file, int offset) {
diff --git a/java/java-impl/src/com/intellij/codeInspection/magicConstant/MagicConstantInspection.java b/java/java-impl/src/com/intellij/codeInspection/magicConstant/MagicConstantInspection.java
index 7193cc96ffed..6fb2bc7458c8 100644
--- a/java/java-impl/src/com/intellij/codeInspection/magicConstant/MagicConstantInspection.java
+++ b/java/java-impl/src/com/intellij/codeInspection/magicConstant/MagicConstantInspection.java
@@ -623,7 +623,7 @@ public class MagicConstantInspection extends BaseJavaLocalInspectionTool {
params.dataFlowToThis = true;
params.scope = new AnalysisScope(new LocalSearchScope(scope), manager.getProject());
- SliceRootNode rootNode = new SliceRootNode(manager.getProject(), new DuplicateMap(), SliceManager.createRootUsage(argument, params));
+ SliceRootNode rootNode = new SliceRootNode(manager.getProject(), new DuplicateMap(), SliceUsage.createRootUsage(argument, params));
Collection<? extends AbstractTreeNode> children = rootNode.getChildren().iterator().next().getChildren();
for (AbstractTreeNode child : children) {
diff --git a/java/java-impl/src/com/intellij/ide/highlighter/JavaFileHighlighter.java b/java/java-impl/src/com/intellij/ide/highlighter/JavaFileHighlighter.java
index fd624b1322d2..d6be007b9ba9 100644
--- a/java/java-impl/src/com/intellij/ide/highlighter/JavaFileHighlighter.java
+++ b/java/java-impl/src/com/intellij/ide/highlighter/JavaFileHighlighter.java
@@ -107,11 +107,13 @@ public class JavaFileHighlighter extends SyntaxHighlighterBase {
myLanguageLevel = languageLevel;
}
+ @Override
@NotNull
public Lexer getHighlightingLexer() {
return new JavaHighlightingLexer(myLanguageLevel);
}
+ @Override
@NotNull
public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
return pack(ourMap1.get(tokenType), ourMap2.get(tokenType));
diff --git a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java
index 402e7f54e0dc..f93464e952db 100644
--- a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java
+++ b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java
@@ -16,7 +16,7 @@
package com.intellij.ide.util.gotoByName;
import com.intellij.ide.util.DefaultPsiElementCellRenderer;
-import com.intellij.navigation.ChooseByNameContributor;
+import com.intellij.navigation.ChooseByNameContributorEx;
import com.intellij.navigation.NavigationItem;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
@@ -26,7 +26,9 @@ import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiShortNamesCache;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.ArrayUtil;
+import com.intellij.util.Processor;
import com.intellij.util.containers.HashSet;
+import com.intellij.util.indexing.IdFilter;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -34,7 +36,7 @@ import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
-public class DefaultSymbolNavigationContributor implements ChooseByNameContributor {
+public class DefaultSymbolNavigationContributor implements ChooseByNameContributorEx {
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.gotoByName.DefaultSymbolNavigationContributor");
@Override
@@ -91,6 +93,13 @@ public class DefaultSymbolNavigationContributor implements ChooseByNameContribut
return false;
}
+ public void processNames(Processor<String> processor, GlobalSearchScope scope, IdFilter filter) {
+ PsiShortNamesCache cache = PsiShortNamesCache.getInstance(scope.getProject());
+ cache.processAllClassNames(processor, scope, filter);
+ cache.processAllFieldNames(processor, scope, filter);
+ cache.processAllMethodNames(processor, scope, filter);
+ }
+
private static class MyComparator implements Comparator<PsiModifierListOwner>{
public static final MyComparator INSTANCE = new MyComparator();
diff --git a/java/java-impl/src/com/intellij/lang/java/JavaSyntaxHighlighterFactory.java b/java/java-impl/src/com/intellij/lang/java/JavaSyntaxHighlighterFactory.java
index 918b8ff92098..7ee3d7bb35ca 100644
--- a/java/java-impl/src/com/intellij/lang/java/JavaSyntaxHighlighterFactory.java
+++ b/java/java-impl/src/com/intellij/lang/java/JavaSyntaxHighlighterFactory.java
@@ -45,7 +45,7 @@ public class JavaSyntaxHighlighterFactory extends SyntaxHighlighterFactory imple
*/
@Nullable
@Override
- public SyntaxHighlighter create(FileType fileType, @Nullable Project project, @Nullable VirtualFile file) {
+ public SyntaxHighlighter create(@NotNull FileType fileType, @Nullable Project project, @Nullable VirtualFile file) {
if (project != null && file != null) {
PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
if (psiFile instanceof ClsFileImpl) {
diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java b/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java
index 7baff1405151..d392d7a7a481 100644
--- a/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java
+++ b/java/java-impl/src/com/intellij/psi/formatter/java/AbstractJavaBlock.java
@@ -263,6 +263,9 @@ public abstract class AbstractJavaBlock extends AbstractBlock implements JavaBlo
final Indent defaultChildIndent = getChildIndent(parent, indentOptions);
if (defaultChildIndent != null) return defaultChildIndent;
}
+ if (child.getTreeParent() instanceof PsiLambdaExpression && child instanceof PsiCodeBlock) {
+ return Indent.getNoneIndent();
+ }
return null;
}
diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java
index 1376f44c07ca..8f090b072d16 100644
--- a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java
+++ b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java
@@ -795,6 +795,12 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor {
{
minSpaces = 1;
minLineFeeds = 0;
+ if (myChild1 != null) {
+ ASTNode lastElement = myChild1;
+ while (lastElement.getLastChildNode() != null) lastElement = lastElement.getLastChildNode();
+ //Not to place second statement on the same line with first one, if last ends with single line comment
+ if (lastElement instanceof PsiComment && lastElement.getElementType() == JavaTokenType.END_OF_LINE_COMMENT) minLineFeeds = 1;
+ }
}
myResult = Spacing.createSpacing(minSpaces, 0, minLineFeeds, mySettings.KEEP_LINE_BREAKS, mySettings.KEEP_BLANK_LINES_IN_CODE);
}
@@ -1086,7 +1092,7 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor {
createParenthSpace(mySettings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE, mySettings.SPACE_WITHIN_METHOD_PARENTHESES);
}
else if (myRole1 == ChildRole.COMMA) {
- createSpaceInCode(true);
+ createSpaceInCode(mySettings.SPACE_AFTER_COMMA);
}
}
diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildBlockWrapFactory.java b/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildBlockWrapFactory.java
index eeeae0eb3fdf..ad4d8c02c5f1 100644
--- a/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildBlockWrapFactory.java
+++ b/java/java-impl/src/com/intellij/psi/formatter/java/wrap/impl/JavaChildBlockWrapFactory.java
@@ -19,6 +19,7 @@ import com.intellij.formatting.ASTBlock;
import com.intellij.formatting.Wrap;
import com.intellij.formatting.WrapType;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiPolyadicExpression;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import com.intellij.psi.formatter.java.JavaFormatterUtil;
@@ -83,7 +84,10 @@ public class JavaChildBlockWrapFactory {
return Wrap.createWrap(settings.THROWS_LIST_WRAP, true);
}
else if (nodeType == JavaElementType.CODE_BLOCK) {
- return Wrap.createWrap(Wrap.NORMAL, false);
+ if (settings.KEEP_SIMPLE_METHODS_IN_ONE_LINE && node.getPsi().getParent() instanceof PsiMethod && !node.textContains('\n')) {
+ return null;
+ }
+ return Wrap.createWrap(WrapType.NORMAL, false);
}
else if (JavaFormatterUtil.isAssignment(node)) {
return Wrap.createWrap(settings.ASSIGNMENT_WRAP, true);
diff --git a/java/java-impl/src/com/intellij/psi/impl/file/PsiJavaDirectoryFactory.java b/java/java-impl/src/com/intellij/psi/impl/file/PsiJavaDirectoryFactory.java
index 7971d2f350d5..e92396e00a2f 100644
--- a/java/java-impl/src/com/intellij/psi/impl/file/PsiJavaDirectoryFactory.java
+++ b/java/java-impl/src/com/intellij/psi/impl/file/PsiJavaDirectoryFactory.java
@@ -15,6 +15,7 @@
*/
package com.intellij.psi.impl.file;
+import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
@@ -23,6 +24,7 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
/**
* @author yole
@@ -34,6 +36,7 @@ public class PsiJavaDirectoryFactory extends PsiDirectoryFactory {
myManager = manager;
}
+ @NotNull
@Override
public PsiDirectory createDirectory(@NotNull final VirtualFile file) {
return new PsiJavaDirectoryImpl(myManager, file);
@@ -61,8 +64,10 @@ public class PsiJavaDirectoryFactory extends PsiDirectoryFactory {
}
@Override
- public boolean isPackage(PsiDirectory directory) {
- return ProjectRootManager.getInstance(myManager.getProject()).getFileIndex().getPackageNameByDirectory(directory.getVirtualFile()) != null;
+ public boolean isPackage(@NotNull PsiDirectory directory) {
+ ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myManager.getProject()).getFileIndex();
+ VirtualFile virtualFile = directory.getVirtualFile();
+ return fileIndex.isUnderSourceRootOfType(virtualFile, JavaModuleSourceRootTypes.SOURCES) && fileIndex.getPackageNameByDirectory(virtualFile) != null;
}
@Override
diff --git a/java/java-impl/src/com/intellij/psi/impl/search/JavaIndexPatternBuilder.java b/java/java-impl/src/com/intellij/psi/impl/search/JavaIndexPatternBuilder.java
index 379486347cb9..f404c401ae6f 100644
--- a/java/java-impl/src/com/intellij/psi/impl/search/JavaIndexPatternBuilder.java
+++ b/java/java-impl/src/com/intellij/psi/impl/search/JavaIndexPatternBuilder.java
@@ -24,6 +24,7 @@ import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.xml.XmlElementType;
import com.intellij.psi.xml.XmlTokenType;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
@@ -35,7 +36,7 @@ public class JavaIndexPatternBuilder implements IndexPatternBuilder {
@Override
@Nullable
- public Lexer getIndexingLexer(final PsiFile file) {
+ public Lexer getIndexingLexer(@NotNull final PsiFile file) {
if (file instanceof PsiJavaFile && !(file instanceof JspFile)) {
return JavaParserDefinition.createLexer(((PsiJavaFile)file).getLanguageLevel());
}
@@ -44,7 +45,7 @@ public class JavaIndexPatternBuilder implements IndexPatternBuilder {
@Override
@Nullable
- public TokenSet getCommentTokenSet(final PsiFile file) {
+ public TokenSet getCommentTokenSet(@NotNull final PsiFile file) {
if (file instanceof PsiJavaFile && !(file instanceof ServerPageFile)) {
return TokenSet.orSet(StdTokenSets.COMMENT_BIT_SET, XML_COMMENT_BIT_SET, JavaDocTokenType.ALL_JAVADOC_TOKENS, XML_DATA_CHARS);
}
diff --git a/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java b/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java
index 6011081b0051..57539ae07de0 100644
--- a/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java
+++ b/java/java-impl/src/com/intellij/psi/impl/search/JspIndexPatternBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,13 +32,14 @@ import com.intellij.psi.jsp.JspFile;
import com.intellij.psi.jsp.JspTokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
+import org.jetbrains.annotations.NotNull;
/**
* @author yole
*/
public class JspIndexPatternBuilder implements IndexPatternBuilder {
@Override
- public Lexer getIndexingLexer(final PsiFile file) {
+ public Lexer getIndexingLexer(@NotNull final PsiFile file) {
if (JspPsiUtil.isInJspFile(file)) {
EditorHighlighter highlighter = null;
@@ -67,7 +68,7 @@ public class JspIndexPatternBuilder implements IndexPatternBuilder {
}
@Override
- public TokenSet getCommentTokenSet(final PsiFile file) {
+ public TokenSet getCommentTokenSet(@NotNull final PsiFile file) {
final JspFile jspFile = JspPsiUtil.getJspFile(file);
TokenSet commentTokens = TokenSet.orSet(JavaIndexPatternBuilder.XML_COMMENT_BIT_SET, StdTokenSets.COMMENT_BIT_SET);
final ParserDefinition parserDefinition =
diff --git a/java/java-impl/src/com/intellij/psi/impl/search/LexerEditorHighlighterLexer.java b/java/java-impl/src/com/intellij/psi/impl/search/LexerEditorHighlighterLexer.java
index 92068c2c0d9a..894b88b5d11e 100644
--- a/java/java-impl/src/com/intellij/psi/impl/search/LexerEditorHighlighterLexer.java
+++ b/java/java-impl/src/com/intellij/psi/impl/search/LexerEditorHighlighterLexer.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ import com.intellij.openapi.editor.highlighter.EditorHighlighter;
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.text.CharSequenceSubSequence;
+import org.jetbrains.annotations.NotNull;
/**
* @author Sergey Evdokimov
@@ -38,7 +39,7 @@ public class LexerEditorHighlighterLexer extends LexerBase {
}
@Override
- public void start(CharSequence buffer, int startOffset, int endOffset, int state) {
+ public void start(@NotNull CharSequence buffer, int startOffset, int endOffset, int state) {
if (myAlreadyInitializedHighlighter) {
this.buffer = buffer;
start = startOffset;
@@ -75,6 +76,7 @@ public class LexerEditorHighlighterLexer extends LexerBase {
iterator.advance();
}
+ @NotNull
@Override
public CharSequence getBufferSequence() {
return buffer;
diff --git a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java
index 8c4f926900f5..11c77dd05cb1 100644
--- a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java
+++ b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java
@@ -87,6 +87,8 @@ public class EncapsulateFieldsDialog extends RefactoringDialog implements Encaps
private final JRadioButton myRbAccessorPackageLocal = new JRadioButton();
private DocCommentPanel myJavadocPolicy;
+ private boolean myCbUseAccessorWhenAccessibleValue;
+
{
myRbAccessorPackageLocal.setFocusable(false);
myRbAccessorPrivate.setFocusable(false);
@@ -270,13 +272,23 @@ public class EncapsulateFieldsDialog extends RefactoringDialog implements Encaps
myCbEncapsulateSet.addActionListener(checkboxListener);
myRbFieldAsIs.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
- myCbUseAccessorsWhenAccessible.setEnabled(!myRbFieldAsIs.isSelected());
+ if (myRbFieldAsIs.isSelected()) {
+ myCbUseAccessorWhenAccessibleValue = myCbUseAccessorsWhenAccessible.isSelected();
+
+ myCbUseAccessorsWhenAccessible.setSelected(true);
+ myCbUseAccessorsWhenAccessible.setEnabled(false);
+ }
+ else {
+ myCbUseAccessorsWhenAccessible.setEnabled(true);
+ myCbUseAccessorsWhenAccessible.setSelected(myCbUseAccessorWhenAccessibleValue);
+ }
}
}
);
myCbUseAccessorsWhenAccessible.setSelected(
JavaRefactoringSettings.getInstance().ENCAPSULATE_FIELDS_USE_ACCESSORS_WHEN_ACCESSIBLE
);
+ myCbUseAccessorWhenAccessibleValue = myCbUseAccessorsWhenAccessible.isSelected();
myRbFieldPrivate.setSelected(true);
myRbAccessorPublic.setSelected(true);
diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
index eee40ea2d34c..c8007a344815 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java
@@ -330,7 +330,7 @@ public class ExtractMethodProcessor implements MatchProvider {
}
private boolean isNotNull(PsiVariable outputVariable) {
- final StandardDataFlowRunner dfaRunner = new StandardDataFlowRunner(false);
+ final StandardDataFlowRunner dfaRunner = new StandardDataFlowRunner();
final PsiCodeBlock block = myElementFactory.createCodeBlock();
for (PsiElement element : myElements) {
block.add(element);
diff --git a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassDialog.java b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassDialog.java
index 24dd3cff4ee5..ca324a02a25f 100644
--- a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassDialog.java
+++ b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassDialog.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -261,40 +261,34 @@ class ExtractClassDialog extends RefactoringDialog implements MemberInfoChangeLi
protected JComponent createCenterPanel() {
final JPanel panel = new JPanel(new BorderLayout());
- final MemberSelectionPanel memberSelectionPanel =
- new MemberSelectionPanel(RefactorJBundle.message("members.to.extract.label"), memberInfo, "As enum") {
- @Override
- protected MemberSelectionTable createMemberSelectionTable(final List<MemberInfo> memberInfo, String abstractColumnHeader) {
- return new MemberSelectionTable(memberInfo, abstractColumnHeader) {
- @Nullable
- @Override
- protected Object getAbstractColumnValue(MemberInfo memberInfo) {
- if (isExtractAsEnum()) {
- final PsiMember member = memberInfo.getMember();
- if (isConstantField(member)) {
- return Boolean.valueOf(enumConstants.contains(memberInfo));
- }
- }
- return null;
- }
-
- @Override
- protected boolean isAbstractColumnEditable(int rowIndex) {
- final MemberInfo info = memberInfo.get(rowIndex);
- if (info.isChecked()) {
- final PsiMember member = info.getMember();
- if (isConstantField(member)) {
- if (enumConstants.isEmpty()) return true;
- final MemberInfo currentEnumConstant = enumConstants.get(0);
- if (((PsiField)currentEnumConstant.getMember()).getType().equals(((PsiField)member).getType())) return true;
- }
- }
- return false;
- }
- };
+ final MemberSelectionTable table = new MemberSelectionTable(memberInfo, "As enum") {
+ @Nullable
+ @Override
+ protected Object getAbstractColumnValue(MemberInfo memberInfo) {
+ if (isExtractAsEnum()) {
+ final PsiMember member = memberInfo.getMember();
+ if (isConstantField(member)) {
+ return Boolean.valueOf(enumConstants.contains(memberInfo));
+ }
}
- };
- final MemberSelectionTable table = memberSelectionPanel.getTable();
+ return null;
+ }
+
+ @Override
+ protected boolean isAbstractColumnEditable(int rowIndex) {
+ final MemberInfo info = memberInfo.get(rowIndex);
+ if (info.isChecked()) {
+ final PsiMember member = info.getMember();
+ if (isConstantField(member)) {
+ if (enumConstants.isEmpty()) return true;
+ final MemberInfo currentEnumConstant = enumConstants.get(0);
+ if (((PsiField)currentEnumConstant.getMember()).getType().equals(((PsiField)member).getType())) return true;
+ }
+ }
+ return false;
+ }
+ };
+
table.setMemberInfoModel(new DelegatingMemberInfoModel<PsiMember, MemberInfo>(table.getMemberInfoModel()) {
@Override
@@ -342,6 +336,10 @@ class ExtractClassDialog extends RefactoringDialog implements MemberInfoChangeLi
return cause;
}
});
+
+ final MemberSelectionPanelBase<PsiMember, MemberInfo, MemberSelectionTable> memberSelectionPanel =
+ new MemberSelectionPanelBase<PsiMember, MemberInfo, MemberSelectionTable>(RefactorJBundle.message("members.to.extract.label"), table);
+
panel.add(memberSelectionPanel, BorderLayout.CENTER);
table.addMemberInfoChangeListener(this);
extractAsEnum.addActionListener(new ActionListener() {
diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java
index 223a180a7914..dac214dd0803 100644
--- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java
+++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/AbstractJavaInplaceIntroducer.java
@@ -158,6 +158,9 @@ public abstract class AbstractJavaInplaceIntroducer extends AbstractInplaceIntro
}
if (parent instanceof PsiExpression) {
expression = (PsiExpression)parent;
+ if (expression.getText().equals(exprText)) {
+ return expression;
+ }
} else {
return null;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java
index 3cca01e51a3a..d0c10bafef21 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -153,16 +153,17 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
public boolean checkConflicts(final PullUpDialog dialog) {
- final MemberInfo[] infos = dialog.getSelectedMemberInfos();
+ final List<MemberInfo> infos = dialog.getSelectedMemberInfos();
+ final MemberInfo[] memberInfos = infos.toArray(new MemberInfo[infos.size()]);
final PsiClass superClass = dialog.getSuperClass();
- if (!checkWritable(superClass, infos)) return false;
+ if (!checkWritable(superClass, memberInfos)) return false;
final MultiMap<PsiElement, String> conflicts = new MultiMap<PsiElement, String>();
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
public void run() {
final PsiDirectory targetDirectory = superClass.getContainingFile().getContainingDirectory();
final PsiPackage targetPackage = targetDirectory != null ? JavaDirectoryService.getInstance().getPackage(targetDirectory) : null;
conflicts
- .putAllValues(PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
+ .putAllValues(PullUpConflictsUtil.checkConflicts(memberInfos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
}
}, RefactoringBundle.message("detecting.possible.conflicts"), true, myProject)) return false;
if (!conflicts.isEmpty()) {
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java
index 4d5d8b5b1a59..801612a49055 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpConflictsUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,15 +30,16 @@ import com.intellij.psi.*;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.util.*;
import com.intellij.refactoring.RefactoringBundle;
+import com.intellij.refactoring.classMembers.MemberInfoBase;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.RefactoringConflictsUtil;
import com.intellij.refactoring.util.RefactoringHierarchyUtil;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.refactoring.util.classMembers.ClassMemberReferencesVisitor;
import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier;
-import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.VisibilityUtil;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -51,16 +52,16 @@ import java.util.Set;
public class PullUpConflictsUtil {
private PullUpConflictsUtil() {}
- public static MultiMap<PsiElement, String> checkConflicts(final MemberInfo[] infos,
- PsiClass subclass,
- @Nullable PsiClass superClass,
- @NotNull PsiPackage targetPackage,
- @NotNull PsiDirectory targetDirectory,
- final InterfaceContainmentVerifier interfaceContainmentVerifier) {
+ public static MultiMap<PsiElement, String> checkConflicts(MemberInfoBase<? extends PsiMember>[] infos,
+ PsiClass subclass,
+ @Nullable PsiClass superClass,
+ @NotNull PsiPackage targetPackage,
+ @NotNull PsiDirectory targetDirectory,
+ final InterfaceContainmentVerifier interfaceContainmentVerifier) {
return checkConflicts(infos, subclass, superClass, targetPackage, targetDirectory, interfaceContainmentVerifier, true);
}
- public static MultiMap<PsiElement, String> checkConflicts(final MemberInfo[] infos,
+ public static MultiMap<PsiElement, String> checkConflicts(final MemberInfoBase<? extends PsiMember>[] infos,
@NotNull final PsiClass subclass,
@Nullable PsiClass superClass,
@NotNull final PsiPackage targetPackage,
@@ -79,7 +80,7 @@ public class PullUpConflictsUtil {
isInterfaceTarget = false;
targetRepresentativeElement = targetDirectory;
}
- for (MemberInfo info : infos) {
+ for (MemberInfoBase<? extends PsiMember> info : infos) {
PsiMember member = info.getMember();
if (member instanceof PsiMethod) {
if (!info.isToAbstract() && !isInterfaceTarget) {
@@ -129,15 +130,15 @@ public class PullUpConflictsUtil {
movedMembers2Super? new ConflictingUsagesOfSubClassMembers(member, movedMembers, abstractMethods, subclass, superClass,
superClass != null ? null : targetPackage, conflicts,
interfaceContainmentVerifier)
- : new ConflictingUsagesOfSuperClassMemebers(member, subclass, targetPackage, movedMembers, conflicts);
+ : new ConflictingUsagesOfSuperClassMembers(member, subclass, targetPackage, movedMembers, conflicts);
member.accept(visitor);
}
checkModuleConflictsList.add(member);
}
for (final PsiMethod method : abstractMethods) {
- checkModuleConflictsList.add(method.getParameterList());
- checkModuleConflictsList.add(method.getReturnTypeElement());
- checkModuleConflictsList.add(method.getTypeParameterList());
+ ContainerUtil.addIfNotNull(checkModuleConflictsList, method.getParameterList());
+ ContainerUtil.addIfNotNull(checkModuleConflictsList, method.getReturnTypeElement());
+ ContainerUtil.addIfNotNull(checkModuleConflictsList, method.getTypeParameterList());
}
RefactoringConflictsUtil.analyzeModuleConflicts(subclass.getProject(), checkModuleConflictsList,
new UsageInfo[0], targetRepresentativeElement, conflicts);
@@ -190,8 +191,8 @@ public class PullUpConflictsUtil {
return conflicts;
}
- private static void checkInterfaceTarget(MemberInfo[] infos, MultiMap<PsiElement, String> conflictsList) {
- for (MemberInfo info : infos) {
+ private static void checkInterfaceTarget(MemberInfoBase<? extends PsiMember>[] infos, MultiMap<PsiElement, String> conflictsList) {
+ for (MemberInfoBase<? extends PsiMember> info : infos) {
PsiElement member = info.getMember();
if (member instanceof PsiField || member instanceof PsiClass) {
@@ -214,9 +215,9 @@ public class PullUpConflictsUtil {
}
private static void checkSuperclassMembers(PsiClass superClass,
- MemberInfo[] infos,
+ MemberInfoBase<? extends PsiMember>[] infos,
MultiMap<PsiElement, String> conflictsList) {
- for (MemberInfo info : infos) {
+ for (MemberInfoBase<? extends PsiMember> info : infos) {
PsiMember member = info.getMember();
boolean isConflict = false;
if (member instanceof PsiField) {
@@ -268,7 +269,7 @@ public class PullUpConflictsUtil {
return false;
}
- private static class ConflictingUsagesOfSuperClassMemebers extends ClassMemberReferencesVisitor {
+ private static class ConflictingUsagesOfSuperClassMembers extends ClassMemberReferencesVisitor {
private PsiMember myMember;
private PsiClass mySubClass;
@@ -276,10 +277,10 @@ public class PullUpConflictsUtil {
private Set<PsiMember> myMovedMembers;
private MultiMap<PsiElement, String> myConflicts;
- public ConflictingUsagesOfSuperClassMemebers(PsiMember member, PsiClass aClass,
- PsiPackage targetPackage,
- Set<PsiMember> movedMembers,
- MultiMap<PsiElement, String> conflicts) {
+ public ConflictingUsagesOfSuperClassMembers(PsiMember member, PsiClass aClass,
+ PsiPackage targetPackage,
+ Set<PsiMember> movedMembers,
+ MultiMap<PsiElement, String> conflicts) {
super(aClass);
myMember = member;
mySubClass = aClass;
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpDialog.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpDialog.java
index 526262efaedc..6af5d471aae8 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpDialog.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpDialog.java
@@ -28,43 +28,40 @@ import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.JavaRefactoringSettings;
import com.intellij.refactoring.RefactoringBundle;
-import com.intellij.refactoring.classMembers.MemberInfoChange;
+import com.intellij.refactoring.classMembers.MemberInfoModel;
+import com.intellij.refactoring.ui.AbstractMemberSelectionTable;
import com.intellij.refactoring.ui.ClassCellRenderer;
import com.intellij.refactoring.ui.DocCommentPanel;
-import com.intellij.refactoring.ui.MemberSelectionPanel;
-import com.intellij.refactoring.ui.RefactoringDialog;
+import com.intellij.refactoring.ui.MemberSelectionTable;
import com.intellij.refactoring.util.DocCommentPolicy;
import com.intellij.refactoring.util.RefactoringHierarchyUtil;
import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier;
import com.intellij.refactoring.util.classMembers.MemberInfo;
import com.intellij.refactoring.util.classMembers.MemberInfoStorage;
import com.intellij.refactoring.util.classMembers.UsesAndInterfacesDependencyMemberInfoModel;
-import com.intellij.usageView.UsageViewUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
-import java.util.ArrayList;
import java.util.List;
/**
* @author dsl
* Date: 18.06.2002
*/
-public class PullUpDialog extends RefactoringDialog {
+public class PullUpDialog extends PullUpDialogBase<MemberInfoStorage, MemberInfo, PsiMember, PsiClass> {
private final Callback myCallback;
- private MemberSelectionPanel myMemberSelectionPanel;
- private MyMemberInfoModel myMemberInfoModel;
- private final PsiClass myClass;
- private final List<PsiClass> mySuperClasses;
- private final MemberInfoStorage myMemberInfoStorage;
- private List<MemberInfo> myMemberInfos;
private DocCommentPanel myJavaDocPanel;
- private JComboBox myClassCombo;
+
+ private final InterfaceContainmentVerifier myInterfaceContainmentVerifier = new InterfaceContainmentVerifier() {
+ public boolean checkedInterfacesContain(PsiMethod psiMethod) {
+ return PullUpHelper.checkedInterfacesContain(myMemberInfos, psiMethod);
+ }
+ };
+
private static final String PULL_UP_STATISTICS_KEY = "pull.up##";
public interface Callback {
@@ -72,42 +69,16 @@ public class PullUpDialog extends RefactoringDialog {
}
public PullUpDialog(Project project, PsiClass aClass, List<PsiClass> superClasses, MemberInfoStorage memberInfoStorage, Callback callback) {
- super(project, true);
- myClass = aClass;
- mySuperClasses = superClasses;
- myMemberInfoStorage = memberInfoStorage;
- myMemberInfos = myMemberInfoStorage.getClassMemberInfos(aClass);
+ super(project, aClass, superClasses, memberInfoStorage, JavaPullUpHandler.REFACTORING_NAME);
myCallback = callback;
- setTitle(JavaPullUpHandler.REFACTORING_NAME);
-
init();
}
- @Nullable
- public PsiClass getSuperClass() {
- if (myClassCombo != null) {
- return (PsiClass) myClassCombo.getSelectedItem();
- }
- else {
- return null;
- }
- }
-
public int getJavaDocPolicy() {
return myJavaDocPanel.getPolicy();
}
- public MemberInfo[] getSelectedMemberInfos() {
- ArrayList<MemberInfo> list = new ArrayList<MemberInfo>(myMemberInfos.size());
- for (MemberInfo info : myMemberInfos) {
- if (info.isChecked() && myMemberInfoModel.isMemberEnabled(info)) {
- list.add(info);
- }
- }
- return list.toArray(new MemberInfo[list.size()]);
- }
-
protected String getDimensionServiceKey() {
return "#com.intellij.refactoring.memberPullUp.PullUpDialog";
}
@@ -116,51 +87,23 @@ public class PullUpDialog extends RefactoringDialog {
return myInterfaceContainmentVerifier;
}
- protected JComponent createNorthPanel() {
- JPanel panel = new JPanel();
-
- panel.setLayout(new GridBagLayout());
- GridBagConstraints gbConstraints = new GridBagConstraints();
-
- gbConstraints.insets = new Insets(4, 0, 4, 8);
- gbConstraints.weighty = 1;
- gbConstraints.weightx = 1;
- gbConstraints.gridy = 0;
- gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
- gbConstraints.fill = GridBagConstraints.BOTH;
- gbConstraints.anchor = GridBagConstraints.WEST;
- final JLabel classComboLabel = new JLabel();
- panel.add(classComboLabel, gbConstraints);
-
- myClassCombo = new JComboBox(mySuperClasses.toArray());
- myClassCombo.setRenderer(new ClassCellRenderer(myClassCombo.getRenderer()));
- classComboLabel.setText(RefactoringBundle.message("pull.up.members.to", UsageViewUtil.getLongName(myClass)));
- classComboLabel.setLabelFor(myClassCombo);
- final PsiClass preselection = getPreselection();
- int indexToSelect = 0;
- if (preselection != null) {
- indexToSelect = mySuperClasses.indexOf(preselection);
- }
- myClassCombo.setSelectedIndex(indexToSelect);
- myClassCombo.addItemListener(new ItemListener() {
+ @Override
+ protected void initClassCombo(JComboBox classCombo) {
+ classCombo.setRenderer(new ClassCellRenderer(classCombo.getRenderer()));
+ classCombo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
- updateMemberInfo();
if (myMemberSelectionPanel != null) {
- myMemberInfoModel.setSuperClass(getSuperClass());
+ ((MyMemberInfoModel)myMemberInfoModel).setSuperClass(getSuperClass());
myMemberSelectionPanel.getTable().setMemberInfos(myMemberInfos);
myMemberSelectionPanel.getTable().fireExternalDataChange();
}
}
}
});
- gbConstraints.gridy++;
- panel.add(myClassCombo, gbConstraints);
-
- return panel;
}
- private PsiClass getPreselection() {
+ protected PsiClass getPreselection() {
PsiClass preselection = RefactoringHierarchyUtil.getNearestBaseClass(myClass, false);
final String statKey = PULL_UP_STATISTICS_KEY + myClass.getQualifiedName();
@@ -185,15 +128,6 @@ public class PullUpDialog extends RefactoringDialog {
HelpManager.getInstance().invokeHelp(HelpID.MEMBERS_PULL_UP);
}
- private void updateMemberInfo() {
- final PsiClass targetClass = (PsiClass) myClassCombo.getSelectedItem();
- myMemberInfos = myMemberInfoStorage.getIntermediateMemberInfosList(targetClass);
- /*Set duplicate = myMemberInfoStorage.getDuplicatedMemberInfos(targetClass);
- for (Iterator iterator = duplicate.getSectionsIterator(); getSectionsIterator.hasNext();) {
- ((MemberInfo) iterator.next()).setChecked(false);
- }*/
- }
-
protected void doAction() {
if (!myCallback.checkConflicts(this)) return;
JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC = myJavaDocPanel.getPolicy();
@@ -203,21 +137,15 @@ public class PullUpDialog extends RefactoringDialog {
StatisticsManager
.getInstance().incUseCount(new StatisticsInfo(PULL_UP_STATISTICS_KEY + myClass.getQualifiedName(), name));
}
-
- invokeRefactoring(new PullUpHelper(myClass, superClass, getSelectedMemberInfos(),
+
+ List<MemberInfo> infos = getSelectedMemberInfos();
+ invokeRefactoring(new PullUpHelper(myClass, superClass, infos.toArray(new MemberInfo[infos.size()]),
new DocCommentPolicy(getJavaDocPolicy())));
close(OK_EXIT_CODE);
}
- protected JComponent createCenterPanel() {
- JPanel panel = new JPanel(new BorderLayout());
- myMemberSelectionPanel = new MemberSelectionPanel(RefactoringBundle.message("members.to.be.pulled.up"), myMemberInfos, RefactoringBundle.message("make.abstract"));
- myMemberInfoModel = new MyMemberInfoModel();
- myMemberInfoModel.memberInfoChanged(new MemberInfoChange<PsiMember, MemberInfo>(myMemberInfos));
- myMemberSelectionPanel.getTable().setMemberInfoModel(myMemberInfoModel);
- myMemberSelectionPanel.getTable().addMemberInfoChangeListener(myMemberInfoModel);
- panel.add(myMemberSelectionPanel, BorderLayout.CENTER);
-
+ @Override
+ protected void addCustomElementsToCentralPanel(JPanel panel) {
myJavaDocPanel = new DocCommentPanel(RefactoringBundle.message("javadoc.for.abstracts"));
myJavaDocPanel.setPolicy(JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC);
boolean hasJavadoc = false;
@@ -233,14 +161,17 @@ public class PullUpDialog extends RefactoringDialog {
}
UIUtil.setEnabled(myJavaDocPanel, hasJavadoc, true);
panel.add(myJavaDocPanel, BorderLayout.EAST);
- return panel;
}
- private final InterfaceContainmentVerifier myInterfaceContainmentVerifier =
- new InterfaceContainmentVerifier() {
- public boolean checkedInterfacesContain(PsiMethod psiMethod) {
- return PullUpHelper.checkedInterfacesContain(myMemberInfos, psiMethod);
- }
- };
+
+ @Override
+ protected AbstractMemberSelectionTable<PsiMember, MemberInfo> createMemberSelectionTable(List<MemberInfo> infos) {
+ return new MemberSelectionTable(infos, RefactoringBundle.message("make.abstract"));
+ }
+
+ @Override
+ protected MemberInfoModel<PsiMember, MemberInfo> createMemberInfoModel() {
+ return new MyMemberInfoModel();
+ }
private class MyMemberInfoModel extends UsesAndInterfacesDependencyMemberInfoModel {
public MyMemberInfoModel() {
@@ -296,11 +227,9 @@ public class PullUpDialog extends RefactoringDialog {
PsiClass currentSuperClass = getSuperClass();
if (currentSuperClass != null && currentSuperClass.isInterface()) {
- PsiElement element = member.getMember();
- if (element instanceof PsiModifierListOwner) {
- if (((PsiModifierListOwner) element).hasModifierProperty(PsiModifier.STATIC)) {
- return super.checkForProblems(member);
- }
+ PsiMember element = member.getMember();
+ if (element.hasModifierProperty(PsiModifier.STATIC)) {
+ return super.checkForProblems(member);
}
return OK;
}
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java
index ea230e3517ce..bde3f6cfd5f2 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpHelper.java
@@ -47,6 +47,7 @@ import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.*;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.RefactoringBundle;
+import com.intellij.refactoring.classMembers.MemberInfoBase;
import com.intellij.refactoring.listeners.JavaRefactoringListenerManager;
import com.intellij.refactoring.listeners.impl.JavaRefactoringListenerManagerImpl;
import com.intellij.refactoring.util.*;
@@ -67,7 +68,7 @@ import java.util.*;
public class PullUpHelper extends BaseRefactoringProcessor{
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.memberPullUp.PullUpHelper");
- private static final Key<Boolean> PRESERVE_QUALIFIER = Key.<Boolean>create("PRESERVE_QUALIFIER");
+ private static final Key<Boolean> PRESERVE_QUALIFIER = Key.create("PRESERVE_QUALIFIER");
private final PsiClass mySourceClass;
private final PsiClass myTargetSuperClass;
private final boolean myIsTargetInterface;
@@ -169,158 +170,22 @@ public class PullUpHelper extends BaseRefactoringProcessor{
// correct private member visibility
for (MemberInfo info : myMembersToMove) {
if (info.getMember() instanceof PsiClass && info.getOverrides() != null) continue;
- PsiModifierListOwner modifierListOwner = info.getMember();
- if (myIsTargetInterface) {
- PsiUtil.setModifierProperty(modifierListOwner, PsiModifier.PUBLIC, true);
- }
- else if (modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE)) {
- if (info.isToAbstract() || willBeUsedInSubclass(modifierListOwner, movedMembers, myTargetSuperClass, mySourceClass)) {
- PsiUtil.setModifierProperty(modifierListOwner, PsiModifier.PROTECTED, true);
- }
- if (modifierListOwner instanceof PsiClass) {
- modifierListOwner.accept(new JavaRecursiveElementWalkingVisitor() {
- @Override
- public void visitMethod(PsiMethod method) {
- check(method);
- }
-
- @Override
- public void visitField(PsiField field) {
- check(field);
- }
-
- @Override
- public void visitClass(PsiClass aClass) {
- check(aClass);
- super.visitClass(aClass);
- }
-
- private void check(PsiMember member) {
- if (member.hasModifierProperty(PsiModifier.PRIVATE)) {
- if (willBeUsedInSubclass(member, movedMembers, myTargetSuperClass, mySourceClass)) {
- PsiUtil.setModifierProperty(member, PsiModifier.PROTECTED, true);
- }
- }
- }
- });
- }
- }
+ setCorrectVisibility(movedMembers, info);
ChangeContextUtil.encodeContextInfo(info.getMember(), true);
}
final PsiSubstitutor substitutor = upDownSuperClassSubstitutor();
- final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(myProject);
// do actual move
for (MemberInfo info : myMembersToMove) {
if (info.getMember() instanceof PsiMethod) {
- PsiMethod method = (PsiMethod)info.getMember();
- PsiMethod sibling = method;
- PsiMethod anchor = null;
- while (sibling != null) {
- sibling = PsiTreeUtil.getNextSiblingOfType(sibling, PsiMethod.class);
- if (sibling != null) {
- anchor = MethodSignatureUtil
- .findMethodInSuperClassBySignatureInDerived(method.getContainingClass(), myTargetSuperClass,
- sibling.getSignature(PsiSubstitutor.EMPTY), false);
- if (anchor != null) {
- break;
- }
- }
- }
- PsiMethod methodCopy = (PsiMethod)method.copy();
- if (method.findSuperMethods(myTargetSuperClass).length == 0) {
- deleteOverrideAnnotationIfFound(methodCopy);
- }
- boolean isOriginalMethodAbstract = method.hasModifierProperty(PsiModifier.ABSTRACT) || method.hasModifierProperty(PsiModifier.DEFAULT);
- if (myIsTargetInterface || info.isToAbstract()) {
- ChangeContextUtil.clearContextInfo(method);
-
- if (!info.isToAbstract() && !method.hasModifierProperty(PsiModifier.ABSTRACT) && PsiUtil.isLanguageLevel8OrHigher(myTargetSuperClass)) {
- //pull as default
- RefactoringUtil.makeMethodDefault(methodCopy);
- isOriginalMethodAbstract = true;
- } else {
- RefactoringUtil.makeMethodAbstract(myTargetSuperClass, methodCopy);
- }
-
- RefactoringUtil.replaceMovedMemberTypeParameters(methodCopy, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
-
- myJavaDocPolicy.processCopiedJavaDoc(methodCopy.getDocComment(), method.getDocComment(), isOriginalMethodAbstract);
-
- final PsiMember movedElement = anchor != null ? (PsiMember)myTargetSuperClass.addBefore(methodCopy, anchor) : (PsiMember)myTargetSuperClass.add(methodCopy);
- CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(method.getProject());
- if (styleSettings.INSERT_OVERRIDE_ANNOTATION) {
- if (PsiUtil.isLanguageLevel5OrHigher(mySourceClass) && !myTargetSuperClass.isInterface() || PsiUtil.isLanguageLevel6OrHigher(mySourceClass)) {
- new AddAnnotationFix(Override.class.getName(), method).invoke(method.getProject(), null, mySourceClass.getContainingFile());
- }
- }
- if (!PsiUtil.isLanguageLevel6OrHigher(mySourceClass) && myTargetSuperClass.isInterface()) {
- if (isOriginalMethodAbstract) {
- for (PsiMethod oMethod : OverridingMethodsSearch.search(method)) {
- deleteOverrideAnnotationIfFound(oMethod);
- }
- }
- deleteOverrideAnnotationIfFound(method);
- }
- myMembersAfterMove.add(movedElement);
- if (isOriginalMethodAbstract) {
- method.delete();
- }
- }
- else {
- if (isOriginalMethodAbstract) {
- PsiUtil.setModifierProperty(myTargetSuperClass, PsiModifier.ABSTRACT, true);
- }
- RefactoringUtil.replaceMovedMemberTypeParameters(methodCopy, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
- fixReferencesToStatic(methodCopy, movedMembers);
- final PsiMethod superClassMethod = myTargetSuperClass.findMethodBySignature(methodCopy, false);
- if (superClassMethod != null && superClassMethod.hasModifierProperty(PsiModifier.ABSTRACT)) {
- superClassMethod.replace(methodCopy);
- }
- else {
- final PsiMember movedElement =
- anchor != null ? (PsiMember)myTargetSuperClass.addBefore(methodCopy, anchor) : (PsiMember)myTargetSuperClass.add(methodCopy);
- myMembersAfterMove.add(movedElement);
- }
- method.delete();
- }
+ doMoveMethod(movedMembers, substitutor, info);
}
else if (info.getMember() instanceof PsiField) {
- PsiField field = (PsiField)info.getMember();
- field.normalizeDeclaration();
- RefactoringUtil.replaceMovedMemberTypeParameters(field, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
- fixReferencesToStatic(field, movedMembers);
- if (myIsTargetInterface) {
- PsiUtil.setModifierProperty(field, PsiModifier.PUBLIC, true);
- }
- final PsiMember movedElement = (PsiMember)myTargetSuperClass.add(field);
- myMembersAfterMove.add(movedElement);
- field.delete();
+ doMoveField(movedMembers, substitutor, info);
}
else if (info.getMember() instanceof PsiClass) {
- PsiClass aClass = (PsiClass)info.getMember();
- if (Boolean.FALSE.equals(info.getOverrides())) {
- final PsiReferenceList sourceReferenceList = info.getSourceReferenceList();
- LOG.assertTrue(sourceReferenceList != null);
- PsiJavaCodeReferenceElement ref = mySourceClass.equals(sourceReferenceList.getParent()) ?
- RefactoringUtil.removeFromReferenceList(sourceReferenceList, aClass) :
- RefactoringUtil.findReferenceToClass(sourceReferenceList, aClass);
- if (ref != null && !myTargetSuperClass.isInheritor(aClass, false)) {
- RefactoringUtil.replaceMovedMemberTypeParameters(ref, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
- final PsiReferenceList referenceList =
- myTargetSuperClass.isInterface() ? myTargetSuperClass.getExtendsList() : myTargetSuperClass.getImplementsList();
- assert referenceList != null;
- referenceList.add(ref);
- }
- }
- else {
- RefactoringUtil.replaceMovedMemberTypeParameters(aClass, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
- fixReferencesToStatic(aClass, movedMembers);
- final PsiMember movedElement = (PsiMember)myTargetSuperClass.add(aClass);
- myMembersAfterMove.add(movedElement);
- aClass.delete();
- }
+ doMoveClass(movedMembers, substitutor, info);
}
}
@@ -357,6 +222,160 @@ public class PullUpHelper extends BaseRefactoringProcessor{
}
}
+ private void setCorrectVisibility(final Set<PsiMember> movedMembers, MemberInfo info) {
+ PsiModifierListOwner modifierListOwner = info.getMember();
+ if (myIsTargetInterface) {
+ PsiUtil.setModifierProperty(modifierListOwner, PsiModifier.PUBLIC, true);
+ }
+ else if (modifierListOwner.hasModifierProperty(PsiModifier.PRIVATE)) {
+ if (info.isToAbstract() || willBeUsedInSubclass(modifierListOwner, movedMembers, myTargetSuperClass, mySourceClass)) {
+ PsiUtil.setModifierProperty(modifierListOwner, PsiModifier.PROTECTED, true);
+ }
+ if (modifierListOwner instanceof PsiClass) {
+ modifierListOwner.accept(new JavaRecursiveElementWalkingVisitor() {
+ @Override
+ public void visitMethod(PsiMethod method) {
+ check(method);
+ }
+
+ @Override
+ public void visitField(PsiField field) {
+ check(field);
+ }
+
+ @Override
+ public void visitClass(PsiClass aClass) {
+ check(aClass);
+ super.visitClass(aClass);
+ }
+
+ private void check(PsiMember member) {
+ if (member.hasModifierProperty(PsiModifier.PRIVATE)) {
+ if (willBeUsedInSubclass(member, movedMembers, myTargetSuperClass, mySourceClass)) {
+ PsiUtil.setModifierProperty(member, PsiModifier.PROTECTED, true);
+ }
+ }
+ }
+ });
+ }
+ }
+ }
+
+ private void doMoveClass(Set<PsiMember> movedMembers, PsiSubstitutor substitutor, MemberInfo info) {
+ PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(myProject);
+ PsiClass aClass = (PsiClass)info.getMember();
+ if (Boolean.FALSE.equals(info.getOverrides())) {
+ final PsiReferenceList sourceReferenceList = info.getSourceReferenceList();
+ LOG.assertTrue(sourceReferenceList != null);
+ PsiJavaCodeReferenceElement ref = mySourceClass.equals(sourceReferenceList.getParent()) ?
+ RefactoringUtil.removeFromReferenceList(sourceReferenceList, aClass) :
+ RefactoringUtil.findReferenceToClass(sourceReferenceList, aClass);
+ if (ref != null && !myTargetSuperClass.isInheritor(aClass, false)) {
+ RefactoringUtil.replaceMovedMemberTypeParameters(ref, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
+ final PsiReferenceList referenceList =
+ myTargetSuperClass.isInterface() ? myTargetSuperClass.getExtendsList() : myTargetSuperClass.getImplementsList();
+ assert referenceList != null;
+ referenceList.add(ref);
+ }
+ }
+ else {
+ RefactoringUtil.replaceMovedMemberTypeParameters(aClass, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
+ fixReferencesToStatic(aClass, movedMembers);
+ final PsiMember movedElement = (PsiMember)myTargetSuperClass.add(aClass);
+ myMembersAfterMove.add(movedElement);
+ aClass.delete();
+ }
+ }
+
+ private void doMoveField(Set<PsiMember> movedMembers, PsiSubstitutor substitutor, MemberInfo info) {
+ PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(myProject);
+ PsiField field = (PsiField)info.getMember();
+ field.normalizeDeclaration();
+ RefactoringUtil.replaceMovedMemberTypeParameters(field, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
+ fixReferencesToStatic(field, movedMembers);
+ if (myIsTargetInterface) {
+ PsiUtil.setModifierProperty(field, PsiModifier.PUBLIC, true);
+ }
+ final PsiMember movedElement = (PsiMember)myTargetSuperClass.add(field);
+ myMembersAfterMove.add(movedElement);
+ field.delete();
+ }
+
+ private void doMoveMethod(Set<PsiMember> movedMembers, PsiSubstitutor substitutor, MemberInfo info) {
+ PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(myProject);
+ PsiMethod method = (PsiMethod)info.getMember();
+ PsiMethod sibling = method;
+ PsiMethod anchor = null;
+ while (sibling != null) {
+ sibling = PsiTreeUtil.getNextSiblingOfType(sibling, PsiMethod.class);
+ if (sibling != null) {
+ anchor = MethodSignatureUtil
+ .findMethodInSuperClassBySignatureInDerived(method.getContainingClass(), myTargetSuperClass,
+ sibling.getSignature(PsiSubstitutor.EMPTY), false);
+ if (anchor != null) {
+ break;
+ }
+ }
+ }
+ PsiMethod methodCopy = (PsiMethod)method.copy();
+ if (method.findSuperMethods(myTargetSuperClass).length == 0) {
+ deleteOverrideAnnotationIfFound(methodCopy);
+ }
+ boolean isOriginalMethodAbstract = method.hasModifierProperty(PsiModifier.ABSTRACT) || method.hasModifierProperty(PsiModifier.DEFAULT);
+ if (myIsTargetInterface || info.isToAbstract()) {
+ ChangeContextUtil.clearContextInfo(method);
+
+ if (!info.isToAbstract() && !method.hasModifierProperty(PsiModifier.ABSTRACT) && PsiUtil.isLanguageLevel8OrHigher(myTargetSuperClass)) {
+ //pull as default
+ RefactoringUtil.makeMethodDefault(methodCopy);
+ isOriginalMethodAbstract = true;
+ } else {
+ RefactoringUtil.makeMethodAbstract(myTargetSuperClass, methodCopy);
+ }
+
+ RefactoringUtil.replaceMovedMemberTypeParameters(methodCopy, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
+
+ myJavaDocPolicy.processCopiedJavaDoc(methodCopy.getDocComment(), method.getDocComment(), isOriginalMethodAbstract);
+
+ final PsiMember movedElement = anchor != null ? (PsiMember)myTargetSuperClass.addBefore(methodCopy, anchor) : (PsiMember)myTargetSuperClass.add(methodCopy);
+ CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(method.getProject());
+ if (styleSettings.INSERT_OVERRIDE_ANNOTATION) {
+ if (PsiUtil.isLanguageLevel5OrHigher(mySourceClass) && !myTargetSuperClass.isInterface() || PsiUtil.isLanguageLevel6OrHigher(mySourceClass)) {
+ new AddAnnotationFix(Override.class.getName(), method).invoke(method.getProject(), null, mySourceClass.getContainingFile());
+ }
+ }
+ if (!PsiUtil.isLanguageLevel6OrHigher(mySourceClass) && myTargetSuperClass.isInterface()) {
+ if (isOriginalMethodAbstract) {
+ for (PsiMethod oMethod : OverridingMethodsSearch.search(method)) {
+ deleteOverrideAnnotationIfFound(oMethod);
+ }
+ }
+ deleteOverrideAnnotationIfFound(method);
+ }
+ myMembersAfterMove.add(movedElement);
+ if (isOriginalMethodAbstract) {
+ method.delete();
+ }
+ }
+ else {
+ if (isOriginalMethodAbstract) {
+ PsiUtil.setModifierProperty(myTargetSuperClass, PsiModifier.ABSTRACT, true);
+ }
+ RefactoringUtil.replaceMovedMemberTypeParameters(methodCopy, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
+ fixReferencesToStatic(methodCopy, movedMembers);
+ final PsiMethod superClassMethod = myTargetSuperClass.findMethodBySignature(methodCopy, false);
+ if (superClassMethod != null && superClassMethod.hasModifierProperty(PsiModifier.ABSTRACT)) {
+ superClassMethod.replace(methodCopy);
+ }
+ else {
+ final PsiMember movedElement =
+ anchor != null ? (PsiMember)myTargetSuperClass.addBefore(methodCopy, anchor) : (PsiMember)myTargetSuperClass.add(methodCopy);
+ myMembersAfterMove.add(movedElement);
+ }
+ method.delete();
+ }
+ }
+
private PsiSubstitutor upDownSuperClassSubstitutor() {
PsiSubstitutor substitutor = PsiSubstitutor.EMPTY;
for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable(mySourceClass)) {
@@ -909,8 +928,8 @@ public class PullUpHelper extends BaseRefactoringProcessor{
return false;
}
- public static boolean checkedInterfacesContain(Collection<MemberInfo> memberInfos, PsiMethod psiMethod) {
- for (MemberInfo memberInfo : memberInfos) {
+ public static boolean checkedInterfacesContain(Collection<? extends MemberInfoBase<? extends PsiMember>> memberInfos, PsiMethod psiMethod) {
+ for (MemberInfoBase<? extends PsiMember> memberInfo : memberInfos) {
if (memberInfo.isChecked() &&
memberInfo.getMember() instanceof PsiClass &&
Boolean.FALSE.equals(memberInfo.getOverrides())) {
diff --git a/java/java-impl/src/com/intellij/refactoring/ui/AbstractMemberSelectionPanel.java b/java/java-impl/src/com/intellij/refactoring/ui/AbstractMemberSelectionPanel.java
deleted file mode 100644
index 0e9397ad40f2..000000000000
--- a/java/java-impl/src/com/intellij/refactoring/ui/AbstractMemberSelectionPanel.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.intellij.refactoring.ui;
-
-import com.intellij.psi.PsiElement;
-import com.intellij.refactoring.classMembers.MemberInfoBase;
-
-import javax.swing.*;
-
-/**
- * Nikolay.Tropin
- * 8/20/13
- */
-public abstract class AbstractMemberSelectionPanel<T extends PsiElement, M extends MemberInfoBase<T>> extends JPanel {
- public abstract AbstractMemberSelectionTable<T, M> getTable();
-}
diff --git a/java/java-impl/src/com/intellij/refactoring/ui/MemberSelectionPanel.java b/java/java-impl/src/com/intellij/refactoring/ui/MemberSelectionPanel.java
index c503a86e9c39..28e0a8800aba 100644
--- a/java/java-impl/src/com/intellij/refactoring/ui/MemberSelectionPanel.java
+++ b/java/java-impl/src/com/intellij/refactoring/ui/MemberSelectionPanel.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/java/java-impl/src/com/intellij/slicer/DuplicateMap.java b/java/java-impl/src/com/intellij/slicer/DuplicateMap.java
index a57dc5f31cb7..426efd11a50a 100644
--- a/java/java-impl/src/com/intellij/slicer/DuplicateMap.java
+++ b/java/java-impl/src/com/intellij/slicer/DuplicateMap.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.usageView.UsageInfo;
import gnu.trove.THashMap;
import gnu.trove.TObjectHashingStrategy;
+import org.jetbrains.annotations.NotNull;
import java.util.Map;
@@ -43,7 +44,7 @@ public class DuplicateMap {
};
private final Map<SliceUsage, SliceNode> myDuplicates = new THashMap<SliceUsage, SliceNode>(USAGE_INFO_EQUALITY);
- public SliceNode putNodeCheckDupe(final SliceNode node) {
+ public SliceNode putNodeCheckDupe(@NotNull final SliceNode node) {
return ApplicationManager.getApplication().runReadAction(new Computable<SliceNode>() {
@Override
public SliceNode compute() {
diff --git a/java/java-impl/src/com/intellij/slicer/MyColoredTreeCellRenderer.java b/java/java-impl/src/com/intellij/slicer/MyColoredTreeCellRenderer.java
index 0e313733653c..c150e0fd8674 100644
--- a/java/java-impl/src/com/intellij/slicer/MyColoredTreeCellRenderer.java
+++ b/java/java-impl/src/com/intellij/slicer/MyColoredTreeCellRenderer.java
@@ -15,12 +15,20 @@
*/
package com.intellij.slicer;
+import org.jetbrains.annotations.NotNull;
+
import javax.swing.*;
/**
* @author cdr
*/
public interface MyColoredTreeCellRenderer {
- void customizeCellRenderer(SliceUsageCellRenderer renderer,
- JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus);
+ void customizeCellRenderer(@NotNull SliceUsageCellRenderer renderer,
+ @NotNull JTree tree,
+ Object value,
+ boolean selected,
+ boolean expanded,
+ boolean leaf,
+ int row,
+ boolean hasFocus);
}
diff --git a/java/java-impl/src/com/intellij/slicer/SliceDereferenceUsage.java b/java/java-impl/src/com/intellij/slicer/SliceDereferenceUsage.java
index 106671f22652..8578c91b1a7a 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceDereferenceUsage.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceDereferenceUsage.java
@@ -33,7 +33,7 @@ public class SliceDereferenceUsage extends SliceUsage {
}
@Override
- public void processChildren(Processor<SliceUsage> processor) {
+ public void processChildren(@NotNull Processor<SliceUsage> processor) {
// no children
}
diff --git a/java/java-impl/src/com/intellij/slicer/forward/SliceFUtil.java b/java/java-impl/src/com/intellij/slicer/SliceForwardUtil.java
index ef701971c0d3..364b8539c012 100644
--- a/java/java-impl/src/com/intellij/slicer/forward/SliceFUtil.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceForwardUtil.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.intellij.slicer.forward;
+package com.intellij.slicer;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.*;
@@ -22,10 +22,6 @@ import com.intellij.psi.search.searches.OverridingMethodsSearch;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.slicer.SliceDereferenceUsage;
-import com.intellij.slicer.SliceManager;
-import com.intellij.slicer.SliceUsage;
-import com.intellij.slicer.SliceUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Processor;
import gnu.trove.THashSet;
@@ -40,7 +36,7 @@ import java.util.Set;
/**
* @author cdr
*/
-public class SliceFUtil {
+public class SliceForwardUtil {
public static boolean processUsagesFlownFromThe(@NotNull PsiElement element, @NotNull final Processor<SliceUsage> processor, @NotNull final SliceUsage parent) {
Pair<PsiElement, PsiSubstitutor> pair = getAssignmentTarget(element, parent);
if (pair != null) {
diff --git a/java/java-impl/src/com/intellij/slicer/SliceLeafValueClassNode.java b/java/java-impl/src/com/intellij/slicer/SliceLeafValueClassNode.java
index 630d1cd483e4..e73da4154084 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceLeafValueClassNode.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceLeafValueClassNode.java
@@ -44,8 +44,8 @@ public class SliceLeafValueClassNode extends SliceLeafValueRootNode {
}
@Override
- public void customizeCellRenderer(SliceUsageCellRenderer renderer,
- JTree tree,
+ public void customizeCellRenderer(@NotNull SliceUsageCellRenderer renderer,
+ @NotNull JTree tree,
Object value,
boolean selected,
boolean expanded,
diff --git a/java/java-impl/src/com/intellij/slicer/SliceLeafValueRootNode.java b/java/java-impl/src/com/intellij/slicer/SliceLeafValueRootNode.java
index a6a403053284..dee98f84da84 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceLeafValueRootNode.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceLeafValueRootNode.java
@@ -40,7 +40,7 @@ public class SliceLeafValueRootNode extends SliceNode implements MyColoredTreeCe
public SliceLeafValueRootNode(@NotNull Project project, PsiElement leafExpression, SliceNode root, List<SliceNode> children,
SliceAnalysisParams params) {
- super(project, new SliceUsage(leafExpression, params), root.targetEqualUsages);
+ super(project, SliceUsage.createRootUsage(leafExpression, params), root.targetEqualUsages);
myCachedChildren = children;
}
@@ -69,8 +69,8 @@ public class SliceLeafValueRootNode extends SliceNode implements MyColoredTreeCe
}
@Override
- public void customizeCellRenderer(SliceUsageCellRenderer renderer,
- JTree tree,
+ public void customizeCellRenderer(@NotNull SliceUsageCellRenderer renderer,
+ @NotNull JTree tree,
Object value,
boolean selected,
boolean expanded,
@@ -99,8 +99,9 @@ public class SliceLeafValueRootNode extends SliceNode implements MyColoredTreeCe
@NotNull final SliceUsageCellRenderer renderer) {
PsiFile file = element.getContainingFile();
List<TextChunk> result = new ArrayList<TextChunk>();
- ChunkExtractor.getExtractor(element.getContainingFile()).createTextChunks(usage, file.getText(), element.getTextRange().getStartOffset(), element.getTextRange().getEndOffset(),
- false, result);
+ ChunkExtractor.getExtractor(element.getContainingFile())
+ .createTextChunks(usage, file.getText(), element.getTextRange().getStartOffset(), element.getTextRange().getEndOffset(),
+ false, result);
for (TextChunk chunk : result) {
renderer.append(chunk.getText(), chunk.getSimpleAttributesIgnoreBackground());
diff --git a/java/java-impl/src/com/intellij/slicer/SliceManager.java b/java/java-impl/src/com/intellij/slicer/SliceManager.java
index eee7e968bad3..42cac2587988 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceManager.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceManager.java
@@ -124,7 +124,7 @@ public class SliceManager implements PersistentStateComponent<SliceManager.Store
SliceAnalysisParams params = handler.askForParams(element, dataFlowToThis, myStoredSettings, dialogTitle);
if (params == null) return;
- SliceRootNode rootNode = new SliceRootNode(myProject, new DuplicateMap(), createRootUsage(element, params));
+ SliceRootNode rootNode = new SliceRootNode(myProject, new DuplicateMap(), SliceUsage.createRootUsage(element, params));
createToolWindow(dataFlowToThis, rootNode, false, getElementDescription(null, element, null));
}
@@ -179,10 +179,6 @@ public class SliceManager implements PersistentStateComponent<SliceManager.Store
"</body></html>";
}
- public static SliceUsage createRootUsage(@NotNull PsiElement element, @NotNull SliceAnalysisParams params) {
- return new SliceUsage(element, params);
- }
-
public void checkCanceled() throws ProcessCanceledException {
if (myCanceled) {
throw new ProcessCanceledException();
diff --git a/java/java-impl/src/com/intellij/slicer/SliceNode.java b/java/java-impl/src/com/intellij/slicer/SliceNode.java
index df114e5f9751..cd79d797e2c0 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceNode.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceNode.java
@@ -20,7 +20,6 @@ import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
-import com.intellij.openapi.progress.impl.ProgressManagerImpl;
import com.intellij.openapi.progress.util.ProgressIndicatorBase;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
@@ -52,6 +51,7 @@ public class SliceNode extends AbstractTreeNode<SliceUsage> implements Duplicate
this.targetEqualUsages = targetEqualUsages;
}
+ @NotNull
SliceNode copy() {
SliceUsage newUsage = getValue().copy();
SliceNode newNode = new SliceNode(getProject(), newUsage, targetEqualUsages);
@@ -69,7 +69,7 @@ public class SliceNode extends AbstractTreeNode<SliceUsage> implements Duplicate
indicator.start();
}
final Collection[] nodes = new Collection[1];
- ((ProgressManagerImpl)ProgressManager.getInstance()).executeProcessUnderProgress(new Runnable(){
+ ProgressManager.getInstance().executeProcessUnderProgress(new Runnable() {
@Override
public void run() {
nodes[0] = getChildrenUnderProgress(ProgressManager.getInstance().getProgressIndicator());
@@ -89,6 +89,7 @@ public class SliceNode extends AbstractTreeNode<SliceUsage> implements Duplicate
return index == 0 ? null : (SliceNode)parentChildren.get(index - 1);
}
+ @NotNull
protected List<? extends AbstractTreeNode> getChildrenUnderProgress(ProgressIndicator progress) {
if (isUpToDate()) return myCachedChildren == null ? Collections.<AbstractTreeNode>emptyList() : myCachedChildren;
final List<SliceNode> children = new ArrayList<SliceNode>();
@@ -208,7 +209,7 @@ public class SliceNode extends AbstractTreeNode<SliceUsage> implements Duplicate
}
@Override
- public void customizeCellRenderer(SliceUsageCellRenderer renderer, JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+ public void customizeCellRenderer(@NotNull SliceUsageCellRenderer renderer, @NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
renderer.setIcon(getPresentation().getIcon(expanded));
if (isValid()) {
SliceUsage sliceUsage = getValue();
@@ -227,6 +228,7 @@ public class SliceNode extends AbstractTreeNode<SliceUsage> implements Duplicate
@Override
public String toString() {
return ApplicationManager.getApplication().runReadAction(new Computable<String>() {
+ @Override
public String compute() {
return getValue()==null?"<null>":getValue().toString();
}
diff --git a/java/java-impl/src/com/intellij/slicer/SlicePanel.java b/java/java-impl/src/com/intellij/slicer/SlicePanel.java
index 7c4000378427..78e8a3e95916 100644
--- a/java/java-impl/src/com/intellij/slicer/SlicePanel.java
+++ b/java/java-impl/src/com/intellij/slicer/SlicePanel.java
@@ -189,13 +189,13 @@ public abstract class SlicePanel extends JPanel implements TypeSafeDataProvider,
@NotNull
private JTree createTree() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
- final Tree tree = new Tree(new DefaultTreeModel(root)){
+ final Tree tree = new Tree(new DefaultTreeModel(root))/* {
@Override
protected void paintComponent(Graphics g) {
DuplicateNodeRenderer.paintDuplicateNodesBackground(g, this);
super.paintComponent(g);
}
- };
+ }*/;
tree.setOpaque(false);
tree.setToggleClickCount(-1);
diff --git a/java/java-impl/src/com/intellij/slicer/SliceRootNode.java b/java/java-impl/src/com/intellij/slicer/SliceRootNode.java
index 5f1a915f6d93..e7b6f1d2529e 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceRootNode.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceRootNode.java
@@ -33,7 +33,7 @@ public class SliceRootNode extends SliceNode {
private final SliceUsage myRootUsage;
public SliceRootNode(@NotNull Project project, @NotNull DuplicateMap targetEqualUsages, final SliceUsage rootUsage) {
- super(project, new SliceUsage(rootUsage.getElement().getContainingFile(), rootUsage.params), targetEqualUsages);
+ super(project, SliceUsage.createRootUsage(rootUsage.getElement().getContainingFile(), rootUsage.params), targetEqualUsages);
myRootUsage = rootUsage;
}
@@ -42,6 +42,7 @@ public class SliceRootNode extends SliceNode {
myCachedChildren = Collections.singletonList(node);
}
+ @NotNull
@Override
SliceRootNode copy() {
SliceUsage newUsage = getValue().copy();
@@ -60,6 +61,7 @@ public class SliceRootNode extends SliceNode {
return myCachedChildren;
}
+ @NotNull
@Override
public List<? extends AbstractTreeNode> getChildrenUnderProgress(ProgressIndicator progress) {
return (List<? extends AbstractTreeNode>)getChildren();
@@ -80,8 +82,8 @@ public class SliceRootNode extends SliceNode {
@Override
- public void customizeCellRenderer(SliceUsageCellRenderer renderer,
- JTree tree,
+ public void customizeCellRenderer(@NotNull SliceUsageCellRenderer renderer,
+ @NotNull JTree tree,
Object value,
boolean selected,
boolean expanded,
diff --git a/java/java-impl/src/com/intellij/slicer/SliceTooComplexDFAUsage.java b/java/java-impl/src/com/intellij/slicer/SliceTooComplexDFAUsage.java
index 89360c028f74..de150dde817a 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceTooComplexDFAUsage.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceTooComplexDFAUsage.java
@@ -37,7 +37,7 @@ public class SliceTooComplexDFAUsage extends SliceUsage {
}
@Override
- public void processChildren(Processor<SliceUsage> processor) {
+ public void processChildren(@NotNull Processor<SliceUsage> processor) {
// no children
}
diff --git a/java/java-impl/src/com/intellij/slicer/SliceUsage.java b/java/java-impl/src/com/intellij/slicer/SliceUsage.java
index 21a849068ba9..0942dcc862a0 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceUsage.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceUsage.java
@@ -21,7 +21,6 @@ import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiSubstitutor;
-import com.intellij.slicer.forward.SliceFUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.usages.UsageInfo2UsageAdapter;
import com.intellij.util.CommonProcessors;
@@ -44,14 +43,18 @@ public class SliceUsage extends UsageInfo2UsageAdapter {
params = parent.params;
assert params != null;
}
- public SliceUsage(@NotNull PsiElement element, @NotNull SliceAnalysisParams params) {
+ private SliceUsage(@NotNull PsiElement element, @NotNull SliceAnalysisParams params) {
super(new UsageInfo(element));
myParent = null;
this.params = params;
mySubstitutor = PsiSubstitutor.EMPTY;
}
- public void processChildren(Processor<SliceUsage> processor) {
+ public static SliceUsage createRootUsage(@NotNull PsiElement element, @NotNull SliceAnalysisParams params) {
+ return new SliceUsage(element, params);
+ }
+
+ public void processChildren(@NotNull Processor<SliceUsage> processor) {
final PsiElement element = getElement();
ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
indicator.checkCanceled();
@@ -76,7 +79,7 @@ public class SliceUsage extends UsageInfo2UsageAdapter {
SliceUtil.processUsagesFlownDownTo(element, uniqueProcessor, SliceUsage.this, mySubstitutor);
}
else {
- SliceFUtil.processUsagesFlownFromThe(element, uniqueProcessor, SliceUsage.this);
+ SliceForwardUtil.processUsagesFlownFromThe(element, uniqueProcessor, SliceUsage.this);
}
}
});
@@ -93,7 +96,7 @@ public class SliceUsage extends UsageInfo2UsageAdapter {
SliceUsage copy() {
PsiElement element = getUsageInfo().getElement();
- return getParent() == null ? new SliceUsage(element, params) : new SliceUsage(element, getParent(),mySubstitutor);
+ return getParent() == null ? createRootUsage(element, params) : new SliceUsage(element, getParent(),mySubstitutor);
}
public PsiSubstitutor getSubstitutor() {
diff --git a/java/java-impl/src/com/intellij/slicer/SliceUsageCellRenderer.java b/java/java-impl/src/com/intellij/slicer/SliceUsageCellRenderer.java
index d2fdf1a7b187..c12f62e669b7 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceUsageCellRenderer.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceUsageCellRenderer.java
@@ -18,12 +18,14 @@ package com.intellij.slicer;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiFormatUtil;
+import com.intellij.psi.util.PsiFormatUtilBase;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
import com.intellij.usageView.UsageTreeColors;
import com.intellij.usageView.UsageTreeColorsScheme;
import com.intellij.usages.TextChunk;
+import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
@@ -41,7 +43,7 @@ public class SliceUsageCellRenderer extends ColoredTreeCellRenderer {
}
@Override
- public void customizeCellRenderer(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+ public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
assert value instanceof DefaultMutableTreeNode;
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)value;
Object userObject = treeNode.getUserObject();
@@ -58,7 +60,7 @@ public class SliceUsageCellRenderer extends ColoredTreeCellRenderer {
}
}
- public void customizeCellRendererFor(SliceUsage sliceUsage) {
+ public void customizeCellRendererFor(@NotNull SliceUsage sliceUsage) {
boolean isForcedLeaf = sliceUsage instanceof SliceDereferenceUsage;
TextChunk[] text = sliceUsage.getPresentation().getText();
@@ -83,12 +85,10 @@ public class SliceUsageCellRenderer extends ColoredTreeCellRenderer {
break;
}
}
+ int methodOptions = PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_PARAMETERS | PsiFormatUtilBase.SHOW_CONTAINING_CLASS;
String location = method != null
- ? PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY, PsiFormatUtil.SHOW_NAME |
- PsiFormatUtil.SHOW_PARAMETERS |
- PsiFormatUtil.SHOW_CONTAINING_CLASS,
- PsiFormatUtil.SHOW_TYPE, 2)
- : aClass != null ? PsiFormatUtil.formatClass(aClass, PsiFormatUtil.SHOW_NAME) : null;
+ ? PsiFormatUtil.formatMethod(method, PsiSubstitutor.EMPTY, methodOptions, PsiFormatUtilBase.SHOW_TYPE, 2)
+ : aClass != null ? PsiFormatUtil.formatClass(aClass, PsiFormatUtilBase.SHOW_NAME) : null;
if (location != null) {
SimpleTextAttributes attributes = SimpleTextAttributes.GRAY_ATTRIBUTES;
append(" in " + location, attributes);
diff --git a/java/java-impl/src/com/intellij/slicer/SliceUtil.java b/java/java-impl/src/com/intellij/slicer/SliceUtil.java
index 35b63bff0c95..a689e181f3df 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceUtil.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceUtil.java
@@ -30,7 +30,6 @@ import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
-import com.intellij.slicer.forward.SliceFUtil;
import com.intellij.util.ArrayUtilRt;
import com.intellij.util.Processor;
import gnu.trove.THashMap;
@@ -54,7 +53,7 @@ public class SliceUtil {
expression = simplify(expression);
PsiElement original = expression;
if (expression instanceof PsiReferenceExpression) {
- PsiElement element = SliceFUtil.complexify(expression);
+ PsiElement element = SliceForwardUtil.complexify(expression);
if (element instanceof PsiExpression && PsiUtil.isOnAssignmentLeftHand((PsiExpression)element)) {
PsiExpression rightSide = ((PsiAssignmentExpression)element.getParent()).getRExpression();
return rightSide == null || handToProcessor(rightSide, processor, parent, parentSubstitutor);
@@ -238,9 +237,12 @@ public class SliceUtil {
});
}
+ @NotNull
public static SliceUsage createSliceUsage(@NotNull PsiElement element, @NotNull SliceUsage parent, @NotNull PsiSubstitutor substitutor) {
return new SliceUsage(simplify(element), parent, substitutor);
}
+
+ @NotNull
public static SliceUsage createTooComplexDFAUsage(@NotNull PsiElement element, @NotNull SliceUsage parent, @NotNull PsiSubstitutor substitutor) {
return new SliceTooComplexDFAUsage(simplify(element), parent, substitutor);
}
diff --git a/java/java-impl/src/com/intellij/testIntegration/JavaTestFramework.java b/java/java-impl/src/com/intellij/testIntegration/JavaTestFramework.java
index 9e389dda012e..5b4a1f310d3e 100644
--- a/java/java-impl/src/com/intellij/testIntegration/JavaTestFramework.java
+++ b/java/java-impl/src/com/intellij/testIntegration/JavaTestFramework.java
@@ -107,6 +107,8 @@ public abstract class JavaTestFramework implements TestFramework {
public FileTemplateDescriptor getParametersMethodFileTemplateDescriptor() {
return null;
}
+
+ public abstract char getMnemonic();
public PsiMethod createSetUpPatternMethod(JVMElementFactory factory) {
final FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(getSetUpMethodFileTemplateDescriptor().getFileName());
diff --git a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java
index d34a3600d4dc..1185d60a7971 100644
--- a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java
+++ b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java
@@ -49,6 +49,7 @@ import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo;
import com.intellij.refactoring.util.RefactoringMessageUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.classMembers.MemberInfo;
+import com.intellij.testIntegration.JavaTestFramework;
import com.intellij.testIntegration.TestFramework;
import com.intellij.testIntegration.TestIntegrationUtils;
import com.intellij.ui.EditorTextField;
@@ -123,6 +124,12 @@ public class CreateTestDialog extends DialogWrapper {
for (final TestFramework descriptor : Extensions.getExtensions(TestFramework.EXTENSION_NAME)) {
final JRadioButton b = new JRadioButton(descriptor.getName());
+ if (descriptor instanceof JavaTestFramework) {
+ final char mnemonic = ((JavaTestFramework)descriptor).getMnemonic();
+ if (mnemonic > -1) {
+ b.setMnemonic(mnemonic);
+ }
+ }
myLibraryButtons.add(b);
group.add(b);
diff --git a/java/java-impl/src/com/intellij/usageView/UsageContextDataflowToPanel.java b/java/java-impl/src/com/intellij/usageView/UsageContextDataflowToPanel.java
index 226af43fe3df..b097a8a7e307 100644
--- a/java/java-impl/src/com/intellij/usageView/UsageContextDataflowToPanel.java
+++ b/java/java-impl/src/com/intellij/usageView/UsageContextDataflowToPanel.java
@@ -122,7 +122,7 @@ public class UsageContextDataflowToPanel extends UsageContextPanelBase {
ToolWindow toolWindow = ToolWindowManager.getInstance(myProject).getToolWindow(ToolWindowId.FIND);
SliceAnalysisParams params = createParams(element, dataFlowToThis);
- SliceRootNode rootNode = new SliceRootNode(myProject, new DuplicateMap(), SliceManager.createRootUsage(element, params));
+ SliceRootNode rootNode = new SliceRootNode(myProject, new DuplicateMap(), SliceUsage.createRootUsage(element, params));
return new SlicePanel(myProject, dataFlowToThis, rootNode, false, toolWindow) {
@Override
diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java
index 0593133e51a1..7e344d26143a 100644
--- a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java
+++ b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java
@@ -50,6 +50,7 @@ public class MethodGroupingRule implements UsageGroupingRule {
if (!(usage instanceof PsiElementUsage)) return null;
PsiElement psiElement = ((PsiElementUsage)usage).getElement();
PsiFile containingFile = psiElement.getContainingFile();
+ if (containingFile == null) return null;
InjectedLanguageManager manager = InjectedLanguageManager.getInstance(containingFile.getProject());
PsiFile topLevelFile = manager.getTopLevelFile(containingFile);
if (topLevelFile instanceof PsiJavaFile) {