diff options
author | Tor Norbye <tnorbye@google.com> | 2013-09-27 10:19:19 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2013-09-27 10:19:28 -0700 |
commit | f7998d05c40c24ae66d1972abfcb070552b1d7b5 (patch) | |
tree | b0b97491f6e6591e53ea6a8f6c3a79a7dc685771 /java/java-impl/src | |
parent | beca9839b2866f90da9dc517c29df2ec25a6f6a8 (diff) | |
download | idea-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')
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) { |