summaryrefslogtreecommitdiff
path: root/java/java-psi-impl/src/com/intellij/psi/impl
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2014-05-28 17:06:51 -0700
committerTor Norbye <tnorbye@google.com>2014-05-28 17:06:55 -0700
commitc667c1f74abd96a2098520effdd5afdff7f0d34b (patch)
treeab650b0e69fb57d40350579d8796da74d8ea49cb /java/java-psi-impl/src/com/intellij/psi/impl
parent0f831a730c50607e2ffd95020875af6185e17734 (diff)
downloadidea-c667c1f74abd96a2098520effdd5afdff7f0d34b.tar.gz
Snapshot idea/138.343 from git://git.jetbrains.org/idea/community.git
363dc51: row color for byte code viewer under darcula 98900f0: external annotations markers: move to fast line markers d5ee2ec: testdata fixed 2780ae5: ensure test class writable b8cdda6: preserve read-only status for class to test 27c5938: test generation: accept same test class name; avoid same test names 55c4e7a: Merge remote-tracking branch 'origin/master' 81c6fb5: PY-11592 Django 1.6: TEMPLATE_DIRS variable in settings.py is not created properly on project creation d4a3220: SQL: per-statement file structure grouping 3f7f1c1: IDEA-125397 Cyclic Expand Word no longer completes numbers 1443a9f: IDEA-125137 Click on failed unit test console output to navigate to test fails when using Groovy test name with '()' in test method name bb1b109: Merge branch 'master' of git.labs.intellij.net:idea/community d92b567: doesn't show empty langs in postfix completion tree 6252558: IDEA-88175 (wrong inspection Contents of collection 'x' are updated, but never queried) 5298c6b: HgCommandExecutor refactoring d215ac2: identify command from WorkingCopy changed to local 3dcf8ce: Merge remote-tracking branch 'origin/master' 8199a13: CCE 1cd6faa: Merge branch 'master' of git.labs.intellij.net:idea/community b2f594a: Merge remote-tracking branch 'origin/master' c2ad3ae: IDEA-119640 Problem with goto declaration of XML attribute defined in XSD 701f9fb: Merge branch 'master' of git.labs.intellij.net:idea/community fada6f1: Add temporary api to allow custom initialization of debug session data a41ecf9: IDEA-123466 Sheet dialogs doesn't transfer focus back then closed ea02814: Merge branch 'master' of git.labs.intellij.net:idea/community c6be0ae: XBreakpointUtil.getShortText() shortens text now 740b6b1: [log] IDEA-125578 Handle empty permanent graph d0891b3: IDEA-125580 - OpenShift: cloning application hangs if switch to another process 11202b9: DevKit: Goto EP declaration in plugin.xml (IDEA-86100) 8ebe9dd: IDEA-125258 ("Unnecessary boxing" inspection is triggered wrongly with overloaded constructors) 55ba38d: IDEA-121467 Quickfix inserts static imports instead of plain imports for inner classes 978a1dc: try with default pattern provider if selected one was not found (IDEA-125581) 8a80f67: leave foreign params untouched (IDEA-119700) 6c8c34c: avoid assert on IDE close with active debug session c68b3d3: IDEA-125344 (Serializable class without 'read/writeObject()' inspection should ignore classes w/o additions fields) ce6deee: IDEA-125558 new debugger: double result in evaluate expression 0315d6f: Merge branch 'svn_18_3' 7dcc19e: fix expression name for postfix template 2c9f426: [meo] restore backward compatibility in single-element CompositeFilter merge a6f23d0: use NavigationGutterIconBuilder 4ab120e: Merge remote-tracking branch 'origin/master' 1c6bfe0: invoke 'install plugin from disk' action from ctrl+shit+a a345e24: IDEA-125542 new debugger: 'rerun' failed tests are lost 53fd954: IDEA-125542 new debugger: 'rerun' failed tests are lost c9716a4: IDEA-124891 Implementation icon in gutter overlaps preview for Icon class Get rid of icons from collapsed areas f54e61d: ObjectsConvertor cleanup 05b53b7: IDEA-125421 diff tool opens wrong file if VCS file deleted via file system 854abe7: + retina variant 0d0dc51: add new icon 2e35935: broken plugins added ad666ec: do not bother users with warnings from external annotation roots 32fe274: stream api: do not collapse loops when body is not throws compatible (IDEA-125541) 972c75d: Lazy load the icon in DependencyValidationManagerImpl. #188 775e4cc: IDEA-124609 Unexpected indentation of anonymous classes 41c5b88: save caret position in evaluation dialog 4ca7c2b: cleanup 5287678: cleanup 7984ec9: IDEA-122538 Implemented "repository supports merge tracking" detection (for both command line and SVNKit) ffbcd16: fixed debugger tests 3d12351: disable postfix templates for coffeescript bfd4b28: ExtendedBuildModel now exposes the project's build directory. 9786fa2: fixing debugger tests 13e4b01: make test light ad7096e: IDEA-125361 (False positive 'Field may be final') 8ef32c8: missing dep e62c3c5: Merge remote-tracking branch 'origin/master' 895353f: extract DevKitGutterTargetsChecker 5c120d4: goto actions: vk_up/vk_down fix [^vasya] 2750009: Merge remote-tracking branch 'origin/master' 5859ed9: IDEA-125486 (Comparison using == instead of .equals() should replace with Objects.equals() instead of the instance .equals() method) 1316de2: PyCharm 3.4 artwork. 03da78e: Merge remote-tracking branch 'origin/master' 0cb2b06: Merge remote-tracking branch 'origin/master' a6d22de: fix testdata; restore again ExpectedHighlightingData 40420a0: quote parameters if win command processor launched with extra switches (e.g. /D) b61f519: Merge remote-tracking branch 'origin/master' f587cf6: require less stack in ResolveClassTest.testStaticImportNetwork 13441f9: Merge remote-tracking branch 'origin/master' 892e199: fix test 6c56888: Merge remote-tracking branch 'origin/master' 1d8d3f1: lambda: ignore results of assignment is used for expression lambda (IDEA-125473) eaa9ce6: method refs: check if interface functional (IDEA-125511) 5e7d32c: edit sources for documentation component; F4 2cf09bb: include window class into diagnostics (met with documentation popup) 2853c95: cleanup code on commit option d2c04b8: anonymous -> lambda: do not collapse to lambda functional interfaces with generics methods, accepted by method refs though c20f9d2: Merge remote-tracking branch 'origin/master' bfc443c: do not visit additional resource roots twice: additional indexed resource root providers can return intersecting paths sometimes 4b7dc58: a less gc-producing ImmutableText.subtext 2dc1af8: optimize ImmutableText memory usage 8dbda1f: [vcs] Log executable validation failure reason 9b3a535: [git] cleanup 52fb0b3: DebugLogConfigureAction: define the default focused component 47956e6: Merge remote-tracking branch 'origin/master' ec369f5: Local History tests tuned for new VFS behavior 6c0132d: Platform: IDEA-125330 Warning about non-project file modification should be merged with Read-only warning and shown in a modal dialog c611e59: Merge remote-tracking branch 'origin/master' b3afb57: Platform: OS X scrollbars can be disabled for diagnostic purpose d300533: Merge remote-tracking branch 'origin/master' a1d5b1c: fix border in dbe table editors 72f2e89: cleanup dccc79d: Merge remote-tracking branch 'origin/master' 5ffae2a: fix class with wrong qname sometimes returned from findClasses 813ab5f: [log] Don't schedule a refresh task if there is nothing to refresh a40d619: [log] Fix IAE when jumping to row #0 in empty table 2d2cf45: [log] set bek synchronously when applying filters to avoid locks 80e3729: Merge remote-tracking branch 'origin/master' c256133: fixed jdi objects leaks c10a0ca: Merge remote-tracking branch 'origin/master' 354d205: Merge branch 'python-fixes' 99c6577: Fixed false positive for 'yield' expressions in lambdas (PY-11663) 5de561b: Fixed false negative for 'yield' expressions in default values of parameters e23c4c0: Cleanup 222ecc2: hide execute in console action if not available a9d038d: Merge remote-tracking branch 'origin/master' 6823565: Merge remote-tracking branch 'origin/master' 26a710e: Merge branch 'modulefileinex-service' of https://github.com/yole/intellij-community into yole-modulefileinex-service 4be8c9b: Convert ModuleFileIndex to a module-level service. b37122b: merge hyperlink merging changes by meo (https://github.com/JetBrains/intellij-community/pull/185); cleanup 68f7fad: IDEA-125248 Incorrect simplify for float c82e10f: Merge remote-tracking branch 'origin/master' b7c5190: IDEA-125357 Throwable at com.intellij.openapi.wm.impl.WindowManagerImpl.isAlphaModeEnabled(WindowManagerImpl.java:359) 5e0039e: Merge remote-tracking branch 'origin/master' e32d36a: path fixed 9989bd2: Merge remote-tracking branch 'origin/master' ec32500: new "Serializable object implicitly stores non-Serializable object" inspection IDEA-62336 9db4420: - switching data buffering only once per state change - upon before file deletion event remove the file from myFilesToUpdate - rename inner class and other cleanup 438a3e2: final in "foreach" loop 0c86e1e: default message for postfix templates e8cef21: Merge remote-tracking branch 'origin/master' e2a7723: don't access disposed excluded entry (IDEA-120622 workaround) 33929c5: don't use checker.xml for dfa (but leave it there for a while, IDEA-125426) d50f08a: Merge remote-tracking branch 'origin/master' 7f8eae7: unification example postifx templates 45a21b2: Merge remote-tracking branch 'origin/master' 0fcb1c3: introduced pycharm_load_entry_point instead of searching for executable through local file system 76c0e94: moved inspections to groovy-psi 7c078e9: path to standardDsls fixed 1e4a913: moved more stuff to groovy-psi 0c48aca: DevKit: ExtensionPointCandidate: target PsiElement, EP-Locator: performance, search without supers 9dd16ef: Merge remote-tracking branch 'origin/master' 1a0533b: Merge remote-tracking branch 'origin/master' e617070: reverted 47fc79d09ef2793cd5fcc468d1fe7454bc5e4265 0375c72: correctly render more collections elements a149338: rearrange actions and added separators in context menus 0e230ea: fixed PY-12970 Extract variable: disable refactoring for parts of comrehensions 4af130d: use IntObjectMap in DirectoryIndex to avoid holding VirtualFile objects e41dedc: faster AdditionalIndexableFileSet.isInSet bb13e6f: Merge remote-tracking branch 'origin/master' f293b00: invalidate cashes stats 8173bf0: app start stats 1578ddf: JavaRearranger: proper processing of anonymous classes. 5580933: DevKit: extract ExtensionPointLocator 42702c9: moved to core ee9fcba: moved ExpressionConverter to psi 8404532: add groovy-psi to the roots for standardDsls loading e61091e: moved to psi f84bdce: export dependency 8c3458e: moved to properties psi 8a342ab: moved to core 0cf35f7: resource/gen ac478b1: moved resources to groovy-psi, regenerated icons 18ab45e: moved to core 1991ad8: moved to psi dc90b9a: cleanup cc0fbf8: test fix 9ed02a6: Platform: IDEA-125277 provide extension to allow non-project file modifications without notifications 817df5b: return code in django_manage_shell for old django versions 2355467: fix django console for PY-13031 remove old code with execute_manager and setup_environ fix django prompt 7b308ab: EA-54820 - assert: ClassMappingNameConverter.getVariants: fixed fd94f78: EA-54820 - assert: ClassMappingNameConverter.getVariants: diagnostics d0c1508: syncronize 'assert' c1ec45d: toString() restored 8142475: replace assertSame with assertEquals when comparing virtualFiles 9ee6a48: IDEA-123484: generate stub type definition for implicit trait type mixing a4094bf: IDEA-123484: multi-trait type dff7733: IDEA-123484: as operator with traits 0eefe8c: IDEA-124932 "Analyze Backward Dependencies" on any class fails with AssertionError: diagnostics d133496: javadoc 03ffdcf: IDEA-118036 Exception editing JSP file: diagnostics 49d5445: escaping redone, now only for double quotes cdca783: GPUB: drop deprecated stuff, parseTokenSmart & cleanup 6aef47f: Merge remote-tracking branch 'origin/master' d001816: PY-12734 Templates in app directories not found with implicit TEMPLATE_LOADERS 4fa70d5: do not write new setting to profile if it has not changed from the default value d38e995: fix for private fields 6e3b903: cleanup ProjectView popup menu and EA-56883 on Java8 a8ca529: Merge remote-tracking branch 'origin/master' f8b1755: revert: make too many mess in testdata to have everything escaped in error messages; or we won't have an ability just to accept actual error message and would have to rewrite it manually 6d3bf6d: IDEA-125464 Non-pinned and non-docked tool windows do not hide anymore f6a8a5e: (IDEA-89870, IDEA-114058) hg4idea: java.lang.AssertionError: Invalid command 51a5628: make exception dialog appear faster for long traces ea09e6e: don't fire UseVirtualFileEqualsInspection on comparisons with this 506a2cb: include anonym prefix in internal canonical text to avoid incompatibility messages with "same" types on both sides 5953b8f: accessibility of private method via anonymous classes fixed e43dbe0: IDEA-122430 Search in class hierarchy: preselect class b290c14: IDEA-125430 do not clear package view attributes a4898d7: Utility method for text alignment ee26a53: [log] Add registry key vcs.log.bek.sort=false. 2147279: [log] Add bek button. 02e5afb: [log] Add GitBekParentFixer for GitLogProvider. 9774870: [log] Create BekSorter. e3177e8: [log] Fix DelegateGraphFacade when applying filters. 56c0dd0: [log] fix VcsLogColorManagerImpl. 313c4b1: [git] cleanup: move method to the only place in tests where it is used a981a80: [git] IDEA-125328 Don't crash if commit/author time is empty a0f6188: Merge branch 'python-fixes' f0bc595: Specify HTTP URL scheme for proxy string passed to 'pip' (PY-12771) 843daaa: IDEA-125237 part II, the considering of static final fields 9213ca5: [log] IDEA-125309 One more fix for a possible deadlock f4b288b: fix gray gap in ComboBox under Darcula and IntelliJ lafs bdeea08: fix java.lang.IllegalArgumentException: Row index out of range when history is empty b553f5c: check for plugin incompatibilities before update for a new version (IDEA-24014) 1fc11e7: cleanup f6f7050: Merge remote-tracking branch 'origin/master' dc5157d: Fix CME in terminal (IDEA-125398). d8b5ecb: IDEA-125378 SQL: Implement keyword-based operators completion d591ab2: IDEA-107350 EvaluateXPath dialog: input field height is too small, text is unreadable 033aed0: IDEA-91663 (Method can be variable arity method shall have an option to ignore methods with multiple array arguments) 2335b92: make test light f0fdc59: IDEA-124590 Java Rearranger: Implement "section" support 61b6ca0: icon class regenerated 67b1070: Merge remote-tracking branch 'origin/master' ce11bc5: Merge remote-tracking branch 'origin/master' 3501998: PY-13018 ForeignKey to model in different file brakes backward references if referenced as APP_NAME.Model 383494f: Package info with links to confluence added 961bf42: Start plugins wizard #29 move plugins saving to beforeOkAction 42c25f2: DevKit: resources, icons, DevKitBundle 36d20ee: fix wrong LAF shown in Settings/Appearance on first run 86cda23: do not show empty Refactoring popup group aa68afd: IDEA-124119 [regression] Breakpoints dialog: checkbox for "condition" field is gone 544238b: Don't draw terminal content out of the terminal panel component (IDEA-125317). fdf377f: Merge remote-tracking branch 'origin/master' 9f9e67e: Don't draw terminal content out of the terminal panel component (IDEA-125317). 635cfcc: show renderer's icon in variables view a44cf2c: Merge remote-tracking branch 'origin/master' 70e83b9: Fixed scrolling issue in terminal (IDEA-125223). 947ef5c: show number of recurrent call in stack frames list a092c29: optimization: avoid unnecessary disk access operations 09d7890: Revert "Fix list selection background when unfocused" 15b772c: rerun browser on performed fix c7d2582: an internal inspection checking that virtual files are compared with "equals" d763d57: PushedFilePropertiesUpdater: don't start dumb mode because of vfs changes outside the project 844d483: compare virtual files by equals, not == b9b3b32: cleanup 82c9f72: cosmetics a8adf75: continue "auto expressions in Coffee" spec 00e17e3: borders for IntelliJ LaF 5857e85: removed another copy of processing files with given set of data keys 782f5eb: Merge remote-tracking branch 'origin/master' 164f48e: make customizable 9fe0fda: jediterm updated to fix IDEA-125385 421f658: selection border 356ac7a: default table render offset 5854fc8: support empty borders 92226c5: Merge remote-tracking branch 'origin/master' e3e854a: IDEA-125287 [new Java debugger] trimmed string value in Variables view f2f3a64: project file conversion: API, @NotNull and javadocs 96a6ad6: IDEA-121475 Row height in "Environment Variables" too low 19e6f54: IDEA-125369 (Error highlighting remains after expanding annotation to normal form) 3a80bec: IDEA-121475 Row height in "Environment Variables" too low After-review rollback 757fb8d: heads, parents and several other mercurial commands should be executed as local commands 6bb121c: IDEA-64250 ("simplifiable annotation" inspection could unwrap single-element array arguments) 54fdb56: [log] IDEA-125309 Fix deadlock. invokeLater instead of Wait 59630f4: Merge remote-tracking branch 'origin/master' cc055ad: fixed PY-12405 --noinput option does not work when running django unit tests 22b7cde: IDEA-122962 - Clouds: perform connection test in background - fix UI breaking on long error message eb65298: IDEA-125287 [new Java debugger] trimmed string value in Variables view ee02141: sources roots without sources converted to resource roots f2d9cda: @Nullable 2c2bc76: remove hardcoded RED color in tooltips 16d79c0: add module dependency [debugger-impl] -> [util] 2ff22a8: fix focus border around selected elements fabedf6: for indexed refactoring d4d6b60: sources roots without sources converted to resource roots 09c92d9: invalid source roots removed d750e35: XDebugger: Added myCustomTopPropertiesPanelWrapper to XLightBreakpointPropertiesPanel a1a393b: IDEA-124402 Exception during choosing input XML file 07e7838: IDEA-125289 Unexpected navigation after folding After-review fix 903857f: write action 268b90e: IDEA-124119 [regression] Breakpoints dialog: checkbox for "condition" field is gone - added mnemonic 2b3c1e1: notnull 2df4494: moved to psi a708897: notnull 90859a3: moved to psi a50eb7d: moved to psi, reduce dependencies 0a59e6f: notnull 76b18d8: moved to core 27e528f: continue "auto expressions in Coffee" spec fix NPE - absoluteLocalPathToSourceIndex 8a7ce9b: ensure fonts are not lost during collapse/expand, second popup shown, etc 0282f9e: IDEA-125047 Wrong error in XSLT injection d8f9f2b: Merge remote-tracking branch 'origin/master' 3baeea4: try to highlight only wrong argument in inapplicable call 607732e: ensure scrolling finished before popup is shown 7e77395: include build target info in error message for unexpected errors 1676779: IDEA-123049 Rearrange Code is breaking code (Code Style > Java > Arrangement) f91bf07: capitalization corrected 8f14954: IDEA-125302: The Analyze Stacktrace menu option remembers only one log file across multiple projects 7520a18: notnullification 94e42a8: don't warn on annotations containing errors 90a4b5c: make test light b2fc5b1: allow xml escaping in test highlighting data 3794f56: Merge remote-tracking branch 'origin/master' 68565ae: PY-2980 Unresolved reference for ForeignKey defined as string d923e07: IDEA-122956 Popups in Project Structure dialog have wrong initial size sometimes 202643b: init "auto expressions in Coffee" spec a23319a: cleanup 552c2c5: cleanup cb9b56b: cleanup b719055: Merge remote-tracking branch 'origin/master' 67ec3fc: IDEA-125269 List: bad selection BG/FG color cfa83df: use JBColor cb3f677: use default color scheme if using darcula color scheme with default LAF 1b9cdd8: get rid of unused DirectoryInfo.orderEntries field dd3c283: IDEA-124793 Editor gutter background not painted, gutter icons displaced 9f9a8b5: IDEA-121475 Row height in "Environment Variables" too low 98c8696: apply code cleanup after code generation, let's see how it would work on the long run (IDEA-124904) 7c15dce: cleanup tools extended a915a2d: update editor notifications on roots changed c21f106: check app directory first (IDEA-125294) c731f05: bomb test 9424172: Merge remote-tracking branch 'origin/master' 61fd17b: IDEA-125189 new debugger: pause doesn't select thread in frames combo c4f4f08: IDEA 123484: fix test ba16a8c: move all header into starting script for django console (PY-11728) dbe0fc8: IDEA-121687 New module->Ruby on Rails doesn't allow to specify sdk IDEA-121685 New module->Ruby has confusing UI 6db5e53: HgCommandExecutor refactoring (IDEA-119330 Reorganize mercurial command execution ) 3066cd3: IDEA-124119 [regression] Breakpoints dialog: checkbox for "condition" field is gone fbdaf43: foreach simplification + for in js postfix template 77e2c15: ignore 'winShellScriptingQuoting' test if not Windows 77df25e: AnnotateStackTraceAction in now reusable a1b2bed: Merge remote-tracking branch 'origin/master' cb8a9f0: add module dependencies: do not show duplicates (IDEA-125033) f5656e8: gutter icon for external annotations (IDEA-39633) bb5631c: action to change assignable var type (IDEA-125234) ec9a61b: extract method: redundant cast treatments (IDEA-125259) 68f0af6: IDEA-125262 Can't create Django, AppEngine and other specific Python projects 6ebbcc6: cleanup e11cf17: introduce process queue to auto-clean tossed resolve results 1a6a08f: compilation 2855b05: groovy sucks 11ba843: moved to psi 726502f: moved to psi 9fdcc12: removed static interface inheritance to reduce unnecessary dependencies 77522ae: inline GroovyFileType.GROOVY_LANGUAGE a093f0d: introduce groovy-psi module 65b4b98: moved to ui-ex 4f7b33b: CopyPastePostProcessor interface converted to class so incompatible plugins won't break copy-paste functionality (and exception will be shown only on first invocation) c946899: removed unused action to lessen dependency lang-impl on vcs-impl 0cb7117: removed unused code to get rid of dependencies from lang-impl to vcs-impl 68c8c32: some dependencies from lang-impl to vcs-impl removed a61b41f: IDEA 123484: support for trait fields. Accessors and pack__name fields abe983d: IDEA 123484: get rid of PsiImplUtil.isTrait(PsiClass) 98777dd: Gradle: nonclasspath finder updated to search psi classes in groovy sources 50c85d4: OC-9949 Breakpoint editing popup layout is broken e7884cc: vcs specific classes moved from lang-impl to vcs-impl 47fc79d: PY-12810 "imported" urls are not supported by {% url %} tag ( "patterns +=" now supported) 535e2f3: svn: Refactored SvnConfigureProxiesDialog - execute "svn info" as "test connection" implementation (instead of direct SVNRepository usage) 4c22b04: svn: Refactored BranchMerger - get latest source revision using InfoClient (instead of direct SVNRepository usage) 2046a89: svn: Refactored SvnUpdateEnvironment - get latest repository revision using InfoClient (instead of direct SVNRepository usage) f024c0c: svn: Refactored SvnUpdateEnvironment - removed unnecessary parameters, code simplified 39e5d54: svn: Fixed LatestExistentSearcher - ensure repository relative url starts with slash (for correct relative urls comparison) 65370cd: svn: Refactored LatestExistentSearcher - get latest repository revision using InfoClient (instead of direct SVNRepository usage) 6c0f1f1: svn: Refactored LatestExistentSearcher - fixed warnings, rewritten recursion with while loop d4fd095: IDEA-125237 (Misordered 'assertEquals()' arguments: support non-primitives) a11c2bd: svn: Refactored LatestExistentSearcher - check if item exists in given revision using InfoClient (instead of direct SVNRepository usage) 957aebe: svn: Refactored LatestExistentSearcher - use repository url passed as parameter (and not resolve repository url by itself) a4fcdde: IDEA-125289 Unexpected navigation after folding 894bbbd: fixed no toString value 8168063: replace @Nullable findInstance with @NotNull utility with logging (EA-55734) 061c4b0: compilation fixed: use dependency on 'annotations' module instead of 'annotations.jar' a454164: style 30287ac: IDEA-125285, EA-645852: AppCode exception on start up +review c08b9bd: Merge remote-tracking branch 'origin/master' 546f5fd: IDEA-86100 DevKit: support "Go To Related File..." sort after/before template files f4d0b25: svn: Refactored SvnUtil.remoteFolderIsEmpty - check folder content using BrowseClient (instead of direct SVNRepository usage) 12a5319: tweak insents 0e3c26e: [log] allow more results for the first request to get filtered results 06aebe0: Emmet: remove redundant borders from preview 2012b06: IDEA 123484: clashing methods from super-traits. Prefer the method from the last trait 1ba5924: IDEA 123484: access to super method with super. qualifier 205f80d: IDEA-124891 Implementation icon in gutter overlaps preview for Icon class c17387a: IDEA-86100 DevKit: support "Go To Related File..." 298ee51: Merge remote-tracking branch 'origin/master' 3c638cb: show variable name for arg_x and slot_x variables 3280f4f: [log] LOG.info the ISE (Joiner failure), not LOG.error f2e2a1b: [log] Joiner: use THashSet with much faster removeAll a32815c: [log] clear IntStack in DfsUtil. a5380f0: [log] Optimize IntTimestampGetter. bba2e43: [log] Optimize PermanentGraphImpl#getAllCommits() 02daba7: [log] Move GraphCommit implementation to vcs-log-graph 13378bb: [log] Add vcs-log-graph-api to root build modules 057c82c: fix author width update a1fe976: [log] Rewrite the process of refreshing log & building the DataPack 5cffaba: [log] Add sort type to PermanentGraph#createVisibleGraph. 081b82e: [log] Fix arrow. fa93a67: [log] Fix edges sort problem. 42874b2: [log] Create SmartDeltaCompressor. 89d784b: [log] Create new PermanentListIntToIntMap. It is useful for IntDeltaCompressor. a4141ad: [log] Fix NOT_LOAD_COMMIT. 82f85bd: [log] Fix color id. de26777: [log] Extract GraphLayoutImpl from GraphLayoutBuilder. 1b43a23: [log] Add DelegatedPermanentGraphInfo. 50b2fc4: [log] Create PermanentGraphInfo & PermanentCommitsInfo. 3cd6eb1: [log] performance fix. f5413a0: [log] PermanentGraphBuilderImpl - initial version 9210824: [log] Always request ordered recent commits c4804c2: [log] move getFilteredDetails to VcsLogFilterer 63b4315: [log] use interface 2ca8eac: [log] Remove obsolete ContentRevisionFactory ef6d65e: [log] Add new vcs-log-graph-api module in ultimate dd97706: [log] Fix jump to not load commit. 0510209: [log] Use trove HashMap. 8476e99: [log] Optimize in PermanentCommitsInfo for case CommitId == Integer. 3b585f0: [log] optimize full graph build. 2441f57: [log] Generify VcsLogJoiner. 954a4c2: [log] Fix mouse over action. 44505e8: [log] add equals & hashcode for PrintElement. 5d94e56: [log] Collapse all. 64433f9: [log] Fix oneOfHead(). 50388d4: [log] fix CurrentBranches. 24275af: [log] Fix CollapsedVisibleGraph. e86fb65: [log] performance problem 20b21f2: [log] Fix with for graph cell. 108183c: [log] Fix EdgesInRowGenerator. 4cc1adc: [log] Fix underdone nodes. e34b093: [log] Fix colorId. af5b227: [log] Drop VcsCommit. 616274e: [log] COMPILED! 4211697: [log] fix DataPack 3cbb213: [log] Change signature of GraphFacade#getAllCommits(); 545ef9f: [log] Rename getTime() -> getTimestamp(). 6fbc6f6: [log] Rename getHash() -> getId(). 33a7f03: [log] compilation fix. 4cb058c: ~~ [log] Add module dependence. bc7a666: [log] Add DelegateGraphFacade. b3d2206: [log] Add getVisibleRowIndex to VisibleGraph. 0a77ab3: [log] Make FilterVisibleGraph. c9795ab: [log] Make CollapsedVisibleGraph. 5be555e: [log] optimize import. 6650399: [log] Add branchNodeIndexes in PermanentGraphImpl. 293ef9a: [log] Add constructor. 15dd5b1: [log] Add IdFlags. 34c687e: [log] Fix PermanentGraphImpl. a4c2797: [log] Move method from CollapsedVisibleGraph to AbstractVisibleGraph. e671eb1: Extract deprecation warnings only if they present in text. b30e3f0: [log] In GraphColorManager JBColor -> int(colorId) && int -> CommitId 340ba68: [log] Fix EdgesInRowGenerator and add several tests. 1ec4cda: [log] Add LinearGraphWithElementsInfoParser. e3369e2: [log] Remove unnecessary BufferedReader usage. bd18165: [log] Remake test package structure. 4a67d5e: [log] Fix equals fox CommitId. 408d6878: [log] Remake tests. 62cad84: [log] Small fix. 88e5afd: [log] Remove newgraph package. c3fbf99: [log] Add Flags#setAll(). b8c1375: [log] Move DfsUtil. 770aff8: [log] Remake image printer. b49cea0: [log] Remake PrintElementsManagerImpl. 97c5f6d: [log] Add AbstractPrintElementsManager. fe3a680: [log] Create new PrintElementWithGraphElement. 80d21e9: [log] Remake ContainingBranchesGetter. 5996a24: [log] GraphCellGeneratorImpl -> PrintElementGeneratorImpl. 6b56353: [log] Generate equals & hashcode methods. 55b4219: [log] Remake AbstractPrintElementGenerator. 938956f: [log] Add simple implementation of PrintElements. 3784b45: [log] Remake EdgesInRowGenerator. ad7d357: [log] Remake FragmentGenerator. 1a1d238: [log] Add draft of CollapsedVisibleGraph. 95a51cd: [log] Add AbstractVisibleGraph. b8a9f02: [log] Fix CurrentBranches. 8722519: [log] PrintedLinearGraph.getLayoutIndex() -> getGraphLayout(). f6467e4: [log] Add draft files for PrintElementGenerator. 6f8ff22: [log] Add FilterGraphWithHiddenNodes. 6563dea: [log] Some changes in CollapsedGraphWithHiddenNodes. 0994121: [log] Add constructor. ad25cff: [log] Remake GraphWithElementsInfoImpl to CollapsedGraphWithHiddenNodes. 3abc13e: [log] Extract inner class. c9a5fb2: [log] Add LinearGraphAsGraphWithHiddenNodes. 3b2baa1: [log] Fix update event in GraphWithHiddenNodesAsPrintedGraph. a9bee1b: [log] graph.impl.visible.utils -> graph.impl.visible.adapters 2f4b46f: [log] Move all from vcs.log.facade.utils -> vcs.log.graph.utils. 579ee01c: [log] PermanentGraphLayout -> GraphLayout. 8e14dd2: [log] Add draft of PermanentGraphImpl. 6e5d35f: [log] Remake PermanentGraphBuilder to PermanentLinearGraphBuilder with CommitId. 313093e: [log] Remake PermanentCommitsInfo with CommitId. 8151d60: [log] Create new internal graph api. 797b59b: [log] Add PermanentCommitsInfo. 5e909f3: [log] Add IntTimestampGetter. 5049be6: [log] Drop unnecessary method from PermanentGraphLayout. adfa4b0: [log] DfsUtil: use IntStack. 24768a4: [log-api] Update api. b02fc19: [log-api] Update api. d1fce17: GRAPH API e7526b1: svn: Refactored BranchMerger - removed unused fields/parameters 65bab47: DevKit: refactor InspectionDescriptionNotFoundInspection 5a18a7e: svn: Refactored SelectLocationDialog - get repository root url using InfoClient (instead of direct SVNRepository usage) caa8262: support ContinuationWebSocketFrame cf56368: Calculate future feature only if it present in text. 1a79f0f: svn: Refactored SelectLocationDialog - removed unused code, removed duplication 445763e: do not calculate mirror file for each access to jar file 5cfdfeb: fix IllegalArgumentException: The file: doesn't exist. 49b2232: AC/C++: EA-56192 only allow directories in NullFileReferenceHelper roots +review CR-OC-1544 30d5ad4: js postfix template: parenthesized 3ce7f95: quote param containing ampersand for .bat files 0008feb: Based on comments for http://crucible.labs.intellij.net/cru/CR-IC-5400 * quote param containing ampersand for .bat exe files * improve test to actually execute .cmd/.bat files 2fb4ba8: reverted 69ea226: custom strategy bug fix, new Weak key soft value map e7ed4bf: moved to ui-ex bc74ad3: moved to core-impl c2083de: [log] Handle the case when null value is passed to the renderer 86c197a: IDEA-125227 New debugger: please disable switch from expression mode to code fragment mode when evaluating multiline expressions 519d350: Gradle: discover local gradle sdk sources local gradle dependencies 911aa11: inline GroovyFileType.GROOVY_LANGUAGE 9668cc5: renamed 06ad15b: javadoc, IncorrectOperationException replaced with UnsupportedOperationException as more standard 940d174: javadoc, cleanup, removed bulk operations since they are not jdk8 compatible anyway 7e1f445: AC/C++: EA-56192 allow files in NullFileReferenceHelper roots +review CR-OC-1544 ce9a38c: fixed "unmute on stop" action 2ca53a3: Calculate dunderAll in stubs only if file text contains __all__. 80cb0da: fixed PY-12970 Extract variable: disable refactoring for parts of comrehensions 1fe1440: typo 317cd70: fixed tomcat tests 47060bb: Merge remote-tracking branch 'origin/master' f343aa2: simplification postfix template fb45e36: Gradle: nonclasspath finder updated to search psi classes in groovy sources 897595c: Gradle: EA-54734 - assert: JavaSourceFilterScope.<init> 58d3c58: Gradle: EA-56552 - assert: NonClasspathClassFinder.findClass 3003df2: change class signature: process diamond (IDEA-125236) 479578f: move edit settings down 0da1a20: ensure expression valid, initializer expression should be already replaced (IDEA-125231) 57fa2db: fix tests 30d1d10: select and scroll to most recent revision (IDEA-60345) e54ffc6: scroll tree view file history to most recent change c3d8951: make scroll to selection in file history work better 90de406: support content loading for resource files from output roots (needed by some annotation processors) 6faa3ff: remove unnecessary addClass() calls 113323e: doc test: assert HTML body text only 96d93a8: add new not expression test c7ce438: cleanup 78a4030: Merge remote-tracking branch 'origin/master' 57f67f8: IDEA-125184 Mac launcher should not crash when IDEA_JDK env. var. does not correspond with JVMVersion from Info.plist. e7a2262: js postfix templates: not expression 7877bab: IDEA-125129 I would like to reopen IDEA-117698 3b26929: move jql lexer to gen source root 6723047: postfix template: js introduce variable be8ee4f: refactor expression postfix template with chooser cae5144: cache ClasspathCache.transformName 4119688: javadoc typos d12d8bd: [log] IDEA-116867 Use the same root renderer for author as for message ee1a2cf: IDEA 123484: traits are supported only since 2.3 version 86ffe87: IDEA 123484: complete trait keyword and extends/implements lists in traits 91875b6: IDEA 123484: trait methods are not allowed to be protected 5462267: IDEA 123484: clena up utils and tests 4e540d4: use previously calculated data from PHM if no read right now is performed: calculate the value instead of wait for IO to complete 53e5113: cvs file history in Browse CVS Repository 727804a: AC/C++: EA-56794 - assert: FileReferenceSet.getAbsoluteTopLevelDirLocations +review CR-OC 3326c46: cache already checked plugins (IDEA-124828) 0f9f39d: auto expressions spec: done duplication check 5d4a66c: auto expressions spec: init duplication check 901d664: Merge branch 'github-theme' f55b604: Updated JavaScript and CoffeeScript colors 9c26625: Updated Buildout, GQL, ReST and YAML colors 2bc7a23: Updated Django and Mako templates colors a027a36: Updated CSS, LESS and SASS colors f1a44bc: revert couple, 135 compatibility 8d2b706: change method return type on call site (IDEA-125166) 3316081: Updated HTML and XML colors e4bbd52: move diff utility classes to Util module 54754f3: add evaluate expression action to variable's context menu f915ea5: fixed NPE in evaluate handler 954f437: Updated default colors and set many Python styles to inherited 6c992e4: fix compilation ae76055: Fix list selection background when unfocused 98f8e9f: don't highlight if psi was invalidated (EA-56385 - PIEAE: PsiUtilCore.ensureValid) 9c76516: prevent SOE when creating PIEAE (EA-56284, EA-56810, EA-56809) 968779e: IDEA-123484: override/implement actions are aware of traits 1f6e60a: IDEA-123484: trait -> type_definitions token set c4764e6: IDEA-123484: use newHashSet(map()) instead of map2Set(), import static ContainerUtil.* ae3fce2: Sorted options 08ce945: svn: When looking for cached credentials for given url/realm check also if there are cached credentials for its parent urls/realms (and use them if found) ac6e1c9: IDEA-124077 Enum code reformat destroys enum a92b91b: rearranger @Nullable replacement 1311963: [diff] Simplify the "gear" button implementation e910c1c: fix Cut functionality and tests 9c75b87: [vcs] Simplify the gear action group definition 1dd998d: BlockSupportImpl: assertFileLength2->reportInconsistentLength 57b759f: IDEA-124712 ctrl-alt-space: duplicate completion variants 83a2697: IDEA-125194 Strange control-flow inspection 0f495ff: [git tests] cleanup ce0259e: svn: Refactored RepositoryLoader - use common client factory model (instead of direct SVNRepository usage) d7f2104: WEB-12199 Grunt tool window fails to load Gruntfile tasks, when an "&" is in the path e718569: Merge remote-tracking branch 'origin/master' c8485a5: Merge remote-tracking branch 'origin/master' e79e97b: js potfix templates: notnull & null 2c935f8: [git tests] Fix expected-actual order 81c101c: simplify settings (CR-IC-5127) c061e81: distinguish generated roots during rename/move warnings (IDEA-125147) 61460f7: combine all jdk jars into one marker in OutputChecker b49b8fd: [git tests] Remove a useless blinking test 053f37f: [git tests] Log index.lock error 6616b1a: [git tests] Log debug GitHandler stuff if test failed fed92bd: fixed PY-12991 Missing Added by user mark on paths added to the interpreter abfedef: throw IllegalStateException if number of keys in node to split is different from expected 73218a0: platform: plugin descriptors loading optimized a64c39b: EA-56305 (delegate FS used for parenting) 02521d2: [vcs] Add toolbar to the Shelf d9c049b: [vcs] ShowHideRecycledAction: don't proceed if project is null, cleanup db69de7: svn: Moved several classes to corresponding packages ("org.jetbrains.idea.svn.lowLevel" to "org.jetbrains.idea.svn.svnkit.lowLevel", diff related classes to "org.jetbrains.idea.svn.diff" package) 5546e02: Addede GitHub color scheme fd96e01: fixed tests 9a1a122: Merge remote-tracking branch 'origin/master' 850f818: Revert start_new_thread override. 5c8997d: svn: Refactored RepositoryBrowserDialog.doUnifiedDiff - use common client factory model (instead of direct SVNDiffClient usage) 71d8ba1: svn: Implemented "unified diff" clients (both for command line and SVNKit) e4dc06d: Merge remote-tracking branch 'origin/master' 02a4391: lazy scope initialization in case of big usage view open fba79fe: Slim. Introduce variable test fixed c816eb8: added javadoc d8f4bdd: IDEA-99541 New run configuration type to run Ant get rid of ProcessHandler.waitFor() e3f9e71: javafx: quick fix to switch to javafx css in property starts with -fx-; make css dialects configurable visible when file-mappings are available (IDEA-125020) 3cccccf: file templates: no NPE if exception doesn't contain message 5f0091f: refixed NPE in PasteHandler ea62a1d: NPE in PasteHandler 9ee678f: flusher on low memory should work the same way as periodic memory flusher to avoid loosing updates [r=Eugene.Zhuravlev] 12a7479: Merge remote-tracking branch 'origin/master' 1e48abe: good code red: nested classes inheritance e190be1: fix test 53b9222: processOverlapping should iterate in order cf632d0: do not open API for abuse 7bae702: refactoring - create both RTF and HTML flavours in one copy-paste postprocessor 66d211f: cleanup 4c253dc: refactor API interface 71ea747: make rich copy work for documents with non-normalized line separators c7f67f1: refactoring dc95443: cleanup 74c97e0: remove impact of ADD_IMPORTS_ON_PASTE setting on other copy-paste-related functionality 897f2ba: unused/static imports 873cada: cleanup 5a50486: @Override aa9f4b5: extracted GroovyRunnerPsiUtil f256b8d: moved ErrorUtil to psi 6243ae7: moved GroovyImportHelper to psi 242a795: removed dependency of GrMethodBaseImpl to code style. The clients of GrMethod.setReturnType() should call GrReferenceAdjuster.shortenAllReferenceIn() if they need to 5bdb72f: merged PsiUtil and GroovyPsiUtil f4c8ed4: moved to psi 939b86b: moved method to GroovyPsiUtil 9206109: moved to psi 532fdb0: notnull b6594a3: moved to core 91d1a5b: moved org.jetbrains.plugins.groovy.intentions.utils package to psi 55bb9af: moved to psi b2b65c2: removed dependency on platform 68910bc: moved to psi bda7716: moved to psi 91e946e: moved to core a95cbce: cleanup 7ca3394: cleanup 41b594c: notnull 00f6e5d: correctly identify class usage in dumps 28c6a3c: XML/HTML: move inspection descriptions to proper modules 47f5b9d: Revert "[vcs-log-graph] use Couple" 510ba46: fixed load project test 269e211: Code clean-up. 99f2434: fixed groovy debugger tests a32c4c4: add new test xml map serialization 1b65256: EA-55646: debug output 00964e5: update according to changes in GotoActionModel 9ea4344: rollback 7de12bf: Mono<T> == Function<T, T> 1c4c11b: [svn4idea] use Couple c159007: [testFramework] use Couple 00c700f: [vcs-log-graph] use Couple b8aa01b: [vcs-impl] use Couple 2d2df3b: remove unnecessary static 27c06dd: [ui-designer] use Couple 891b65f: [lvcs-impl] use Couple 9f2118c: [vcs-api] use Couple 31bd437: [properties] use Couple de97b7f: [platform-api] use Couple bbc1d35: [platform-impl] use Couple 7347cd3: [extensions] use Couple fb4d104: [idea-ui] use Couple 756e0ad: [hg4idea] use Couple 5bf1a92: [java-analysis-impl] use Couple ccb6b7c: [java-impl] use Couple c8b9199: [java-indexing-api] use Couple c04909d: [java-psi-api] use Couple d3278e6: [java-psi-impl] use Couple 70fcb07: [javaFx] use Couple eaed3bf: [jetgroovy] use Couple 526441d: [gradle] use Couple 3e1c9d1: [lang-impl] use Couple 7afb583: [dom-openapi] use Couple bffa11b: [debugger-impl] use Couple e9254bf: [github] use Couple 8fc8555: [git4idea] use Couple 187dd78: [vcs-impl] use Couple 2985542: [platform-impl] use Couple 47797e5: [core-impl] use Couple a583560: [core-api] use Couple a8727c8: [compiler-openapi] use Couple 9d30723: [compiler-impl] use Couple 1a54d31: [common-javaFX-plugin] use Couple e25eff2: Merge remote-tracking branch 'origin/master' 3974fdd: Fixed console debug for remote interpreter (PY-12959). db0de10: vfs: .zip file cache reset fixed e677a69: Remove double borders d54e0b0: svn: Refactored RepositoryBrowserDialog.doGraphicalDiff - use correct client factory depending on settings (and not always factory for SVNKit) c7313cf: Merge remote-tracking branch 'origin/master' 18844ff: PY-12810 "imported" urls are not supported by {% url %} tag (fixed quotes trouble) eeab21a: svn: Implemented diff for "url + url" pair for command line 3c6cccf: Data Views specs d47c2cd: EA-56596 - CCE: XmlLanguageInjector$.visitElement 7d729ca: platform: let out/err readers have independent policies e829e8c: store vfs charset in user data 8f05759: IDEA-121961 Debugger: evaluate from variables doesn't include context 0829ee7: better fix for IDEA-125082 90d6990: new inference: separate caching 8148aa2: filter out elements not matching scope (IDEA-125178) b1b6025: extract field from auto closable (IDEA-125141) 827e889: show the notification with a delay to avoid blinking when "too much output" ceases quickly a38bfd3: calculate editor notifications in a single background thread eae74d2: Cache enabling b6b3618: EA-56566 Fix NPE in TaskItemProvider.dispose c77cd7b: Merge remote-tracking branch 'origin/master' 714b3df: fixed PY-12698 Noticeable hang when selecting not yet added virtualenv as project interpreter b44ffe6: EA-56384 Fix NPE in JiraRepository.discoverApiVersion aef1f3e: do not show static node if empty 4c4b111: java-xdebugger: JRuby breakpoints handler a49b8ff: java-xdebugger: fixed tests 31434a5: java-xdebugger: IDEA-125088 Debugger: Evaluate Code Fragment works like Evaluate Expression 11d6bce: java-xdebugger: IDEA-125081 Debugger: Force Step Into works like simple Step Into 7c6f28c: java-xdebugger: allow method calls in quick evaluation with alt 428a04e: use editor font in expression combobox 1b7a152: java-xdebugger: correct context for watches evaluation e4d5f88: java-xdebugger: store java breakpoints in xbreakpoint's user data 3f3fdcd: java-xdebugger: fixes after review a542026: java-xdebugger: use correct context for variables calculation 2a64442: java-xdebugger: IDEA-125035 Debugger: breakpoints: unmute on finish: inconsistencies between behavior and appearance 4f64e19: java-xdebugger: IDEA-125037 Debugger: "Watch method return values" setting label is changed on stop f1de6f7: java-xdebugger: IDEA-125039 Debugger: Throwable at PsiDocumentManagerBase.commitAndRunReadAction() dca55b4: java-xdebugger: IDEA-125038 Debugger: setting field breakpoint causes IAE at SimpleColoredComponent.append() e1a926a: java-xdebugger: IDEA-125044 Debug: Run to Cursor: IAE at XDebugSessionImpl.breakpointReached() c2dc88d: java-xdebugger: fixing tests d369a04: java-xdebugger: avoid assert on context update b53018e: java-xdebugger: fixed breakpoint tests cd4b029: java-xdebugger: no need to recreate java breakpoints dc17bb0: java-xdebugger: do not store empty expressions 36e4354: java-xdebugger: show breakpoint icon when hit for non line breakpoints 9ade5d7: java-xdebugger: add stepping filter action acda84e: java-xdebugger: show extra array elements on demand 563511a: java-xdebugger: no need for extra constant d7a2306: java-xdebugger: correct context for variables calculation 98cb4bd: java-xdebugger: display object id and correct string coloring f882b59: java-xdebugger: show info messages in variables 1d06412: java-xdebugger: show return value on top of variables b1e62e0: java-xdebugger: fixed incorrect frames refresh with enabled filters e86c7d9: java-xdebugger: simplify external breakpoints handlers 764f536: java-xdebugger: fixed exceptions d21c49b: java-xdebugger: avoid asserts 4f439fe: java-xdebugger: static group and this variable cf699a8: java-xdebugger: variables icons 26a0ffb: java-xdebugger: get nashorn frames this way until we integrate fully 3bf4519: java-xdebugger: correctly handle frame change f0b82ee: java-xdebugger: correctly handle session change feb4620: java-xdebugger: lazy value label calculation 0f99ccd: java-xdebugger: avoid gathering variables with resumed context 6073323: java-xdebugger: do not calculate top stack frames for all threads 4b2ff87: java-xdebugger: avoid NPE 0ac53b8: java-xdebugger: fixed dump threads action d9d1c74: java-xdebugger: fixed memory leaks c83bb60: java-xdebugger: tooltip evaluation support 3b0b8f9: java-xdebugger: expressions language selection UI b025aaa: java-xdebugger: removed duplicated debugger editors provider d6299a6: java-xdebugger: correct context for expression 2293837: java-xdebugger: do not deprecate old setters b0f9849: java-xdebugger: fixes after review af29d44: java-xdebugger: store condition with language and custom info 071b912: java-xdebugger: custom java breakpoint handlers 2635efb: java-xdebugger: add to watch support a3b7433: java-xdebugger: View text action support 570305e: java-xdebugger: filter library frames support dbe29fe: java-xdebugger: jump to object source support aef95ac: java-xdebugger: use debugger thread to store descriptors tree 04571c0: java-xdebugger: mark object 439666c: java-xdebugger: set value prototype - minor extra fixes 3c7f48c: java-xdebugger: set value prototype 9265407: java-xdebugger: support of "view as" action 74a63863: java-xdebugger: drop frame action on the debugger toolbar b09633c: java-xdebugger: restore variables tree state when stepping bf02fe4: java-xdebugger: fixed actions order 1c7a3d4: java-xdebugger: fixed thread name presentation 24fb430: java-xdebugger: correctly calculate frames d5d617a: java-xdebugger: avoid ArrayIndexOutOfBoundsException c160771: java-xdebugger: special icon for current thread 61d146a: java-xdebugger: drop frame action f631088: java-xdebugger: do not show empty type dc9789f: java-xdebugger: rebuild on auto variables setting change 223d0ae: java-xdebugger: return correct active execution stack d225fdb: java-xdebugger: jump to source 59a75a5: java-xdebugger: do not create old DebugSessionTab af21fe9: java-xdebugger: pause support 3aade1c: java-xdebugger: "view as" action prototype ad3f1fc: java-xdebugger: init breakpoints on process attach 8835958: java-xdebugger: dump/export threads actions on the toolbar 8ce7361: java-xdebugger: customize data views action in watches context menu 7252d5d: java-xdebugger: customize thread views action in frames context menu 00ab63e: java-xdebugger: customize data views action in variables context menu f2e28dd: java-xdebugger: use xdebugger's mute breakpoints state 1cdd4f7: java-xdebugger: settings popup support ca891ba: java-xdebugger: imitate old frames renderer ef0745a: java-xdebugger: threads tab support - update on select b857507: java-xdebugger: assert not needed 27d67ad: java-xdebugger: threads tab support 60986c7: toString for line breakpoint 2479d8f: java-xdebugger: threads combo support prototype d66fc12: java-xdebugger: watches support prototype d2fe211: java-xdebugger: variables support prototype ef6369f: java-xdebugger: initial commit: - debugger start - java breakpoints handlers - set/unset breakpoints - simple frames view support f4fb687: EA-56555 (diagnostic) 8b27b16: Cleanup (weird exception constructor) 75f96f6: better corners for Darcula a0fae704: Merge remote-tracking branch 'origin/master' 665e0e1: hang on start up 66df65d: rename test methods to run on java 8 (ClassFormatError fixed) 5898e80: Filter out remote sources dir from extra sys path (PY-12958). 0a0b678: hide service information 2b8c333: fixed type annotations restoring (IDEA-124889) ef7c8b9: new inference: inference in terms of inference variable as type params (I) 0bea7ea: new inference: encapsulation 922715c: Fixed buggy calculateExtraSysPath 6133865: CR-IC-5378 add comment on java.io.File.exists usage instead of vfs refresh b2d382e: IDEA-99541 New run configuration type to run Ant 14a4668: EA-56795 (diagnostic) ee0b565: Cleanup (nullability; parameter type) a95b6d6: Slim. Template languages must be over HTML_DOCUMENT element 3c41d20: Embedding Ruby code into Slim. ba802ea: Merge branch 'master' of git.labs.intellij.net:idea/community 3a51776: Merge remote-tracking branch 'origin/master' 37c2e28: Gradle: extra tooling model build error builder added 4874a78: switch off couple inspection 9ad3184: EA-55850 (a constant used is only available since Win7) 56cea62: resources -> src 78e49f7: Cleanup (typo) 7a4ac7b: EA-56033 (early diagnostic) e52b674: cleanup b55f2ac: WEB-6779 JS Debugger / Variables: Automatically show used variables: mutability 4077052: Merge remote-tracking branch 'origin/master' 8b18eb8: IDEA-123484: independent GroovyLineMarkerProvider. Don't suggest implicit trait methods in implementation list 2f60fb3: IDEA-123484: concrete trait methods are implicitly generated in inheritors a7eb2a0: IDEA-123484: abstract trait methods should have explicit 'abstract' keyword 2fbab8a: lazy Object type in GrLightParameter 44eaa05: remove dependency from Groovy PSI to Groovy completion 18fa4ff: split groovy completion contributor into separate completion providers ce1beaf: IDEA-124731 semicolon or curly brace after constants 3a2dfbd: IDEA-124731 enum constants can be placed on several lines with comma placed on the next line 4bdc91c: lazy light PsiType for fast creation from string. Use it where possible in groovy psi 8c44253: cleanup stub generator 46a6910: IDEA-125082 (Weaken intention for LinkedHashSet suggests AbstractCollection) 38ba59f: fixed PY-12964 add path to the interpreter doesn't work f07444f: uniformly handling class loading from paths containing special symbols like spaces 88eb679: Arrangement: store opened section rules instead of start comments a4e42e3: WI-23285 Arranger: sections is keep added (already existed section is not found) 224ff5c: save some memory by not caching constructors in picocontainer; they're not reused anyway 3a25aee: DevKit: add InspectionDescriptionNotFoundInspectionTest.testHighlightingForDescriptionCustomShortName ed33e55: revert changes that made tests hang fedbb1d9: IDEA-124403, EA-55541, EA-55517, EA-49088, EA-49127 soft wraps recalculation issues 6112926: EA-55847 - AIOOBE: ImmutableText.charAt d2d6f45: cleanup (following review #212) e4f6aa4: EA-56779 - IVFAE: PersistentFSImpl.getFileId 2004f6a: improve description 16bd2ee: add "Suppress for 'Tests' scope" quickfix to "Prohibited exception caught" inspection f96b846: new "'BigDecimal' legacy method called" inspection 2be4b97: better layout for combobox eb6acaf: svn: Refactored RepositoryBrowserDialog.doGraphicalDiff - moved diff logic for "url + url" to SvnKitDiffClient ed5d225: svn: Refactored RepositoryBrowserDialog.doGraphicalDiff - do not wrap obtained changes in custom UrlContentRevision (see c38efc0eaffe39c4ac4250cdd4c2615a321db906) - changes collected by SvnDiffEditor correctly work with "Show Diff" action fb0c65a: InternetAttachSourceProvider: don't sync refresh from outside edt (EA-56768) 9770742: EA-56761 - PIEAE: ClsRepositoryPsiElement.getManager 8317a56: EA-56519 - CCE: PsiDocumentManagerBase.handleCommitWithoutPsi 2ecda67: vfs: create handler as soon as archive root is loaded b9b3a28: Cleanup (unneeded second refresh dropped) 00140af: IDEA-124361 Suggested variable names for Optional variable needs improving b92c65c: svn: Show "changes viewer" dialog even if changes collection is empty (dialog will display necessary information message by itself) 90a5b72: Merge remote-tracking branch 'origin/master' 6eb4127: fixed PY-11909 problem with extract variable a9d6cb1: svn: Moved several utility methods to SvnUtil class 71177eb: fixed PY-11922 pytest problem with marker expression containing spaces f895885: [log] IDEA-124546 enable "Edit Source" from commit list 3a483ab: [vcs] Delegate to the fuller constructor 8bc8177: fixed PY-11929 Insert type assertion should be disabled for references introduced in dict comprehensions de5a5e6: Add new icons for new arrangement section rule 19d7bf9: Merge remote-tracking branch 'origin/master' b61e49e: [log] Trim the hash in go-to-hash action a351cff: fixed PY-12037 long path cause wide menu 5972053: touch file to recompile 3e8ef45: continue WEB-6779 JS Debugger / Variables: Automatically show used variables 0c8bcaa: init WEB-6779 JS Debugger / Variables: Automatically show used variables ce66c08: compute memberFilter only once 1701927: IDEA-124688 Console scroll to the end - jumps on the end of the line sometimes 287390b: be prepared to event log changes when expiring notifications (EA-53620 - IOOBE: MarkupModelImpl.addLineHighlighter) 296a5dc: Platform: deleting shortcut from bound and inherited action fixed d0e540a: IDEA-106517 Exception on welcome screen when using speedsearch 5978682: svn: Refactored DirectoryWithBranchComparer - SVNKit diff logic moved to SvnKitDiffClient fc13a83: IDEA-116057 second-keystroke popup 1fe493a: fixed PY-12120 Invalid caret position after Enter press in unicode strings 69b6e2e: check for UserDataHolder directly 5cd9a8f: svn: Refactored SvnDiffEditor - use File instead of VirtualFile 8511042: diff: add icon for synchronized scrolling 8e9af01: js postfix templates: if, else, return, throw a309ba7: Remove Open Directory action. 23db467: use Couple fc77edb: fixed PY-12195 Changing signature of decorator removes '@' 6a1b621: cleanup 5653e4a: IDEA-124974 NPE from Switcher if 2 tool windows have the same first-strike char f74c773: do not log refresh stacktrace 6da5c0c: OC-9871 fd6d2fa: Gradle: tooling version updated in libLicenses.gant 0290479: use Couple e44b143: use Couple baecc09: use Couple 3a60ce3: use Couple 47f6b1b: IDEA-125121 MacMessages: NPE when parent is null 637a597: do not expand stubs when evaluating getContextName c39f3b1: Gradle: update Tooling API version: 1.12-rc-1 => 1.12 bbfc26b: IDEA-125119 NPE if message for MacMessage is null 5991df3: IDEA-124839 Gradle sync reports "Error:You can't change a configuration which is not in unresolved state!" and "Could not resolve all dependencies" 19c251b: fixed PY-12313 Incorrect __file__ value when running tests in a folder on Windows f9d754d: IDEA-124839 Gradle sync reports "Error:You can't change a configuration which is not in unresolved state!" b186522: @NotNull 4e90ea9: dependency fixed 3e98719: removed lang-api dependencies e5ba40d: removed dependency on platform-api 19444a1: notnull 4a8f5f8: @NotNull 9accb24: moved to core 38f3c11: moved out of psi c4390c4: Fixed IDEA-122488 IDEA 13 1 not using default font [CR-IC-5349] 8667c40: do not update when root name not changed 4569c83: fixed PY-12369 Code Inspection fails for negative default parameter 20c2b28: update plugins: check plugins according to the new version to be patched (IDEA-78385;IDEA-124308) 5f74804: IDEA-124543 sout template formatting f0918e0: fixed PY-12401 inline refactoring looses comments 851fd3b: IDEA-124305 JSP: Import statements suddenly disappearing every now and then 850ea16: typo acac62d: Cleanup (locale conversion; properties grouped) 21152ea: Cleanup (test simplified) a979900: vfs: core JAR FS migrated 4bf38d4: vfs: archive file system 96aad22: IDEA-64312 Maven: frequent .iml changes after exclude/source folder updates; project leak fix 607ba58: Platform: keymap tests cosmetics c6354dd: accept as cleanup tool 85f72e1: IDEA-123379 (Unable to generate toString() with template "+ super.toString()" if sub class doesn't have any variables) 2e1a1ab: fold some IJ boilerplate in console fd7f7a6: remove PSI event nesting because of eager PushedFilePropertiesUpdater (EA-56525) aafb2dc: use ensureValid (EA-56712) 5494673: TodoIndex supports snapshot mapping e676714: myContents shared snapshot index can be reset via clear (due to todoindex dependency on settings) 55f9327: use TW stripeTitle if needed. skip extra popup-step in case of one item. 8b36033: separate NavBar action place into popup and NavBarToolbar places (IDEA-124199) 3e3b44b: fixes for review comments 136d116: move normalizeMemberName to debugger view support b3675f7: IDEA-56033 Mercurial: add support for reverting an uncommitted merge 2b804da: IDEA-124393 Mercurial: Log: user filter applying causes empty log 27272f3: EA-55721 - assert: DbElementImpl.getDataSource 8c49254: EA-56008 - assert: DatabaseVirtualFileSystem.getProjectSafe 42cd37cc: related to EA-56292 - NPE: ComboBoxFieldPanel.createComponent c4a273f: EA-56671 - E: Runtime.syscall bffc362: adjust offset while looking for selector 6ef97d6: EA-56674 - IAE: DbFindUsagesHandlerFactory.canFindUsages c96459f: postfix templates convert configurable postfix list to tree & change store strategy 8481ffc: IDEA-118554 (Inspection suggestion: BigDecimal divide() without specifying a scale and/or RoundingMode) 69d1364: batching tasks to reduce the number of events posted to EDT c4e2bbe: remove useless HideFunctionValuesAction (now we correctly grouping functions) a862f08: Merge remote-tracking branch 'origin/master' 2386bed: testdata for IDEA-24479 760d73e: use manager.getProject (CR-IC-5302) 5c11efb: Merge branch 'master' of git.labs.intellij.net:idea/community 5ab59ac: EA-55808 - ISE: ComponentManagerImpl.getPicoContainer - a more robust fix 543d9f6: Merge remote-tracking branch 'origin/master' 5b53af1: Merge remote-tracking branch 'origin/master' 8de4646: IDEA-123896 Navigate -> symbol action doesn't find overloaded methods 7dc78a8: IDEA-124772 Code completion in import statement: suggestion shows package from "java.lang", but when it's selected "java.lang" prefix isn't 7e77d3d: Merge remote-tracking branch 'origin/master' 4b6debd: Merge remote-tracking branch 'origin/master' ad58ba7: results of code cleanup 1c55611: do not inspect binary files 0feba83: warn about raw arrays passed to varargs method (IDEA-16977) b32b333: assignment fix for super wildcards (IDEA-125031) 6e2f355: EA-56686 - NPE: UnusedDeclarationInspection$$.runInspection afe28ba: provide editor with project - no harm (IDEA-124656) a02113f: Remove class. 304f5dd: IDEA-124097 Structure tool window steals a focus 174a488: Merge branch 'master' of git.labs.intellij.net:idea/community 6a0d559: Remote libraries stored in a directory separated from skeletons 0f964da: aware of not sourcemap file adfec67: fix NPE Field is not nullable: className a0a681e: IDEA-124956 PsiShortNameCacheImpl.getClassesByName() is O(N^2) 5b4eafc: Rearranger: allow nested sections processing b638b32: Merge remote-tracking branch 'origin/master' c7bcc11: make "Unpredictable BigDecimal constructor call" inspection and quickfix more accurate 6ee9d29a: read saved index data by default + save empty indexed results ebece42: WEB-11680 chrome debugger doesn't start due to internal exceptions e2ceeec: WI-4722 Debugger: Ability to skip certain functions with step into. b63b703: continue WEB-11775 'Do Not Step Into' groupings ec71671: cleanup c309c6a: cleanup 0abe2e1: fix tests 51e2856: Merge remote-tracking branch 'origin/master' 1edc667: invalid psi range diagnostics (EA-49842 - assert: ExtendWordSelectionHandlerBase.select) dd4697d: IDEA-124379 Avoid completion lookup glitching 7732843: IDEA-85517 Option to collapse by-default manual defined (editor-fold) regions [CR-IC-5228] 095153a: set explicit locale environment: GeneralCommandLine.getCharset() and LC_CTYPE should be the same, remove dependency on project and application default encodings f4cd58b: DevKit: add InspectionDescriptionNotFoundInspectionTest 75ef7eb: fixed EA-53387 - CCE: PyElementGeneratorImpl.createParameter 440a2e5: Merge remote-tracking branch 'origin/master' f1842c2: fixed EA-56204 - IOOBE: SegmentArray.findSegmentIndex d5747a8: fixed EA-56667 - CCE: ReplaceListComprehensionWithForIntention.createForLoop f72f65c: DevKit: simplify/remove dups in DescriptionNotFoundInspectionBase, add tests 520268f: fixed EA-56673 - IAE: ChangeUtil.copyElement 6edaf52: fixed EA-56683 - NPE: PyStatementMover.moveTheSameLevel e78a1f8: Postfix cleanup af4c18c: fixed EA-56684 - NPE: PyStructuredDocstringFormatter.formatDocstring 51255dd: Merge remote-tracking branch 'origin/master' a6f328b: code cleanup available as intentions (IDEA-38653) 0e05ee3: Fixed a typo. d350749: IDEA-64312 Maven: frequent .iml changes after exclude/source folder updates a34f27b: Fix output handling. 6034330: DB: improve find usages grouping 0756490: scopes combo: filter duplicates, suppress internal-modules 2a680d2: DevKit: extract PluginDescriptorChooser, improve plugin.xml candidates list presentation, fix dumb mode error 598528c: Merge remote-tracking branch 'origin/master' c64f813: hide empty vcs scope when vcs is not configured 2e0f935: update "Select word at caret" to "Extend Selection" in tips (IDEA-124727) cc92f9a: use StringUtil.trimStart() CR-IC-5322#c26136 dfe9c11: DevKit: do not search in non-XML files for ExtensionPoint DOM usages CR-IC-5321 2fa4de5: ActionTestCase kicked 94c3177: fix puppet tests: clear extension cache on point registration 1d3458a: copy reference for directory: copy the relative path from some root (IDEA-92885) 3f1567e: enable CopyReferenceTest.testMethodOverloadCopy dffcdb3: rename "Select word at caret" to "Extend Selection" (IDEA-124727) 2dc0e67: IDEA-124935 Completion font issue on Spring b210fef: private EditorHyperlinkSupport.HyperlinkInfoTextAttributes c394f80: cleanup b3840bc: Cosmetics b05ddda: DevKitBundle: use AbstractBundle 847d67f: continue JS Debugger test framework — stepping spec 578a54b: cleanup cad6541: IDEA-125004 DevKit: support plugin.xml <depends> "config-file" 873fa26: Github: remove test a7ae56f: Github: do not catch OperationCanceledException explicitly 63ef800: EA-52410 Github: do not throw runtime exception on parse error fad9ec0: Github: fix dialog type 3c53f98: Github: remove final 0c7b058: Github: catch runtime exceptions in modal progress f08ff4c: Github: GithubFullPath case-insensitive 0204ba2: access to super members fixed (IDEA-124985) 7ab104a: IDEA-124985 74f3980: IDEA-64312 Maven: frequent .iml changes after exclude/source folder updates 11d2cc4: restore EditorHyperlinkSupport.getHyperlinks for EA 5f8a926: let EditorHyperlinkSupport.clearHyperlinks clear the hyperlinks 9219a05: Attach Debugger in Python console. e85f16d: IDEA-64312 Maven: frequent .iml changes after exclude/source folder updates c5c6471: EA-45164 - more TypeConversionUtil.getSuperClassSubstitutor diagnostics 28d0e2e: javadoc for clearHyperlinks deprecation 1fe25c5: EA-54479 - CCE: CustomFileTypeCompletionContributor$.addCompletions afba911: Emmet: use couple instead pair 3d63853: Custom templates: unify retrieving offset approach 0badce5: png optimization df16471: move generated icon classes to new generated roots 420255e: patched AbstractClassGenerator from CGLIB moved to util module because it's used from InstanceofCheckerGenerator class 92d4c4c: "Node.js Express App" doesn't relate to "Static Web" group f78f659: IDEA-124877 Run Configurations: Allow sort configurations under type or folder node (Exception fix) 7272ef6: remove copyright from intellij splash and about dialogs be38201: manually render copyright 9c0ccb4: +copyrightForeground f4cb6a8: Merge remote-tracking branch 'origin/master' 35f0811: fixed PY-12915 No project interpreter found after project creation aeb677d: Start plugins wizard #28 (be Ubuntu-friendly) ad086fe: Merge remote-tracking branch 'origin/master' c78ae5f: cleanup tool -> inspectionEP b52cf11: Fixed wrong usage. 421efd0: we must avoid use UUID.randomUUID — can cause long network calls 0ea9f4b: https://groups.google.com/forum/#!searchin/netty/netty$204.1/netty/8jf6SPFiN6g/nLg7opwUsxwJ 503f8cd: IDEA-124871 Can't build project if its name contains colon: convert project only when it is used as directory name 5bf5dd0: static methods in interfaces can't be hidden in subclasses (IDEA-124921) ec8f194: Extract execution timeout registry key f599645: fixed PY-12920 **kwargs in constructor parameters disappear after "Add super class call" quick fix 6a9db3b: Extract execution timeout registry key 26baf8f: extract superclass: pass target class in after data 838771a: code cleanup: allow to choose another profile; filter view to show cleanup tools only 2a25c8c: code cleanup (initial) 246bf70: Merge remote-tracking branch 'origin/master' 6e62c61: reverted back dc0ad20 due to PY-12904 IAE: Equal objects must have equal hashcodes 1eb6f78: - do not set databuffering if it was already set - make notifyAll in leave of StorageGuard if somebody is waiting 25ccd86: less lockStorage for put / get operations + store value file offsets in btree enumerator directly 1c8aaa4: lazier reparse range calculation b488d43: incremental reparse should happen only on nodes fully covering the changed fragment (EA-54262) 66da2af: more diagnostics and possible fixes for EA-46770: don't let code fragment documents be gc'ed 79ff607: EA-51141 - IAE: CreateFromTemplateAction$.getActionName 277ffe0: EA-54226 - simplify JavaFileManager, remove "access only after startup activity" assertion 4b22fa6: EA-54691 insert completion char in write action f4f67d2: EA-56504 - read action b515187: less lockStorage for put / get operations + store value file offsets in btree enumerator directly f0bdde8: move serialization of value container inside valuecontainer + added code for saving to use existing bitset used for large index values f0dcc74: magic number moved to registry e211432: check validity of RangeHighlighter 21afe13: [vcs] IDEA-120737 Change Merge button caption to Merge... c5bcb11: [git] IDEA-118125 change url for Detached Head information 60036d0: PY-10016 Namespace support in PyCharm 2.7.3 c02eade: DevKit: highlight <extensions> "xmlns" as deprecated 2b0d162: Devkit: remove non-stub test data 34d6a8e: include PIEAE invalidation trace as an attachment 571bdea: EA-56524 - check for virtual file validity when searching in its document d0a9cac: EA-56551 - don't expand structure view for invalid dom elements 7a6616d: EA-56593 - FindInProjectTask read action 73d32e6: move TraceableDisposable's own trace to the bottom as the least important 3fb8ff0: continue JS Debugger test framework e426c3e: Platform: redefined shortcuts for bound actions work in inherited keymaps + such shortcuts is shown in the UI tree, in spite of being 'bound' (OC-9826) 7859a0d: IDEA-124960 DevKit: "register extension" fix for EP defined in custom plugin bce419f: Devkit: rename/move RegisterExtensionFixProviderTest missed file 9359908: relaxed diagnostics 37894fc: Devkit: rename/move RegisterExtensionFixProviderTest 544ab30: CR-IU-696 - use activationComponent 0194c34: Devkit: add RegistrationProblemsInspectionCodeTest 92e0c60: extract PluginModuleTestCase d5a13c3: rename 28ea4b5: Don't evaluate debugger vars in EDT. 5529340: Fixed args. 5d4bea7: Merge remote-tracking branch 'origin/master' 7846df8: Backported more Pydev stuff including Stackless debugging support and AppEngine debugging fix. 5214a06: DevKit: add XmlRegistrationProblemsInspectionTest 3aa92a1: Merge remote-tracking branch 'origin/master' 3ea1686: Backport some minor Pydev fixes. f80095e: Rename modules. 8e6e512: [log] Don't send performAction request to the graph if below the log fad27ec: Commit document before creating callback fd61469: Allow emmet preview for xmlGenerator only abe4c7e: Fix Emmet preview for big abbreviations c8bb209: Fix emmet preview in injected fragments ddcf07c: Live templates: add diagnostic f5da90c: fix tests on linux (filename case) 5743b43: Merge remote-tracking branch 'origin/master' 48d9080e: Ability to perform force update when there are uncommitted merge added 001903a: clearer test data file name 11fdf63: Merge remote-tracking branch 'origin/master' e72fd1a: Fixed conversion. af0ae88: for CR-IC-5142 bff450e: make test light e3d5657: IDEA-124876 ("Mismatched query and update of StringBuilder" false positive with lambda method reference.) 3f9ce9c: IDEA-106749 DevKit/ComponentNotRegisteredInspection inspection does not handle optional dependencies properly 39f062f: store complete map results for snapshot supporting indices 743ae27: Remove 'Support' from settings name. d6c5e1f: Create thread on attempt to suspend on non existent thread. ad86a82: Merge remote-tracking branch 'origin/master' d42e997: We treat not started threads as alive, to support debugging of Python 3.4 threads created by start_new_thread. cfd0595: IDEA-122909 Mercurial update: clean option 6aae6da: Save all documents added before update and merge actions from branchPopUp 206d45f: SOE 51aa5b4: NPE fix bee86ca: new Pair<TypeA, TypeB>(a, b) -> Pair.create(a, b) d659703: DevKit: add ComponentNotRegisteredInspectionTest 28dce08: IDEA-124032 IDEA plugin: Can't find com.sun.xml.internal.messaging.saaj.soap.LocalStrings bundle command line property set to true by default 262d5a9: IDEA-124871 Can't build project if its name contains colon b3557e9: refactoring postfix templates 20fbada: IDEA-124032 IDEA plugin: Can't find com.sun.xml.internal.messaging.saaj.soap.LocalStrings bundle added command line property (false by default) 2d0c2f9: don't count 'runtime' dependencies when showing a warning about circular dependencies e5e5915: IDEA-124859 Runtime module dependencies are not compiled when run configuration with dependent module is launched c1980f4: check Pair types with actual parameters types 16906b2: IDEA-118714 Problem in automatically changing branch on tasks switching c177312: IDEA-123898 IntelliJ Configuration server : create/manage JetBrains account error 7370dd9: new Pair<TypeA, TypeB>(a, b) -> Pair.create(a, b) inspection for lang level < 1.7 136ade1: fixed PY-4479 Add field to class: select created field for editing, not passed to constructor parameter e7f0c33: add both add field and remove param QuickFixes for the param in __init__ method 00b00b6: Merge remote-tracking branch 'origin/master' 2d20acb: Merge remote-tracking branch 'origin/master' 3b0a609: track PsiFile invalidation trace 68ffeb6: use ensureValid (EA-55092) a51e36f: add PsiSubstitutor.ensureValid (EA-55730, EA-55738) 9f4593b: use Couple in util a249d4e: fixed PY-12825 Remove unused parameter: do not allow to remove last argument after star when refactoring function with keyword-only arguments 4ffed7a: IDEA-121171: fix failed tests c053844: convert testng -> junit e5b9d92: use Couple 5543b2f: use Couple d156a40: convert testng -> junit 43ba882: inspection and quick fix for Couple class 7411352: testdata fixed 4d5b798: restore test 74ff7fd: testAssistance -> DevKit 03640d1: EA-56450 - CCE: JavaSuppressionUtil.getInspectionIdsSuppressedInAnnotation 5455834: IPython should be enabled by default. 25a4149: Fix option label text and size. 514ddf8: Merge remote-tracking branch 'origin/master' b69e716: Return None in case of unknown source. 328fb7d: don't report ignored ioexception f0a2a53: No need to inform about failure. 541a3d3: fixed literal conversion. 11e19f2: IDEA-124877 Run Configurations: Allow sort configurations under type or folder node 6e84490: Do not delete inserted semicolon for statement-based postfix templates 7b768e0: Simplify return postfix template 9e18381: Reformat postfix templates tests f7abe52: Delete dummy semicolon after postfix template expansion 75264a6: Cleanup postfix templates 337ddff: TemplateManager -> service f6cc0f9: use ensureValid (EA-56464, EA-56467) 2b3b0f3: EA-55808 - ISE: ComponentManagerImpl.getPicoContainer c685b88: fix "already disposed" from EditorNotifications de62ac0: Devkit tests: add @TestDataPath ed97d68: PluginXmlDomStubsTest: move test data 7f98202: PostfixTemplateDescriptionNotFoundInspectionTest: rename/move test data 6d49cc4: extract ExtensionPointDocumentationProviderTest aebd2ef: PluginXmlFunctionalTest: cleanup inline test data 2bdefc7: No sets language without project (fix for ui-designer creating over default constructor) 4d0fde11: svn: Refactored SvnVcs - moved ourBusyExceptionProcessor to RepeatSvnActionThroughBusy 81f13d8: PluginXmlFunctionalTest: fix enabled inspections 8656e4d: rename/cleanup InspectionMappingConsistencyInspectionTest 2e6a042: extract DevKitImplicitUsageProviderTest 29ac0ab: PostfixTemplateInspectionTest -> LightCodeInsightFixtureTestCase 494bc38: OS X: fixed NSString and NSOpenPanelDelegate_ leaking add7462: Fix indentation to conform PEP8. 382ab4b: DOM stubs: exclude some dom extenders from stub building 72d5787: EA-56189 - ISE: LocalCanBeFinal.checkCodeBlock 788f777: EA-56308 - NPE: UnusedParametersInspection.checkElement 6dfed9d: EA-56333 - assert: PsiMethodReferenceCompatibilityConstraint.specialCase 606d8ea: EA-56286 - AIOOBE: BringVariableIntoScopeFix.invoke 659e657: svn: Refactored SvnVcs - removed old code that deletes previously used notification groups fec2014: svn: Refactored SvnVcs - removed unnecessary logging 33da31b: make dumb aware 2c7c9e1: IDEA-124663 (Refused Bequest inspection should honor @OverridingMethodsMustInvokeSuper annotation) c37b1a4: Merge remote-tracking branch 'origin/master' 08cf27c: select exact match in install package dialog 64f7299: read access d83af54: accept raw substitutors during diamonds inference (IDEA-124836) 16b6498: [git] fix some editable comboboxes 27a2e0f: [log] Fix transitivity in compareTo 7e86caa: DOM stubs: exclude some dom extenders from stub building bf339b6: Repository refresh added after pull action 8e41d7d: use Couple a285781: +getEmpty b4b6cc6: fixed PY-12660 PyCharm adds quotes in runconfiguration and fails 5f75f69: svn: Refactored SvnVcs, SvnUtil - removed unused code, warnings fixed, code simplified 85c621d: svn: Refactored SvnVcs - updated deprecated VcsListener registration 94af0a5: Merge remote-tracking branch 'origin/master' a26b016: easier logic for indentation in console and fix PY-12542 209eb14: fix for PY-12542 and improve indentation in console logic 9b97079: fill PyConsoleIndentTest with new tests and improve old 2aa7076: fix console crashing on IPython completion (PY-11645) 0dbd022: editor now save file on transition to Python Console (PY-12487) 265a763: move console startup commands to Starting script field in Python Console settings (PY-11728) 74aa6cc: add checkbox for disable IPython in Console settings (PY-7425) 5f5a2bb: restore EditorHyperlinkSupper.addHyperlink for EA binary compatibility af43068: OC-9742 e685f38: less disk operations on integrate 9db3107: fix expected wildcard types f29a167: fixed PY-12679 Remove redundant parenthesis: false negative for duplicated parenthesis in complicated and or statements cc743c3: testdata for JDK-8042508 1ab69ce: stream migration: missed qualifiers restored (IDEA-124820) 8862613: variable type by expression type suggestion (IDEA-124816) 909915f: Merge remote-tracking branch 'origin/master' dc0ad20: fixed PY-12698 Noticeable hang when selecting not yet added virtualenv as project interpreter f91fcdb: svn: Refactored SvnVcs - SVNKit related initialization logic moved to SvnKitManager b67eac0: svn: Refactored SvnVcs - encapsulate access to configured ssl protocols fa6941f: svn: Refactored SvnVcs - inner classes moved to separate files (and renamed) 0da2c6c: svn: Refactored logging logic in SvnVcs - code simplified, duplication removed 250b00c: IDEA-124250 Mercurial branches sorted in push dialog 17bf1db: ignore @org.mockito.Captor (IDEA-124802) 17e28ba: cleanup invalid fold regions (fix console leaks, IDEA-124626) d2ead52: move postfix templates to lang-impl d13a4e1: Emmet: add tests + fix existing ones f9e13cb: Emmet: fix preview for abbreviations with 's' filter 6799aa2: Emmet: move calculating template text into hint alarm b6f41b4: Emmet: parse incomplete more/climb abbreviations 3bc5114: Dispose hint on inner editor released d28aae1: Emmet: performance improvement 0ef5647: Cleanup emmet generator 88dcca7: Emmet: fix logging message 83deceb: Emmet: add new action for preview 14b4449: Fix typo b333197: Emmet: performance improvements, add segments limit. 3d5fcbc: Emmet: show new preview only if it's enabled in settings b53ff16: HTML: enable autopopup after < and & only be5c39d: Brand new emmet preview c8ec330: Extract logger 6ca1101: fixed PY-12786 Python Interpreters: extra space in configuration popup from project creation dialog 1a15783: fixed PY-12824 Remove unused parameter: usages in function calls are not updated 03a2ae2: IDEA-116630 Run/Debug button disabled sometimes after breaking make process (and hanging thread) 07613ed: svn: Refactored SvnKitManager - @NotNull, removed duplication 2c91e9a: restore deprecated EditorHyperlinkSupport.clearHyperlinks for broken plugins 7c1c4b1: fixed PY-12825 Remove unused parameter: do not allow to remove last argument after star when refactoring function with keyword-only arguments 520b4be: fixed PY-12826 Remove unused parameter: remove references in the docstrings 2311a48: some additional checks for consistency b79e433: svn: Refactored SvnVcs - methods related to SVNKit clients/repositories creation moved to separate SvnKitManager class 73c5925: better "cannot create branch from repository with no commits" problem handling it was unclear why "Create branch" option is not available for just created repo. b28779b: IDEA-124570 (diagnostic) 65e5214: merge EditorNotifications requests, update automatically on dumb mode changes 4a210b0: IdeaPluginConverter#getAllPlugins: get rid of isIdeaProject() call (DOM stubs interfering) 87b041d: move postfix templates descr to resource-en 7ef1c6d: svn: Removed unnecessary SvnUtil.formatRepresentation 4c7c29f: Run/Debug buttons stay disabled, thread hanging if external tool configured as 'before launch task' fails to start. 8b762a5: Merge branch 'svn_18_3' 7ee2226: Merge remote-tracking branch 'origin/master' b44a1bc: Removed unnecessary EP, introduced Rename Handler for Python Magic Literals: fixing some tests 6c5b423: revert IDEA-123956 Anonymous class formatting moves all args to the next line (32ae79905cb025f6bc213a925f1f4e58e9d6b8f7) 404cf1a: Merge remote-tracking branch 'origin/master' f0ac2bd: unnecessarily qualified statically imported elements: do not ignore chained calls (IDEA-124806) 6f548f2: skip tests under resources roots 51e7e1c: compiler configuration: distinguish compilable resources (IDEA-124599) 6a76a7e: ignore deleted custom repositories (IDEA-124796) a32723b: postfix template description inspection + tests 85f2823: remove alarm. Make SE faster 32ae799: IDEA-123956 Anonymous class formatting moves all args to the next line [CR-IC-5212] 6094264: Cleanup (unneeded interface) 899e7e3: [git] IDEA-124052 Support remote refs w/o a correspondent remote + test 172a3f9: [git] Don't log error in case of empty config file - it is allowed 95468ea: [log] Don't report the error too often 09f5029: [log] Fail safer if no refs were found at some head commit ea5506c: WEB-10560 Debugger: second Mute Breakpoints invocation doesn't work b967e4a: removed extra unneeded delegate 815a632: for given fragment: calc hash code once and do not use wrapper CharSequenceSubSequence for interning store CharSequence into Map of int -> CharSequence+ 06778a8: cleanup e01a5af3: initial d197ca8: reformat only changed text checkboxes are enabled (IDEA-121171) 1c6ba24: Start plugins wizard #27 cleanup 78e7840: WEB-12106 node-webkit crashes when opening developer tools 61b298f: ^461 don't create invalid range marker 5790679: getter invocation in case of object-backed scope 2a38f58: IDEA-115737 Mercurial problem on Windows when repository replaced right inside disk directory. 7d53080: Merge remote-tracking branch 'origin/master' a7bb442: Merge remote-tracking branch 'origin/master' 459d870: ignore @org.mockito.Spy (IDEA-124802) efa4d64: junit 4 library setup (IDEA-124780) 85f6ea1: IDEA-121171 Reformat only VCS changed text - does not work when editor is not opened 765dacb: cosmetics 753dd85: do not remove contents added by other subsystems, which were run independently from any compile session (e.g. ant build) 6e20824: capitalization f09a084: ensure cancel definitions search on popup closing 95e2ed2: Merge remote-tracking branch 'origin/master' 420f392: WinPty libs for Win XP. 161dd99: Removed unnecessary EP, introduced Rename Handler for Python Magic Literals: fixing some tests e593086: remove unnecessary file f585fcd: make test light 0e4f67f: IDEA-95363 ("for loop replaceable" inspection error) 1e1bb69: fix compilation 3078cb5: restore com.intellij.openapi.roots.LanguageLevelProjectExtension.reloadProjectOnLanguageLevelChange as deprecated ae82d08: IDEA-124688 Console scroll to the end - jumps on the end of the line sometimes 5348fc6: IDEA-124644 Comparison of negative zero with positive zero incorrectly marked as always false 0897305: AIOOBE (IDEA-120790) 86141d8: assertion e461a9bc: IDEA-124755 "Unnecessary {@inheritDoc} Javadoc Comment": do not warn when additional tags are present 4e13faa: Fixed IDEA-118781 Eclipse code style import: White Space: some categories are not applied b306260: Fixed IDEA-124647 Quick switch scheme > switch code style scheme does not work db2e799: don't clear cache for disposed MessageBus, fix tests 4c5d8e6: a higher output threshold for "Too much output" in console to avoid this message on long command lines 5b27a1f: navigate to function source: respect our navigation policy 1a04727: Merge remote-tracking branch 'origin/master' 288ccfa: most specific check: accept lambdas when target type is type parameter (IDEA-124725) 78e9bb7: type parameters should not cause deprecated constructor warning to appear (IDEA-124689) 91f6308: redundant suppressions: take into account alternative ids (IDEA-124690) a2a076c0: lambda -> method ref: reject anonymous class replacement (IDEA-124748) dc73135: accept static methods with body in interfaces (IDEA-124745) e4a77b6: check suspicious ConcurrentHashMap.contains (IDEA-124698) 35206e4: uncomment testdata 2ae7053: check inferred type test 4cefdc5: testdata for IDEA-124547 51f1e0e: add option to ignore specified AutoCloseable subtypes f8d2553: find field in superclasses also 747928f: fix broken readSettings() logic 83f842a: make magic checkbox work on private fields dac9905: remove faulty annotation 24bdcbf: DOM: optimize JavaMethod annotation handling dcdbc00: move MessageBusTest to platform-tests to avoid cyclic dependencies involving util 1da0bf9: save a bit memory on non-root message buses, relax test expectations a bit 0b888e5: IDEA-122914 (unclosed zip files) cf649f8: [git tests] Dump to stdout if the test failed 9214eb2: [tests] Move enable debug logging for certain categories to a common place 32597b1: better java doc 2ec1705: fixed PY-12698 Noticeable hang when selecting not yet added virtualenv as project interpreter d87049a: Merge remote-tracking branch 'origin/master' bc78e99: RunConfigurationExtensionsManager API improved 8d20600: Cleanup (obsolete logging) 4a61e1a: Show debug command line action renamed (PY-12835). 4725ae6: Merge remote-tracking branch 'origin/master' 21de2af: fixed PY-12848 Adding local Python SDK does not work c1c98cb: Merge remote-tracking branch 'origin/master' 7bd7aae: don't show hoisted variables 6de7d54: move BasicDebuggerViewSupport up 11656b8: init: don't show hoisted variables f1b95b5: ColorChooserIntentionAction.isInsideDecodeOrGetColorMethod: use constants 00ee9ed: Merge remote-tracking branch 'origin/master' ce4bafa: Until build moved forward. 2806dd8: OC-9570 OC-9663 0f15b6d: restore the ability to clear console from any thread bb44094: IDEA-124646 Option to turn off "compilation successful" popup adac2da: style: optimize if-statement and assignment c32cafb: style fcc2f18: Remove code duplication. 58be81d: Removed unnecessary EP, introduced Rename Handler for Python Magic Literals. b2c7dea: fix console highlighting of lines added one by one, dispose range marker 56beb0e: take into account buffer overflows when calculating console fragment to highlight & fold 9065b24: be less public in new EditorHyperlinkSupport API 5f39988: clarify a bit when hyperlinks & foldings are disabled in console 18fdcfd: disabling of foldings removed 84162a7: continue processing when the output stops 97474ce: revert of condition 358ff50: continue processing when the output slowed down under the threshold b19c269: more eager disabling b788f32: removed todos, no issue here. 88ead50: removed manual action e26bb7f: continue processing from last location - commit fix 15d968a: continue processing from last location 03969ac: removed myHighlighterToMessageInfoMap f60543f: disable console when there is too much added text removed EditorHyperlinkSupport#myHighlighters list which seems redundant and would need some smart clearing. 9d3bfdf: little experiment c572e4a: ^461 revert: we must create lazy range marker delegate on document changed, otherwise invalid delegate will be created b828042: background notifications: cancel on file invalidation; don't leak e429328: cache editor char width a8e14ae: relax testStaticImportInTheSameClass expected timing 676f08a: IDEA-124317 super class method is not shown in basic and smart completion, while accessible a655925: ability to serialize internal classes 51fabf9: cleanup fe4a711: rename to BasicDebuggerViewSupport 0fa7a11: rename to RemoteVmConnection a82fe46: init WEB-11968 Support debugging with embedded Chromium using projects such as CEF3 d3d775b: update editor notifications in background 2a77c0f: maven tests: tearDown more f0a6a44: IDEA-124476 (slf4j parameterized logging inspection: add option to only apply to certain log levels.) 54ae382: we must create lazy range marker delegate on document changed, otherwise invalid delegate will be created 0c7dbd9: cleanup 991f719: we must check getLine() at first, because getOffset() can cause dramatic side effects 5cdeb11: ^192 fix selection d652d59: done WEB-9842 Node debugging: Hitting a breakpoint with a local variable in scope that is a large buffer will cause the debugger to hang for a _long_ time WEB-9834 Node.js debugging: variable value calculation takes a while WEB-1892 NodeJS, Debugger: deadlock after stack frames has emptied WEB-7945 clustered view of Buffer class 73a6343: init: move getIndexedProperties to ObjectValue 3b4ad30: IDEA-124593 (Inspection "AutoCloseable used without try-with-resources" flags System.out.printf) 4290300: IDEA-124654 (replace with chained append() calls gives wrong result when the object is unknown) 4b68768: drop unused property 28c75d2: remove check covered by "Variable is assigned to itself" inspection (IDEA-124559) 5201ba0: prevent maven test initialization failing to spoil the fixture for other tests 1b55349: faster invalid line number detection in console exception filter (IDEA-124626) db58c9b: IDEA-124556 MessageBus event processing should be faster with many child buses and (almost) no listeners 77c7af8: optimization for getChars handling 48a56e0: PY-12846 ("show hidden files" configurable through FileChooserDescriptor) b0679d6: Cleanup (builder-style API; arrangement; duplicate deprecation) 4f5db0a: [git tests] fix paths comparison fa24163: [git tests] simpler method names 6d469a1: [git tests] Fix testdata for cherry-pick 600259a: [git tests] Remove the test root directory after test execution, reorder teardowns e422a99: [vcs] Fix already disposed exception 7cb3043: [git tests] turn cuke tests back on. f9d83e6: [git tests] fix GitAddSteps 49fecac: [git tests] Make sure other tear downs finish even if one fails e0847db: [tests] extract dumping log to stdout to the common test framework 07923cc: [git] Don't spam to stdout in tests unless test failed 84a8fbe: [git] Fix already disposed 90d2f45: new inference: early abort calculation by lambda return (IDEA-124276) f2256ca: calculate target type in the same way for statement/expressions lambdas 896c488: testdata to expression lambda 8096d63: inference when incomplete 6f6367d: fix layout under darcula 3d3550e: escape ampersands 3768908: IDEA-123831 (Missing Method Count Limit in Inspections under Class Metrics) 04d3283: cleaning javac nametable: synchronization added 368bb54: [git tests] Better test name not to make some buildserver Gits "insane" ea6683d: [git tests] Better test dir name not to make some buildserver Gits "insane" 41d0942: remove unused properties [CR-IC-5247] cbf1c1e: ensure pushers are run before initial indexing, don't rely on chance 4c1dc50: let PushedFilePropertiesUpdater schedule reindex itself if necessary 79a75f2: update language level without project reloading 64c452e: Merge remote-tracking branch 'origin/master' b86dec4: simplify 0c0fb61: change method name ad18e4b: make method name discoverable 5529054: IDEA-124653 Keyboard shortcut for New does not work 3b7d2e9: svn: Refactored IdeaSvnkitBasedAuthenticationCallback - inner classes moved to separate files dafd2d3: revert memory page size back d5a0f9e: svn: Moved several authentication-related classes to "org.jetbrains.idea.svn.auth" package ac99e82: svn: Refactored IdeaSvnkitBasedAuthenticationCallback - made inner classes to be static e663caa: svn: Refactored IdeaSvnkitBasedAuthenticationCallback - code simplified, duplication removed 3ac7f7d: some dumb mode logging (IDEA-124604) 10bf86c: dom vfs listeners: don't load new vfs, support cyclic symlinks, simplify 2f76fdc: svn: Refactored IdeaSvnkitBasedAuthenticationCallback.AbstractAuthenticator and inheritors - code simplified ec05ae8: svn: Refactored IdeaSvnkitBasedAuthenticationCallback.AbstractAuthenticator and inheritors - common parameters moved to base class, @NotNull faf7595: ^451 add test 326278b: extract JsDebuggerViewSupport bc771e7: show data-source name for table editors 0faa413: making sure all posted tasks are processed even after process terminated and dispose called by using sequential task executor instead of MergingUpdateQueue (IDEA-120167 Phantom eternal Ant task on make) aff053d: Increase connection timeout for JIRA integration tests ab7c4be: WEB-6584 Files opened by URL should also be able to open scripts used in the file 1461ed0: cache indexOf result 8b73b26: cleanup 62b7621: svn: Refactored IdeaSvnkitBasedAuthenticationCallback.AbstractAuthenticator - made it not generic 6d7d17b: IDEA-124580 Links in mac sheets dialogs do not work 534c2aa: Temporary solution for IDEA-124615 cebe7d9: IDEA-124535 com.sun.*.internal packages not found 21110f2: moved to core d8cf8f5: @NotNull 979de11: moved to core-impl 9dd6e0d: moved to java-psi bf77b14: OriginInfoAwareElement moved to psi to core 26ef0e3: completion-related classes moved out of psi to separate package 4fe1761: removed dependency on java-impl 46408be: method references: super methods treatment in exact check a3f190a: svn: Refactored IdeaSvnkitBasedAuthenticationCallback.AbstractAuthenticator - removed unnecessary parameters from acknowledge() method 985bef3: Start plugins wizard #26 better color for selection (Darcula), hide dialog buttons when in "Customize plugin group" mode 4f97e92: Merge remote-tracking branch 'origin/master' 0081a7f: fixed PY-12819 Unable to run GAE nosetests 782ae0b: check directories consistency only for local files 95bce93: Cleanup (common URL check code extracted) 901e60d: Cleanup (arrangement; aggressive logging) d3d0f73: CaseInsensitiveUrlHashingStrategy nullability f144943: applicability constraints by method reference (IDEA-122018) 9e9c7e3: Cancel future if alarm was disposed in TaskItemProvider to prevent deadlocks 1e352af: Update CA certificate for SSL tests. Add link to test server used for client authentication 9ebf7ca: reparse files on language level change 29a7c80: will explicit System.gc lead to less ResolveClassTest blinking? ea54399: less garbage in tests (VirtualDirectoryImpl.assertConsistency) fba7ee7: postfix templates memory leak eb639ae: Merge remote-tracking branch 'origin/master' c5d0d5e: handle hidden groups correctly 0d2fc45: Merge remote-tracking branch 'origin/master' 577cef9: cleanup d14900f: svn: Refactored IdeaSvnkitBasedAuthenticationCallback - removed unused methods related to saving proxy settings to svn config files (currently proxy settings are passed through command line arguments) dedc16a: svn: Refactored IdeaSvnkitBasedAuthenticationCallback - code simplifications, @NotNull ef226f6: restore extra space trimmed by fitInsideEditor() 779ebf1: save some invokeLater's in progress text2 updating 9c46a51: Cleanup (arrangement; warns in default logger) b02b4c1: more accurate work with IOUtil.allocReadWriteBuffer: use IOUtil.write/readUTF that have thread local buffer upon softreference: - to avoid extra allocations (1G of garbage produced for our codebase indexing) - possible several threads accessing same buffer problem bb2af75: Cleanup (locale use) 949b567: IDEA-120035 (diagnostic; log level lowered) 4f1e8e6: svn: Refactored SvnAuthenticationManager - removed unused/commented code, code simplifications, warnings fixes 2fde908: WEB-11690 TypeScript breakpoint is not hit We must respect fs case sensitivity sourcemap visualizer: ugly compiler can produce mappings for empty lines, and IDEA can then strip whitespace from line ends, but sourcemap still references to empty ranges 81f903f: remove LineSeparatorPainter 902e51a: substitute bounds (IDEA-123509) 547c62c: qualify conflicting fields name (IDEA-123969) f58394c: IDEA-124019 291c431: notification group registration fixed f9f9b39: Merge remote-tracking branch 'origin/master' 527f8db: fireModelUpdate for lazy structure building (Scala, etc) f1c3652: IDEA-93452 Implement "section" support in rearrange menu: update parent offset on new section rule insert 47d8b3d: svn: Refactored MergeFromTheirsResolver - use common client factory model (instead of direct SVNWCClient usage) fe22b91: Fixed: IDEA-87312 Custom code folding: editor-fold; Folding/unfolding behavior not available when an enum inside the block IDEA-122715 Region folding does work if contains interface definition 4f9003f: Update jediterm.jar with antialiasing restored. 118d6d9: do not process xs:include for stub building ff22ffc: Fix tests 80dfa90: IDEA-93452 Implement "section" support in rearrange menu: section rules validation fe96f39: IDEA-124461 New Module (Maven, Gradle) created in Empty project don't get the specified jdk 1b8f51f: IDEA-124400 New Module wizard: Gradle module misses options 952a2c5: IDEA-71508 Scroll with inertia (Mac os) should only work in the initial component 632d4c8: don't draw separator line if we cannot compute relationship properly for all lines (important in case of process input — nodejs for example) 2ebc871: WEB-11957 Valid JavaScript regexp marked as red ca2c75e: svn: Refactored RepositoryBrowserDialog - removed unused and commented code a15d397: cleanup after adding postfix templates preview 7a06f6d: EA-56182 59454cd: improve "Show Members" opption suppression c115690: IDEA-124435 (Fix "Collapse catch blocks" produces non-compiling code) c048414: 136 -> 138 8c562a2: bug fix postfix templates preview 2b4b915: avoid wildcard with null bound (IDEA-124377) a6db438: testdata fixed a4ac655: Gradle: IDEA-124477 sourceFolder order in iml file generated by gradle is unstable c0f3611: IDEA-115374 "Print file" truncates the code on Mac 12a8f3b: Start plugins wizard #25 get rid of scrollpanes' borders ffe6776: A typo. 9fa19ab: svn: Refactored RepositoryBrowserDialog - make "move file/folder" logic use common client factory model (instead of direct SVNCopyClient usage) 7a95352: svn: Implemented ability to move files/folders directly in repository (for CopyMoveClient) 240c396: more diagnostics on EA-56168 - assert: JavaFoldingBuilderBase.addToFold ae954a6: remove unused ExtensionsArea.unregister* 3ad5dd7: Merge remote-tracking branch 'origin/master' 10fe5a5: skip symlinks ff8a795: removing -ea from defaults because this may dramatically slow down compilation (e.g. eclipse compiler with annotations): https://jetbrains.zendesk.com/agent/#/tickets/27833 a465476: HardReference for PsiAnchors used for duplicates indexing, 2 885405f: features.xml fix 016de10: Cleanup (inner class abuse) 58734a2: svn: Refactored RepositoryBrowserDialog - make file/folder deletion logic use common client factory model (instead of direct SVNCommitClient usage) 65fd69c: svn: Implemented ability to delete files/folders directly from repository (for DeleteClient) d9fe570: HardReference for PsiAnchors used for duplicates indexing 73a17e0: follow up for commit 288dd00: make util-rt available for all agents 55614bb: svn: Refactored RepositoryBrowserDialog - make folder creation logic use common client factory model (instead of direct SVNCommitClient usage) 7265d01: cleanup 10eb4a3: StartupManager: linear-time startup activities running 4708541: IDEA-124442 Update options for newer version of YourKit (get rid of deprecated warnings) e225a23: IDEA-124503 Filter out IntellijIdeaRulezzz completion items f41cb93: svn: Refactored CreateBranchOrTagAction - removed unnecessary parameters, removed todo items 54da0af: IDEA-122732 Javadoc invalid html closing tags b8197a7: OC-9621 d19a902: svn: Removed unused classes 924f108: svn: Refactored ShareProjectAction - use common client factory model (instead of direct SVNCommitClient usage) 673351f: svn: Implemented ability to create folders directly in repository (for BrowseClient) 8bd8a4d: initialize file watcher in background 9d3c23d: avoid entering dumb mode to push properties to one file 0ab0ec6: Maven: cleanup test e98a99f: Merge remote-tracking branch 'origin/master' bdfec0f: Mantis integration: Reset repository configuration on Axis errors 67cf17d: Maven: stable order of source folders IDEA-64312 Maven: frequent .iml changes after exclude/source folder updates 5d0ce7c: enumerate items on demand c520519: Merge remote-tracking branch 'origin/master' c2957e7: anonymous -> lambda: conflicting ref in var declaration (IDEA-124525) 5dbbebe: extract superclass: process same name type parameters inside class members 84deec9: method refs: is exact should check super methods for this/super qualifiers only (IDEA-124507) 528a91b: Merge remote-tracking branch 'origin/master' 7a8f56c: fixed PY-12717 Improper replacement of the `print x, y` statement for Py3+ 33aeb0b: fixed PY-12804 PyStatementEffect inspection doesn't wrap exec argument in parenthesis 9929113: IDEA-124394 Exception while creating New File w/o extension 933194d: IDEA-124073 (avoid requesting focus manager until app is loaded) 4d43dab9: add before-after preview for postfix templates c4084ff: Merge remote-tracking branch 'origin/master' e2d7505: fixed PY-12726 PyCharm does not recognize compatibility issues when importing from __future__ 533e26d: do not reparse re-detected files in background in tests since it may cause unpleasant interference with e.g. highlighting 414c4ad: merged test classes ba23594: IDEA-124155 Performance problem on live search in long lines 6ce3483: Revert "Templates performance: run segments changes in bulk mode" c9284e0: Start plugins wizard #24 phrases 75472a5: calc hash from content once we have bytes available, don't delay its processing until we have only chars 5aac831: notnull 02a9c6e: notnull 81d2d98: cleanup 403d4f1: fix test a98abce: Templates performance: run segments changes in bulk mode 587e216: Merge remote-tracking branch 'origin/master' 66821eb: init WEB-11393 Live edit doesn't work for linked css 1429f44: IDEA-124527 Shift-drag after Shift-click starts new selection in editor d774199: IDEA-51883 IDEA prints out huge number of pages 8a80c54: Merge remote-tracking branch 'origin/master' 336be36: IDEA-98912 An Enter license button should be added to the welcome screen 72e2b3a: ensure each post-startup activity runs in smart mode (IDEA-123943) e64ae73: Merge remote-tracking branch 'origin/master' beeee74: make inspector work with modal dialogs 324ddc4: move getTokenType() up so white-spaces are skipped before rawTokenIndex() call c808c3e: integrate Grammar-Kit/pull/31 from ligasgr 984922a: tests fix afe050c: move xml lexers to gen root 2640f20: move groovy lexers to gen root eb2047f: move spi lexers to gen root cef748e: move java lexers to gen root 600887a: move reg exp lexer to gen root fc01dd0: move templates* lexers to gen root cbd64fa: move rest lexer to gen root fd2765c: move python-community lexers to gen root 90d1e84: more compact format when we serialize 8f3acde: use isjavaidentifierpart + enable trigramindex for tests because test appeared 2adc37a: IDEA-65879 "idea" protocol handler to open files directly from a URL (for Mac) 8615aa2: vfs: handling of invalid .jar files efb2fca: test framework: ability to intercept error/warn logs 0fff999: Groovy PSI doesn't depends on LookupElements anymore 92da487: some checkCanceled 876426a: magic constant b01adfe: know recursion manager deleted e9eaa2d: IDEA-124368 (diagnostic) d321dd2: vfs: JAR FS cleanup and minor optimization 4155907: revert IDEA-123049 Rearrange Code is breaking code (Code Style > Java > Arrangement) (1162eb1847279461e17d200416be100351d0c668) f62183c: IDEA-93452 Implement "section" support in rearrange menu: cleanup e833f18: Merge remote-tracking branch 'origin/master' a4f2f0e: create method from method ref: fis for type element qualifier (IDEA-124485) baccb31: diamonds: resolve conflicts based on type params from constructor and containing class (IDEA-123518) f3e1d96: IDEA-124385 1d32716: [by cdr, jeka] eliminating dependencies on utility classes in the code loaded by javac classloader to avoid NCDFE d08964e: IDEA-93452 Implement "section" support in rearrange menu. e16690a: better doctype detection 0645af6: move properties lexer to gen root e851587: svn: Refactored CreateBranchOrTagAction - do not create non-existent folders manually (as "svn copy" supports corresponding "--parents" option) 1162eb1: IDEA-123049 Rearrange Code is breaking code (Code Style > Java > Arrangement) 0c4028d: IDEA-123074 Code formatting. Closing brace. 7456ac5: svn: Use RA_ILLEGAL_URL error code for SVNException in command line info client when passed target does not exist (so CreateBranchOrTagAction.dirExists() works correctly for command line) 1dab5da: Maven: do not unexclude excludeFolders on removal of the respective physical directory related issue - IDEA-120944 Maven integration inconsistently, frequently, and spuriously changes .iml files 8be02cd: Allow to specify ranges which can't be indented by PostprocessReformattingAspect (fixes WI-22725 surround heredoc block with try catch causes parse error) [CR-IC-5135] 18bbc9d: IDEA-115374 "Print file" truncates the code on Mac 0d4ccd0: svn: Added ability to track warnings to SvnBindException 7ec9633: svn: Refactored SvnBindException - use MultiMap to track errors 820d7b2: Switcher: use TW stripe title instead of id 936b1f2: Merge remote-tracking branch 'origin/master' 0c1ec73: IDEA-124163 6fd9884: extract notification groups (IDEA-124454) 71f8a4a: IDEA-124352 b3926cf: EA-55442 - CCE: DomStubBuilder.buildStubTree - a better fix 370e06e: Merge remote-tracking branch 'origin/master' affac73: fixed PY-12731 Creating test profile from context menu unexpectedly creates django tests eed0df2: do not process xs:include for stub building 9bc7805: Revert "Do not wrap border with TitledBorder if there is not title" c255139: IDEA-119926 Completing Statements doesn't go to next line for non conditional statements 6988973: Ensure that indexes of substring are correct in YouTrackCompletionContributor ae4b79f: IDEA-112189 Change YouTrack integration default query 30c5366: MantisFilter violates comparable contact 2255513: svn: Moved execute() methods from CommandUtil to BaseSvnClient 46b8888: in django project show unittest runner and the django one in context menu 8bc1d46: Start plugins wizard #22 fix Windows-specific exceptions (non-initialized Alloy license & NPE during Darcula initialization) 42bc957: svn: Several classes moved to corresponding packages (commit related and exception classes) be188d5: Merge remote-tracking branch 'origin/master' 5e4c305: svn: "svn info" related classes moved to "org.jetbrains.idea.svn.info" package 19f9684: Start plugins wizard #20 icons for categories 93f8c1d: svn: Renamed info clients for both SVNKit and command line (interface and implementations) 063575b: svn: Make info clients (both for SVNKit and command line) satisfy common client factory model c0dd002: svn: Refactored SvnCommandLineInfoClient - do not inherit SvnkitSvnWcClient (just implement corresponding SvnWcClientI interface) 3dac920: svn: "svn status" related classes moved to "org.jetbrains.idea.svn.status" package 0d2131d: svn: Refactored CmdStatusClient - do not use CommandExecutor.myCommandLine directly (use corresponding CommandExecutor methods instead) 7b6f441: svn: Renamed status clients for both SVNKit and command line (interface and implementations) 7f65a87: fix for Kubuntu/Firefox/Gmail (IDEA-67767) 526a02f: fixed PY-12779 Configure Template directories quick-fix: open project structure settings page right away 9ee64e4: fix "go to source/type" — XSourcePosition doesn't provide column number, so, we must override createNavigatable 3f8277c: ability to invoke/reinvoke getter value a9663fe: Merge remote-tracking branch 'origin/master' 4ab4259: IDEA-123691 Minor project wizard edits: icons 16x16 b03f63d: fixed PY-12786 Python Interpreters: extra space in configuration popup from project creation dialog 546f9a5: Revert: IDEA-123160 Find Usages doing nothing in 13.1 (7371df17bd49da0804c600571671fd3a1fe90ec2) 3fbbef8: Merge remote-tracking branch 'origin/master' 2b99821: suppress project loading cancellation if in NonCancellableSection 25e6148: move PushedFilePropertiesUpdater to lang-impl 2782c66: semicolon->space in language-agnostic completion advertisement a9888bb: Merge remote-tracking branch 'origin/master' 779df06: fix messages d8f478c: changed to correct @NotNull 4f2dad1: EA-54648 - assert: PsiWalkingState.elementStarted 066ab8a: EA-55374 - NPE: DataFlowInspectionBase$.applyFix 16b53a5: EA-55442 - CCE: DomStubBuilder.buildStubTree 69fd8e8: EA-55457 - IE: CacheUpdateRunner.waitForAll 6b7c6a0: EA-55708 - NPE: FileEditorManager.getInstance d8e6415: [by cdr] optimizations d38a277: enabled by default c49c422: don't calc content hash id twice f82d4be: Merge remote-tracking branch 'origin/master' 4657702: Merge remote-tracking branch 'origin/master' b275b4e: Netty channel id init is not reliable yet 13aec5a: cleanup 5a75f21: continue WEB-9103 nodejs: show get/set functions in addition 72276e4: init WEB-9103 nodejs: Debugger not showing value of getter 029f89a: testdata fixed 03cba2c: add undo to JBTextField a344d0e: do not dbl substitution (type annotations could be lost after that) b898f91: static method reference completion (IDEA-124043) 78dafa0: dfa: just don't assume initialized final fields are notnull, it doesn't help, but hurts and slows things down (IDEA-124323) b6be84f: simplify HTML markup - updated test data (IDEA-67767) 622b745: simplify HTML markup (IDEA-67767) bcc4a00: junit category support (IDEA-88389) 99b16f3: check for project.isDisposed added to DumbService, unnecessary checks at call sites removed 3f304a3: Animator: test 36d9ddc: Animator: corereview CR-IC-5059 9709e9f: Animator: fix stuck at 0th frame during repeatable animaion 1957b85: SemVer.getParsedVersion added 8e48a46: SemVer.toString added ae2667d: Merge remote-tracking branch 'origin/master' 1be6001: fixed PY-12451 Interpreter added from project creation dialog is not set as project interpreter 5bb9964: fixed possible NPE 9359151: Platform: scrollbars survive background editors initialization 3ca40fc: fixed tests f2b136a: fixed possible NPE 8fde24a: drain file type queue 835ce62: cleanup f2fb07f: removed lang-impl dependency edb88b8: notnull 6dd81f8: NPE when application is already disposed c2545c2: unmute on session finish - spelling 223dffa: IDEA-122962 - Clouds: perform connection test in background 7cc9133: Merge remote-tracking branch 'origin/master' c5bffbd: remove duplicated code (IDEA-67767) a5a9d6a: Merge remote-tracking branch 'origin/master' 1167e96: fixed PY-12543 Project Interpreters: too big or too small details popup cbc40e9: lazy array data loading — API/UI/v8 new backend done WEB-11784 slow nodejs debug: huge array cause 100 cpu debug a892f89: add missing test data 2215544: fix another RTF background colouring issue (IDEA-67767) fd2b253: Merge remote-tracking branch 'origin/master' bc7a7ad: Merge remote-tracking branch 'origin/master' fda4b8a: Merge remote-tracking branch 'origin/master' c8474eb: fix testdata ee2a5d0: introduce: process chained method calls during same occurrences processing (IDEA-124349) 9397fb0: CR-IC-5167 (cleanup) 8dbf638: Cleanup (post-review #330) 91e3ed4: vfs: .jar refresh test extended 115aaf1: vfs: unified attributes loading between JarHandler / JarFS 10efd8b: Cleanup (duplication; readability) 8231d80: IDEA-124032 IDEA plugin: Can't find com.sun.xml.internal.messaging.saaj.soap.LocalStrings bundle: allow bootstrap resources for root IDEA classloader cb808a6: fixed PY-12723 Unable to run tests with Django 1.7b1: "RuntimeError: App registry isn't ready yet." 8c5c0ec: added project.isDisposed check to DumbService 1f2a568: code style 46881e4: Merge remote-tracking branch 'origin/master' 8401fa0: fixed windows path separator 6ae658f: fixed 'project is disposed' 6431234: Github: release editor in tests c726c53: Github: small test cleanup 6d6d583: Platform: ShowFilePathAction correctly handles non-normalized paths (e.g. with ../) 8e1f7a7: Merge remote-tracking branch 'origin/master' 916d90b: Platform: always allow writing module files (IDEA-123899) + typo in test fixed 6e063ee: IDEA-121318 ClosureParamsEnhancer now uses call.getCallVariants() instead of call.resolve(). Erasing instance parameter's types when comparing them. It helps to select the correct one when we are comparing T and Iterable<T>. 637da92: IDEA-123712 Groovy: @language annotation on method parameters with default values reflected methods now have light parameters with original modifier lists 8ffcef2: EA-52671 - assert: AbstractMappingStrategy.processFoldRegion 30d14a3: fix RTF background colouring and make it compatible with Mac (IDEA-67767) 39d7edd: svn: Make status clients (both for SVNKit and command line) satisfy common client factory model 85e3825: Merge remote-tracking branch 'origin/master' 1d31c68: svn: Refactored SvnRecursiveStatusWalker.MyItem - use common client factory model (instead of direct SVNStatusClient usage) 3a14f0a: Use tree set to store remote roots to avoid duplicates. 343ea1c: svn: Refactored SvnRecursiveStatusWalker - methods extracted, warnings fixes 3ca64b6: svn: Merged StatusWalkerPartner interface and StatusWalkerPartnerImpl implementation to single class 93ddbc2: svn: Refactored SvnChangeProvider - use common client factory model (instead of direct SVNStatusClient usage) 416463d: svn: Refactored SvnRecursiveStatusWalker.MyItem.getClient() - removed unnecessary parameters 82af9cb: svn: SvnCommitRunner moved to "checkin" package and renamed b0b7121: svn: Refactored SvnCheckinEnvironment - logic extracted to separate SVNKit and command line clients (common client factory model is used) af5ad7c: svn: Refactored SvnCommitRunner - inlined several parameters (that have same value in all code paths) beb8081: svn: Refactored SvnCheckinEnvironment - moved SVNKit related logic to corresponding SVNKit-scoped method 626d944: svn: Refactored SvnCheckinEnvironment - code simplified, unified code flows for SVNKit and command line c636313: IDEA-124057 Manually load key store set using VM options. Don't modify default context, if Certificate Manager was disabled 4729cf2: svn: Refactored OneShotMergeInfoHelper and OneRecursiveShotMergeInfoWorker - removed unnecessary fields and utilize MergeContext instead 9fe9ac9: svn: Refactored LoadRecentBranchRevisions - removed unnecessary fields and utilize MergeContext instead 562e89d: svn: Refactored MergeCalculatorTask - removed unnecessary fields and utilize data from MergeContext instead c85e79d: svn: Refactored QuickMerge - inner classes moved to separate files (and renamed) 3f10457: IDEA-122845 Add test to check that wrong credentials are recognized when testConnection() is used cf3252c: svn: Refactored QuickMerge - make task classes do not directly depend on QuickMerge instance * MergeContext and QuickMergeInteraction parameters added to all task constructors * several QuickMerge methods moved to corresponding task classes e62ad72: svn: Refactored QuickMerge - merge parameters extracted to separate MergeContext class 482733a: svn: Refactored LatestExistentSearcher - use common client factory model (instead of direct SVNLogClient usage) a260ac4: svn: Refactored DefaultConfigLoader - code simplifications, warnings fixes d899191: svn: Make sure start() method of the task queue (myBranchesLoader) in SvnBranchConfigurationManager is invoked - otherwise runnables passed to queue are not executed a95c8b4: svn: Refactored DefaultConfigLoader - use common client factory model (instead of direct SVNLogClient usage) 1d33a57: svn: Refactored FirstInBranch - use common client factory model (instead of direct SVNLogClient usage) 372a664: svn: Refactored SvnMergeInfoCache - removed inner MyState class (fields added directly to SvnMergeInfoCache) 281cc56: svn: Refactored FirstInBranch - not null, code simplifications (exception handling) ef8bad7: svn: Refactored FirstInBranch - code simplifications, warnings fixes 2104741: svn: Removed unnecessary SvnBranchPointsCalculator.Invertor interface 0b9815c: svn: Refactored SvnBranchPointsCalculator.WrapperInvertor - explicitly use SvnBranchPointsCalculator.BranchCopyData type (instead of being generic) aa5e3fd: svn: Refactored MergerFactory - removed unused methods 9d618f1: svn: Refactored SvnMergeInfoTest - methods extracted, duplication removed, warning fixes 4947243: svn: Refactored SvnMergeInfoTest - methods extracted, lots of duplication removed Change-Id: Id231a4e5444690193a99f454d027ea17f7c2845c
Diffstat (limited to 'java/java-psi-impl/src/com/intellij/psi/impl')
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/EmptySubstitutorImpl.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/ExpressionConverter.java41
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java4
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/PsiJavaParserFacadeImpl.java37
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java16
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/ImplicitVariableImpl.java57
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/LightFieldBuilder.java86
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/LightMethodBuilder.java440
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/LightModifierList.java17
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/LightParameter.java62
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java106
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBase.java166
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBuilder.java156
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java5
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java3
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocTokenImpl.java4
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java3
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiOldInferenceHelper.java26
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java143
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java20
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ConstraintFormula.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java9
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java14
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/LambdaExpressionCompatibilityConstraint.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java39
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeEqualityConstraint.java2
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/tree/CoreJavaASTFactory.java5
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java76
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCodeBlockImpl.java8
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiJavaTokenImpl.java4
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiKeywordImpl.java4
-rw-r--r--java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java13
37 files changed, 1385 insertions, 197 deletions
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/EmptySubstitutorImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/EmptySubstitutorImpl.java
index dc8a2e8eeef8..c03bb1ce3821 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/EmptySubstitutorImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/EmptySubstitutorImpl.java
@@ -75,4 +75,6 @@ public final class EmptySubstitutorImpl extends EmptySubstitutor {
return true;
}
+ @Override
+ public void ensureValid() { }
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/ExpressionConverter.java b/java/java-psi-impl/src/com/intellij/psi/impl/ExpressionConverter.java
new file mode 100644
index 000000000000..60c054aeb80c
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/ExpressionConverter.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl;
+
+import com.intellij.lang.Language;
+import com.intellij.lang.LanguageExtension;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiElement;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Maxim.Medvedev
+ */
+public abstract class ExpressionConverter {
+ public static final LanguageExtension<ExpressionConverter> EP =
+ new LanguageExtension<ExpressionConverter>("com.intellij.expressionConverter");
+
+ protected abstract PsiElement convert(PsiElement expression, Project project);
+
+ @Nullable
+ public static PsiElement getExpression(PsiElement expression, Language language, Project project) {
+ if (expression.getLanguage() == language) return expression;
+
+ final ExpressionConverter converter = EP.forLanguage(language);
+ if (converter == null) return null;
+ return converter.convert(expression, project);
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java
index 3f4cea44d90a..748d907aec47 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java
@@ -925,7 +925,7 @@ public class PsiClassImplUtil {
final PsiMethod[] methodsByName = psiClass.findMethodsByName(name, false);
final List<Pair<PsiMethod, PsiSubstitutor>> ret = new ArrayList<Pair<PsiMethod, PsiSubstitutor>>(methodsByName.length);
for (final PsiMethod method : methodsByName) {
- ret.add(new Pair<PsiMethod, PsiSubstitutor>(method, PsiSubstitutor.EMPTY));
+ ret.add(Pair.create(method, PsiSubstitutor.EMPTY));
}
return ret;
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java
index 22518474710f..2e666639d566 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java
@@ -481,8 +481,8 @@ public class PsiImplUtil {
}
public static PsiType normalizeWildcardTypeByPosition(@NotNull PsiType type, @NotNull PsiExpression expression) {
- LOG.assertTrue(expression.isValid());
- LOG.assertTrue(type.isValid());
+ PsiUtilCore.ensureValid(expression);
+ PsiUtil.ensureValidType(type);
PsiExpression toplevel = expression;
while (toplevel.getParent() instanceof PsiArrayAccessExpression &&
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiJavaParserFacadeImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiJavaParserFacadeImpl.java
index 05819c471a27..2ededda029f8 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiJavaParserFacadeImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiJavaParserFacadeImpl.java
@@ -168,7 +168,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, ANNOTATION, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiAnnotation)) {
- throw new IncorrectOperationException("Incorrect annotation \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect annotation '" + text + "'");
}
return (PsiAnnotation)element;
}
@@ -194,7 +194,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final PsiJavaFile aFile = createDummyJavaFile(StringUtil.join("class _Dummy_ {\n", body, "\n}"));
final PsiClass[] classes = aFile.getClasses();
if (classes.length != 1) {
- throw new IncorrectOperationException("Incorrect class \"" + body + "\".");
+ throw new IncorrectOperationException("Incorrect class '" + body + "'");
}
return classes[0];
}
@@ -205,7 +205,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, DECLARATION, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiField)) {
- throw new IncorrectOperationException("Incorrect field \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect field '" + text + "'");
}
return (PsiField)element;
}
@@ -216,7 +216,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, DECLARATION, level), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiMethod)) {
- throw newException("Incorrect method \"" + text + "\".", holder);
+ throw newException("Incorrect method '" + text + "'", holder);
}
return (PsiMethod)element;
}
@@ -234,7 +234,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, PARAMETER, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiParameter)) {
- throw new IncorrectOperationException("Incorrect parameter \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect parameter '" + text + "'");
}
return (PsiParameter)element;
}
@@ -245,7 +245,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, RESOURCE, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiResourceVariable)) {
- throw new IncorrectOperationException("Incorrect resource \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect resource '" + text + "'");
}
return (PsiResourceVariable)element;
}
@@ -259,10 +259,11 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
@NotNull
@Override
public PsiTypeElement createTypeElementFromText(@NotNull final String text, @Nullable final PsiElement context) throws IncorrectOperationException {
- final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, TYPE, level(context)), context);
+ final LanguageLevel level = level(context);
+ final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, TYPE, level), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiTypeElement)) {
- throw new IncorrectOperationException("Incorrect type \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect type '" + text + "' (" + level + ")");
}
return (PsiTypeElement)element;
}
@@ -289,7 +290,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, wrapper, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiJavaCodeReferenceElement)) {
- throw new IncorrectOperationException("Incorrect reference \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect reference '" + text + "'");
}
return (PsiJavaCodeReferenceElement)element;
}
@@ -300,7 +301,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, CODE_BLOCK, level(context), true), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiCodeBlock)) {
- throw new IncorrectOperationException("Incorrect code block \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect code block '" + text + "'");
}
return (PsiCodeBlock)element;
}
@@ -311,7 +312,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, STATEMENT, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiStatement)) {
- throw new IncorrectOperationException("Incorrect statement \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect statement '" + text + "'");
}
return (PsiStatement)element;
}
@@ -322,7 +323,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, EXPRESSION, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiExpression)) {
- throw new IncorrectOperationException("Incorrect expression \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect expression '" + text + "'");
}
return (PsiExpression)element;
}
@@ -339,7 +340,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiTypeParameter)) {
- throw new IncorrectOperationException("Incorrect type parameter \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect type parameter '" + text + "'");
}
return (PsiTypeParameter)element;
}
@@ -359,7 +360,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
}
}
- throw new IncorrectOperationException("Incorrect comment \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect comment '" + text + "'");
}
@NotNull
@@ -368,7 +369,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
final DummyHolder holder = DummyHolderFactory.createHolder(myManager, new JavaDummyElement(text, ENUM_CONSTANT, level(context)), context);
final PsiElement element = SourceTreeToPsiMap.treeElementToPsi(holder.getTreeElement().getFirstChildNode());
if (!(element instanceof PsiEnumConstant)) {
- throw new IncorrectOperationException("Incorrect enum constant \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect enum constant '" + text + "'");
}
return (PsiEnumConstant)element;
}
@@ -378,7 +379,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
public PsiType createPrimitiveType(@NotNull final String text, @NotNull final PsiAnnotation[] annotations) throws IncorrectOperationException {
final PsiPrimitiveType primitiveType = getPrimitiveType(text);
if (primitiveType == null) {
- throw new IncorrectOperationException("Incorrect primitive type \"" + text + "\".");
+ throw new IncorrectOperationException("Incorrect primitive type '" + text + "'");
}
return annotations.length == 0 ? primitiveType : new PsiPrimitiveType(text, annotations);
}
@@ -396,9 +397,7 @@ public class PsiJavaParserFacadeImpl implements PsiJavaParserFacade {
if (root instanceof JavaDummyElement) {
final Throwable cause = ((JavaDummyElement)root).getParserError();
if (cause != null) {
- return new IncorrectOperationException(msg) {
- @Override public Throwable getCause() { return cause; }
- };
+ return new IncorrectOperationException(msg, cause);
}
}
return new IncorrectOperationException(msg);
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java
index e7e3dd073e3c..994bc1ef0976 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java
@@ -171,7 +171,7 @@ public class PsiSubstitutorImpl implements PsiSubstitutor {
return newBound;
}
- return rebound(wildcardType, newBound);
+ return newBound == PsiType.NULL ? newBound : rebound(wildcardType, newBound);
}
}
@@ -395,7 +395,7 @@ public class PsiSubstitutorImpl implements PsiSubstitutor {
final PsiType[] boundTypes = typeParameter.getExtendsListTypes();
for (PsiType boundType : boundTypes) {
if (TypeConversionUtil.isAssignable(erasure, boundType)) {
- return boundType;
+ return boundType.accept(mySimpleSubstitutionVisitor);
}
}
}
@@ -533,14 +533,22 @@ public class PsiSubstitutorImpl implements PsiSubstitutor {
@Override
public boolean isValid() {
- Collection<PsiType> substitutorValues = mySubstitutionMap.values();
- for (PsiType type : substitutorValues) {
+ for (PsiType type : mySubstitutionMap.values()) {
if (type != null && !type.isValid()) return false;
}
return true;
}
@Override
+ public void ensureValid() {
+ for (PsiType type : mySubstitutionMap.values()) {
+ if (type != null) {
+ PsiUtil.ensureValidType(type);
+ }
+ }
+ }
+
+ @Override
@NotNull
public Map<PsiTypeParameter, PsiType> getSubstitutionMap() {
return Collections.unmodifiableMap(mySubstitutionMap);
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java
index f4f9e881d4ba..d70fa1f4be4b 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java
@@ -184,7 +184,7 @@ public class PsiSuperMethodImplUtil {
// methods must be inherited from unrelated classes, so flatten hierarchy here
// class C implements SAM1, SAM2 { void methodimpl() {} }
//hms.getSuperSignatures().remove(aSuper);
- flattened.add(new Pair<MethodSignature, HierarchicalMethodSignature>(signature, aSuper));
+ flattened.add(Pair.create(signature, aSuper));
}
}
putInMap(aClass, result, map, hms, signature);
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/ImplicitVariableImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/ImplicitVariableImpl.java
new file mode 100644
index 000000000000..b6333d42c796
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/ImplicitVariableImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.light;
+
+import com.intellij.psi.*;
+import com.intellij.psi.search.SearchScope;
+import com.intellij.psi.search.LocalSearchScope;
+import com.intellij.util.IncorrectOperationException;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author dsl
+ */
+public abstract class ImplicitVariableImpl extends LightVariableBase implements ImplicitVariable {
+
+ public ImplicitVariableImpl(PsiManager manager, PsiIdentifier nameIdentifier, PsiType type, boolean writable, PsiElement scope) {
+ super(manager, nameIdentifier, type, writable, scope);
+ }
+
+ @Override
+ public void accept(@NotNull PsiElementVisitor visitor) {
+ if (visitor instanceof JavaElementVisitor) {
+ ((JavaElementVisitor)visitor).visitImplicitVariable(this);
+ }
+ else {
+ visitor.visitElement(this);
+ }
+ }
+
+ public String toString() {
+ return "Implicit variable:" + getName();
+ }
+
+ @Override
+ public void setInitializer(PsiExpression initializer) throws IncorrectOperationException {
+ throw new IncorrectOperationException();
+ }
+
+ @Override
+ @NotNull
+ public SearchScope getUseScope() {
+ return new LocalSearchScope(getDeclarationScope());
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightFieldBuilder.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightFieldBuilder.java
new file mode 100644
index 000000000000..72256079a0fd
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightFieldBuilder.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.light;
+
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.psi.*;
+import com.intellij.psi.javadoc.PsiDocComment;
+import com.intellij.util.IncorrectOperationException;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author Maxim.Medvedev
+ */
+public class LightFieldBuilder extends LightVariableBuilder<LightFieldBuilder> implements PsiField {
+ private PsiClass myContainingClass = null;
+ private PsiExpression myInitializer = null;
+ private PsiDocComment myDocComment = null;
+ private boolean myIsDeprecated = false;
+
+ public LightFieldBuilder(@NotNull String name, @NotNull String type, @NotNull PsiElement navigationElement) {
+ super(name, JavaPsiFacade.getElementFactory(navigationElement.getProject()).createTypeFromText(type, navigationElement),
+ navigationElement);
+ }
+
+ public LightFieldBuilder(@NotNull String name, @NotNull PsiType type, @NotNull PsiElement navigationElement) {
+ super(name, type, navigationElement);
+ }
+
+ public LightFieldBuilder(PsiManager manager, @NotNull String name, @NotNull PsiType type) {
+ super(manager, name, type, JavaLanguage.INSTANCE);
+ }
+
+ public LightFieldBuilder setContainingClass(PsiClass psiClass) {
+ myContainingClass = psiClass;
+ return this;
+ }
+
+ @Override
+ public void setInitializer(@Nullable PsiExpression initializer) throws IncorrectOperationException {
+ myInitializer = initializer;
+ }
+
+ @Override
+ public PsiExpression getInitializer() {
+ return myInitializer;
+ }
+
+ @Override
+ public PsiDocComment getDocComment() {
+ return myDocComment;
+ }
+
+ public LightFieldBuilder setDocComment(PsiDocComment docComment) {
+ myDocComment = docComment;
+ return this;
+ }
+
+ @Override
+ public boolean isDeprecated() {
+ return myIsDeprecated;
+ }
+
+ public LightFieldBuilder setIsDeprecated(boolean isDeprecated) {
+ myIsDeprecated = isDeprecated;
+ return this;
+ }
+
+ @Override
+ public PsiClass getContainingClass() {
+ return myContainingClass;
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightMethodBuilder.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightMethodBuilder.java
new file mode 100644
index 000000000000..ae2ab543eab9
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightMethodBuilder.java
@@ -0,0 +1,440 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.light;
+
+import com.intellij.psi.OriginInfoAwareElement;
+import com.intellij.lang.Language;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.navigation.ItemPresentationProviders;
+import com.intellij.openapi.util.Computable;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.ElementPresentationUtil;
+import com.intellij.psi.impl.PsiClassImplUtil;
+import com.intellij.psi.impl.PsiImplUtil;
+import com.intellij.psi.impl.PsiSuperMethodImplUtil;
+import com.intellij.psi.javadoc.PsiDocComment;
+import com.intellij.psi.search.SearchScope;
+import com.intellij.psi.util.MethodSignature;
+import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
+import com.intellij.ui.RowIcon;
+import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.PlatformIcons;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import java.util.List;
+
+/**
+ * @author peter
+ */
+public class LightMethodBuilder extends LightElement implements PsiMethod, OriginInfoAwareElement {
+ private final String myName;
+ private Computable<PsiType> myReturnType;
+ private final PsiModifierList myModifierList;
+ private final PsiParameterList myParameterList;
+ private final PsiTypeParameterList myTypeParameterList;
+ private final PsiReferenceList myThrowsList;
+ private Icon myBaseIcon;
+ private PsiClass myContainingClass;
+ private boolean myConstructor;
+ private String myMethodKind = "LightMethodBuilder";
+ private String myOriginInfo = null;
+
+ public LightMethodBuilder(PsiClass constructedClass, Language language) {
+ this(constructedClass.getManager(), language, constructedClass.getName());
+ setContainingClass(constructedClass);
+ }
+
+ public LightMethodBuilder(PsiManager manager, String name) {
+ this(manager, JavaLanguage.INSTANCE, name);
+ }
+
+ public LightMethodBuilder(PsiManager manager, Language language, String name) {
+ this(manager, language, name, new LightParameterListBuilder(manager, language), new LightModifierList(manager, language));
+ }
+
+ public LightMethodBuilder(PsiManager manager,
+ Language language,
+ String name,
+ PsiParameterList parameterList,
+ PsiModifierList modifierList) {
+ this(manager, language, name, parameterList, modifierList,
+ new LightReferenceListBuilder(manager, language, PsiReferenceList.Role.THROWS_LIST),
+ new LightTypeParameterListBuilder(manager, language));
+ }
+
+ public LightMethodBuilder(PsiManager manager,
+ Language language,
+ String name,
+ PsiParameterList parameterList,
+ PsiModifierList modifierList,
+ PsiReferenceList throwsList,
+ PsiTypeParameterList typeParameterList) {
+ super(manager, language);
+ myName = name;
+ myParameterList = parameterList;
+ myModifierList = modifierList;
+ myThrowsList = throwsList;
+ myTypeParameterList = typeParameterList;
+ }
+
+ @Override
+ public ItemPresentation getPresentation() {
+ return ItemPresentationProviders.getItemPresentation(this);
+ }
+
+ @Override
+ public boolean hasTypeParameters() {
+ return PsiImplUtil.hasTypeParameters(this);
+ }
+
+ @Override
+ @NotNull
+ public PsiTypeParameter[] getTypeParameters() {
+ return PsiImplUtil.getTypeParameters(this);
+ }
+
+ @Override
+ public PsiTypeParameterList getTypeParameterList() {
+ return myTypeParameterList;
+ }
+
+ @Override
+ public PsiDocComment getDocComment() {
+ //todo
+ return null;
+ }
+
+ @Override
+ public boolean isDeprecated() {
+ return PsiImplUtil.isDeprecatedByDocTag(this) || PsiImplUtil.isDeprecatedByAnnotation(this);
+ }
+
+ @Override
+ public PsiElement setName(@NotNull String name) throws IncorrectOperationException {
+ final String className = myContainingClass == null ? "null" : myContainingClass.getQualifiedName();
+ throw new UnsupportedOperationException("Please don't rename light methods: writable=" + isWritable() +
+ "; class=" + getClass() +
+ "; name=" + getName() +
+ "; inClass=" + className);
+ }
+
+ @Override
+ @NotNull
+ public String getName() {
+ return myName;
+ }
+
+ @Override
+ @NotNull
+ public HierarchicalMethodSignature getHierarchicalMethodSignature() {
+ return PsiSuperMethodImplUtil.getHierarchicalMethodSignature(this);
+ }
+
+ @Override
+ public boolean hasModifierProperty(@NotNull String name) {
+ return getModifierList().hasModifierProperty(name);
+ }
+
+ @Override
+ @NotNull
+ public PsiModifierList getModifierList() {
+ return myModifierList;
+ }
+
+ public LightMethodBuilder addModifiers(String... modifiers) {
+ for (String modifier : modifiers) {
+ addModifier(modifier);
+ }
+ return this;
+ }
+
+ public LightMethodBuilder addModifier(String modifier) {
+ ((LightModifierList)myModifierList).addModifier(modifier);
+ return this;
+ }
+
+ public LightMethodBuilder setModifiers(String... modifiers) {
+ ((LightModifierList)myModifierList).clearModifiers();
+ addModifiers(modifiers);
+ return this;
+ }
+
+ @Override
+ public PsiType getReturnType() {
+ return myReturnType == null ? null : myReturnType.compute();
+ }
+
+ public LightMethodBuilder setMethodReturnType(Computable<PsiType> returnType) {
+ myReturnType = returnType;
+ return this;
+ }
+
+ public LightMethodBuilder setMethodReturnType(PsiType returnType) {
+ return setMethodReturnType(new Computable.PredefinedValueComputable<PsiType>(returnType));
+ }
+
+ public LightMethodBuilder setMethodReturnType(@NotNull final String returnType) {
+ return setMethodReturnType(new Computable.NotNullCachedComputable<PsiType>() {
+ @NotNull
+ @Override
+ protected PsiType internalCompute() {
+ return JavaPsiFacade.getInstance(myManager.getProject()).getElementFactory().createTypeByFQClassName(returnType, getResolveScope());
+ }
+ });
+ }
+
+ @Override
+ public PsiTypeElement getReturnTypeElement() {
+ return null;
+ }
+
+ @Override
+ @NotNull
+ public PsiParameterList getParameterList() {
+ return myParameterList;
+ }
+
+ public LightMethodBuilder addParameter(@NotNull PsiParameter parameter) {
+ ((LightParameterListBuilder)myParameterList).addParameter(parameter);
+ return this;
+ }
+
+ public LightMethodBuilder addParameter(@NotNull String name, @NotNull String type) {
+ return addParameter(name, JavaPsiFacade.getElementFactory(getProject()).createTypeFromText(type, this));
+ }
+
+ public LightMethodBuilder addParameter(@NotNull String name, @NotNull PsiType type) {
+ return addParameter(new LightParameter(name, type, this, JavaLanguage.INSTANCE));
+ }
+
+ public LightMethodBuilder addParameter(@NotNull String name, @NotNull PsiType type, boolean isVarArgs) {
+ if (isVarArgs && !(type instanceof PsiEllipsisType)) {
+ type = new PsiEllipsisType(type);
+ }
+ return addParameter(new LightParameter(name, type, this, JavaLanguage.INSTANCE, isVarArgs));
+ }
+
+ public LightMethodBuilder addException(PsiClassType type) {
+ ((LightReferenceListBuilder)myThrowsList).addReference(type);
+ return this;
+ }
+
+ public LightMethodBuilder addException(String fqName) {
+ ((LightReferenceListBuilder)myThrowsList).addReference(fqName);
+ return this;
+ }
+
+
+ @Override
+ @NotNull
+ public PsiReferenceList getThrowsList() {
+ return myThrowsList;
+ }
+
+ @Override
+ public PsiCodeBlock getBody() {
+ return null;
+ }
+
+ public LightMethodBuilder setConstructor(boolean constructor) {
+ myConstructor = constructor;
+ return this;
+ }
+
+ @Override
+ public boolean isConstructor() {
+ return myConstructor;
+ }
+
+ @Override
+ public boolean isVarArgs() {
+ return PsiImplUtil.isVarArgs(this);
+ }
+
+ @Override
+ @NotNull
+ public MethodSignature getSignature(@NotNull PsiSubstitutor substitutor) {
+ return MethodSignatureBackedByPsiMethod.create(this, substitutor);
+ }
+
+ @Override
+ public PsiIdentifier getNameIdentifier() {
+ return null;
+ }
+
+ @Override
+ @NotNull
+ public PsiMethod[] findSuperMethods() {
+ return PsiSuperMethodImplUtil.findSuperMethods(this);
+ }
+
+ @Override
+ @NotNull
+ public PsiMethod[] findSuperMethods(boolean checkAccess) {
+ return PsiSuperMethodImplUtil.findSuperMethods(this, checkAccess);
+ }
+
+ @Override
+ @NotNull
+ public PsiMethod[] findSuperMethods(PsiClass parentClass) {
+ return PsiSuperMethodImplUtil.findSuperMethods(this, parentClass);
+ }
+
+ @Override
+ @NotNull
+ public List<MethodSignatureBackedByPsiMethod> findSuperMethodSignaturesIncludingStatic(boolean checkAccess) {
+ return PsiSuperMethodImplUtil.findSuperMethodSignaturesIncludingStatic(this, checkAccess);
+ }
+
+ @Override
+ public PsiMethod findDeepestSuperMethod() {
+ return PsiSuperMethodImplUtil.findDeepestSuperMethod(this);
+ }
+
+ @Override
+ @NotNull
+ public PsiMethod[] findDeepestSuperMethods() {
+ return PsiSuperMethodImplUtil.findDeepestSuperMethods(this);
+ }
+
+ @Override
+ public void accept(@NotNull PsiElementVisitor visitor) {
+ if (visitor instanceof JavaElementVisitor) {
+ ((JavaElementVisitor)visitor).visitMethod(this);
+ }
+ }
+
+ @Override
+ public PsiClass getContainingClass() {
+ return myContainingClass;
+ }
+
+ public LightMethodBuilder setContainingClass(PsiClass containingClass) {
+ myContainingClass = containingClass;
+ return this;
+ }
+
+ public LightMethodBuilder setMethodKind(String debugKindName) {
+ myMethodKind = debugKindName;
+ return this;
+ }
+
+ public String toString() {
+ return myMethodKind + ":" + getName();
+ }
+
+ @Override
+ public Icon getElementIcon(final int flags) {
+ Icon methodIcon = myBaseIcon != null ? myBaseIcon :
+ hasModifierProperty(PsiModifier.ABSTRACT) ? PlatformIcons.ABSTRACT_METHOD_ICON : PlatformIcons.METHOD_ICON;
+ RowIcon baseIcon = ElementPresentationUtil.createLayeredIcon(methodIcon, this, false);
+ return ElementPresentationUtil.addVisibilityIcon(this, flags, baseIcon);
+ }
+
+ @Override
+ protected boolean isVisibilitySupported() {
+ return true;
+ }
+
+ public LightMethodBuilder setBaseIcon(Icon baseIcon) {
+ myBaseIcon = baseIcon;
+ return this;
+ }
+
+ @Override
+ public boolean isEquivalentTo(final PsiElement another) {
+ return PsiClassImplUtil.isMethodEquivalentTo(this, another);
+ }
+
+ @Override
+ @NotNull
+ public SearchScope getUseScope() {
+ return PsiImplUtil.getMemberUseScope(this);
+ }
+
+ @Nullable
+ @Override
+ public PsiFile getContainingFile() {
+ final PsiClass containingClass = getContainingClass();
+ return containingClass == null ? null : containingClass.getContainingFile();
+ }
+
+ @Override
+ public PsiElement getContext() {
+ final PsiElement navElement = getNavigationElement();
+ if (navElement != this) {
+ return navElement;
+ }
+
+ final PsiClass cls = getContainingClass();
+ if (cls != null) {
+ return cls;
+ }
+
+ return getContainingFile();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ LightMethodBuilder that = (LightMethodBuilder)o;
+
+ if (myConstructor != that.myConstructor) return false;
+ if (myBaseIcon != null ? !myBaseIcon.equals(that.myBaseIcon) : that.myBaseIcon != null) return false;
+ if (myContainingClass != null ? !myContainingClass.equals(that.myContainingClass) : that.myContainingClass != null) return false;
+ if (!myMethodKind.equals(that.myMethodKind)) return false;
+ if (!myModifierList.equals(that.myModifierList)) return false;
+ if (!myName.equals(that.myName)) return false;
+ if (!myParameterList.equals(that.myParameterList)) return false;
+ if (myReturnType != null ? !myReturnType.equals(that.myReturnType) : that.myReturnType != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = myName.hashCode();
+ result = 31 * result + (myReturnType != null ? myReturnType.hashCode() : 0);
+ result = 31 * result + myModifierList.hashCode();
+ result = 31 * result + myParameterList.hashCode();
+ result = 31 * result + (myBaseIcon != null ? myBaseIcon.hashCode() : 0);
+ result = 31 * result + (myContainingClass != null ? myContainingClass.hashCode() : 0);
+ result = 31 * result + (myConstructor ? 1 : 0);
+ result = 31 * result + myMethodKind.hashCode();
+ return result;
+ }
+
+ public LightMethodBuilder addTypeParameter(PsiTypeParameter parameter) {
+ ((LightTypeParameterListBuilder)myTypeParameterList).addParameter(new LightTypeParameter(parameter));
+ return this;
+ }
+
+ @Nullable
+ @Override
+ public String getOriginInfo() {
+ return myOriginInfo;
+ }
+
+ public void setOriginInfo(@Nullable String originInfo) {
+ myOriginInfo = originInfo;
+ }
+
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightModifierList.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightModifierList.java
index beabfe469619..4988c6b530ea 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightModifierList.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightModifierList.java
@@ -118,6 +118,23 @@ public class LightModifierList extends LightElement implements PsiModifierList {
return "PsiModifierList";
}
+ @Override
+ public String getText() {
+ StringBuilder buffer = new StringBuilder();
+
+ for (String modifier : PsiModifier.MODIFIERS) {
+ if (hasExplicitModifier(modifier)) {
+ buffer.append(modifier);
+ buffer.append(' ');
+ }
+ }
+
+ if (buffer.length() > 0) {
+ buffer.delete(buffer.length() - 1, buffer.length());
+ }
+ return buffer.toString();
+ }
+
public String[] getModifiers() {
return ArrayUtil.toStringArray(myModifiers);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightParameter.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightParameter.java
new file mode 100644
index 000000000000..44834f7999e9
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightParameter.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.light;
+
+import com.intellij.lang.Language;
+import com.intellij.psi.*;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author peter
+ */
+public class LightParameter extends LightVariableBuilder<LightVariableBuilder> implements PsiParameter {
+ public static final LightParameter[] EMPTY_ARRAY = new LightParameter[0];
+
+ private final PsiElement myDeclarationScope;
+ private final boolean myVarArgs;
+
+ public LightParameter(@NotNull String name, @NotNull PsiType type, PsiElement declarationScope, Language language) {
+ this(name, type, declarationScope, language, type instanceof PsiEllipsisType);
+ }
+
+ public LightParameter(@NotNull String name, @NotNull PsiType type, PsiElement declarationScope, Language language, boolean isVarArgs) {
+ super(declarationScope.getManager(), name, type, language);
+ myDeclarationScope = declarationScope;
+ myVarArgs = isVarArgs;
+ }
+
+ @NotNull
+ @Override
+ public PsiElement getDeclarationScope() {
+ return myDeclarationScope;
+ }
+
+ @Override
+ public void accept(@NotNull PsiElementVisitor visitor) {
+ if (visitor instanceof JavaElementVisitor) {
+ ((JavaElementVisitor)visitor).visitParameter(this);
+ }
+ }
+
+ public String toString() {
+ return "Light Parameter";
+ }
+
+ @Override
+ public boolean isVarArgs() {
+ return myVarArgs;
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java
new file mode 100644
index 000000000000..cfcc7a9267d8
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.light;
+
+import com.intellij.lang.Language;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.psi.*;
+import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Max Medvedev
+ */
+public class LightReferenceListBuilder extends LightElement implements PsiReferenceList {
+ private final List<PsiJavaCodeReferenceElement> myRefs = new ArrayList<PsiJavaCodeReferenceElement>();
+ private PsiJavaCodeReferenceElement[] myCachedRefs = null;
+ private PsiClassType[] myCachedTypes = null;
+ private final Role myRole;
+ private final PsiElementFactory myFactory;
+
+ public LightReferenceListBuilder(PsiManager manager, Role role) {
+ this(manager, JavaLanguage.INSTANCE, role);
+ }
+
+ public LightReferenceListBuilder(PsiManager manager, Language language, Role role) {
+ super(manager, language);
+ myRole = role;
+ myFactory = JavaPsiFacade.getElementFactory(getProject());
+ }
+
+ @Override
+ public String toString() {
+ return "light reference list";
+ }
+
+ public void addReference(PsiClass aClass) {
+ addReference(aClass.getQualifiedName());
+ }
+
+ public void addReference(String qualifiedName) {
+ final PsiJavaCodeReferenceElement ref = myFactory.createReferenceElementByFQClassName(qualifiedName, getResolveScope());
+ myRefs.add(ref);
+ }
+
+ public void addReference(PsiClassType type) {
+ final PsiClass resolved = type.resolve();
+ if (resolved == null) return;
+
+ final PsiJavaCodeReferenceElement ref = myFactory.createReferenceElementByType(type);
+ myRefs.add(ref);
+ }
+
+ @NotNull
+ @Override
+ public PsiJavaCodeReferenceElement[] getReferenceElements() {
+ if (myCachedRefs == null) {
+ if (myRefs.isEmpty()) {
+ myCachedRefs = PsiJavaCodeReferenceElement.EMPTY_ARRAY;
+ }
+ else {
+ myCachedRefs = ContainerUtil.toArray(myRefs, new PsiJavaCodeReferenceElement[myRefs.size()]);
+ }
+ }
+ return myCachedRefs;
+ }
+
+ @NotNull
+ @Override
+ public PsiClassType[] getReferencedTypes() {
+ if (myCachedTypes == null) {
+ if (myRefs.isEmpty()) {
+ myCachedTypes = PsiClassType.EMPTY_ARRAY;
+ }
+ else {
+ final int size = myRefs.size();
+ myCachedTypes = new PsiClassType[size];
+ for (int i = 0; i < size; i++) {
+ myCachedTypes[i] = myFactory.createType(myRefs.get(i));
+ }
+ }
+ }
+
+ return myCachedTypes;
+ }
+
+ @Override
+ public Role getRole() {
+ return myRole;
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBase.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBase.java
new file mode 100644
index 000000000000..ca486682259b
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBase.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.light;
+
+import com.intellij.psi.OriginInfoAwareElement;
+import com.intellij.lang.Language;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.ElementPresentationUtil;
+import com.intellij.psi.impl.PsiImplUtil;
+import com.intellij.ui.RowIcon;
+import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.PlatformIcons;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+/**
+ * @author ven
+ */
+public abstract class LightVariableBase extends LightElement implements PsiVariable, OriginInfoAwareElement {
+ protected PsiElement myScope;
+ protected PsiIdentifier myNameIdentifier;
+ protected PsiType myType;
+ protected final PsiModifierList myModifierList;
+ protected boolean myWritable;
+ private String myOriginInfo = null;
+
+ public LightVariableBase(PsiManager manager, PsiIdentifier nameIdentifier, PsiType type, boolean writable, PsiElement scope) {
+ this(manager, nameIdentifier, JavaLanguage.INSTANCE, type, writable, scope);
+ }
+
+ public LightVariableBase(PsiManager manager, PsiIdentifier nameIdentifier, Language language, PsiType type, boolean writable, PsiElement scope) {
+ super(manager, language);
+ myNameIdentifier = nameIdentifier;
+ myWritable = writable;
+ myType = type;
+ myScope = scope;
+ myModifierList = createModifierList();
+ }
+
+ protected PsiModifierList createModifierList() {
+ return new LightModifierList(getManager());
+ }
+
+ @NotNull
+ public PsiElement getDeclarationScope() {
+ return myScope;
+ }
+
+ @Override
+ public PsiIdentifier getNameIdentifier() {
+ return myNameIdentifier;
+ }
+
+ @Override
+ public boolean isValid() {
+ return myNameIdentifier == null || myNameIdentifier.isValid();
+ }
+
+ @Override
+ @NotNull
+ public String getName() {
+ return StringUtil.notNullize(getNameIdentifier().getText());
+ }
+
+ @Override
+ public PsiElement setName(@NotNull String name) throws IncorrectOperationException{
+ PsiImplUtil.setName(getNameIdentifier(), name);
+ return this;
+ }
+
+ @Override
+ @NotNull
+ public PsiType getType() {
+ if (myType == null) {
+ myType = computeType();
+ }
+ return myType;
+ }
+
+ @NotNull
+ protected PsiType computeType() {
+ return PsiType.VOID;
+ }
+
+ @Override
+ @NotNull
+ public PsiTypeElement getTypeElement() {
+ return JavaPsiFacade.getInstance(getProject()).getElementFactory().createTypeElement(myType);
+ }
+
+ @Override
+ public PsiModifierList getModifierList() {
+ return myModifierList;
+ }
+
+ @Override
+ public boolean hasModifierProperty(@NotNull String name) {
+ return getModifierList().hasModifierProperty(name);
+ }
+
+ @Override
+ public PsiExpression getInitializer() {
+ return null;
+ }
+
+ @Override
+ public boolean hasInitializer() {
+ return false;
+ }
+
+ @Override
+ public String getText() {
+ return myNameIdentifier.getText();
+ }
+
+ @Override
+ public Object computeConstantValue() {
+ return null;
+ }
+
+ @Override
+ public void normalizeDeclaration() throws IncorrectOperationException {
+ }
+
+ @Override
+ public boolean isWritable() {
+ return myWritable;
+ }
+ @Override
+ protected boolean isVisibilitySupported() {
+ return true;
+ }
+
+ @Override
+ public Icon getElementIcon(final int flags) {
+ final RowIcon baseIcon = ElementPresentationUtil.createLayeredIcon(PlatformIcons.VARIABLE_ICON, this, false);
+ return ElementPresentationUtil.addVisibilityIcon(this, flags, baseIcon);
+ }
+
+ @Nullable
+ @Override
+ public String getOriginInfo() {
+ return myOriginInfo;
+ }
+
+ public void setOriginInfo(String originInfo) {
+ myOriginInfo = originInfo;
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBuilder.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBuilder.java
new file mode 100644
index 000000000000..fc2a90e24406
--- /dev/null
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightVariableBuilder.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2000-2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.light;
+
+import com.intellij.psi.OriginInfoAwareElement;
+import com.intellij.lang.Language;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.navigation.NavigationItem;
+import com.intellij.psi.*;
+import com.intellij.psi.impl.ElementPresentationUtil;
+import com.intellij.ui.RowIcon;
+import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.PlatformIcons;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+/**
+ * @author peter
+ */
+public class LightVariableBuilder<T extends LightVariableBuilder> extends LightElement implements PsiVariable, NavigationItem, OriginInfoAwareElement {
+ private final String myName;
+ private final PsiType myType;
+ private volatile LightModifierList myModifierList;
+ private volatile Icon myBaseIcon = PlatformIcons.VARIABLE_ICON;
+ private String myOriginInfo;
+
+ public LightVariableBuilder(@NotNull String name, @NotNull String type, @NotNull PsiElement navigationElement) {
+ this(name, JavaPsiFacade.getElementFactory(navigationElement.getProject()).createTypeFromText(type, navigationElement), navigationElement);
+ }
+
+ public LightVariableBuilder(@NotNull String name, @NotNull PsiType type, @NotNull PsiElement navigationElement) {
+ this(navigationElement.getManager(), name, type, JavaLanguage.INSTANCE);
+ setNavigationElement(navigationElement);
+ }
+
+ public LightVariableBuilder(PsiManager manager, @NotNull String name, @NotNull PsiType type, Language language) {
+ super(manager, language);
+ myName = name;
+ myType = type;
+ myModifierList = new LightModifierList(manager);
+ }
+
+ @Override
+ public String toString() {
+ return "LightVariableBuilder:" + getName();
+ }
+
+ @NotNull
+ @Override
+ public PsiType getType() {
+ return myType;
+ }
+
+ @Override
+ @NotNull
+ public PsiModifierList getModifierList() {
+ return myModifierList;
+ }
+
+ public T setModifiers(String... modifiers) {
+ myModifierList = new LightModifierList(getManager(), getLanguage(), modifiers);
+ return (T)this;
+ }
+
+ public T setModifierList(LightModifierList modifierList) {
+ myModifierList = modifierList;
+ return (T)this;
+ }
+
+ @Override
+ public boolean hasModifierProperty(@NonNls @NotNull String name) {
+ return myModifierList.hasModifierProperty(name);
+ }
+
+ @NotNull
+ @Override
+ public String getName() {
+ return myName;
+ }
+
+ @Override
+ public PsiTypeElement getTypeElement() {
+ return null;
+ }
+
+ @Override
+ public PsiExpression getInitializer() {
+ return null;
+ }
+
+ @Override
+ public boolean hasInitializer() {
+ return false;
+ }
+
+ @Override
+ public void normalizeDeclaration() throws IncorrectOperationException {
+ }
+
+ @Override
+ public Object computeConstantValue() {
+ return null;
+ }
+
+ @Override
+ public PsiIdentifier getNameIdentifier() {
+ return null;
+ }
+
+ @Override
+ public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException {
+ throw new UnsupportedOperationException("setName is not implemented yet in com.intellij.psi.impl.light.LightVariableBuilder");
+ }
+
+ @Override
+ protected boolean isVisibilitySupported() {
+ return true;
+ }
+
+ @Override
+ public Icon getElementIcon(final int flags) {
+ final RowIcon baseIcon = ElementPresentationUtil.createLayeredIcon(myBaseIcon, this, false);
+ return ElementPresentationUtil.addVisibilityIcon(this, flags, baseIcon);
+ }
+
+ public T setBaseIcon(Icon baseIcon) {
+ myBaseIcon = baseIcon;
+ return (T)this;
+ }
+
+ @Nullable
+ @Override
+ public String getOriginInfo() {
+ return myOriginInfo;
+ }
+
+ public void setOriginInfo(@Nullable String originInfo) {
+ myOriginInfo = originInfo;
+ }
+}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java
index 77a45011144d..fe8193039998 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java
@@ -169,7 +169,7 @@ public class PsiImmediateClassType extends PsiClassType.Stub {
private enum TextType { PRESENTABLE, CANONICAL, INT_CANONICAL }
private String getText(@NotNull TextType textType, boolean annotated) {
- assert mySubstitutor.isValid();
+ mySubstitutor.ensureValid();
StringBuilder buffer = new StringBuilder();
buildText(myClass, mySubstitutor, buffer, textType, annotated);
return buffer.toString();
@@ -184,6 +184,9 @@ public class PsiImmediateClassType extends PsiClassType.Stub {
ClassResolveResult baseResolveResult = ((PsiAnonymousClass)aClass).getBaseClassType().resolveGenerics();
PsiClass baseClass = baseResolveResult.getElement();
if (baseClass != null) {
+ if (textType == TextType.INT_CANONICAL) {
+ buffer.append("anonymous ");
+ }
buildText(baseClass, baseResolveResult.getSubstitutor(), buffer, textType, false);
}
return;
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java
index 1b60c157e248..60cb54cefe6b 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java
@@ -376,6 +376,7 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
PsiFile containingFile = SharedImplUtil.getContainingFile(fileElement);
boolean valid = containingFile != null && containingFile.isValid();
if (!valid) {
+ PsiUtilCore.ensureValid(this);
LOG.error("invalid!");
return JavaResolveResult.EMPTY_ARRAY;
}
@@ -587,8 +588,8 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
text += parameterList.getText();
}
PsiJavaCodeReferenceElement ref = facade.getParserFacade().createReferenceFromText(text, getParent());
- getTreeParent().replaceChildInternal(this, (TreeElement)ref.getNode());
((PsiJavaCodeReferenceElementImpl)ref).setAnnotations(annotations);
+ getTreeParent().replaceChildInternal(this, (TreeElement)ref.getNode());
if (!preserveQualification) {
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project);
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocTokenImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocTokenImpl.java
index 5fcf7791b850..85301458d047 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocTokenImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocTokenImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -23,7 +23,7 @@ import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
public class PsiDocTokenImpl extends LeafPsiElement implements PsiDocToken{
- public PsiDocTokenImpl(IElementType type, CharSequence text) {
+ public PsiDocTokenImpl(@NotNull IElementType type, CharSequence text) {
super(type, text);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java
index ebeebe24b88d..663a76c66f42 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java
@@ -130,8 +130,7 @@ public class JavaResolveUtil {
PsiClass topAccessClass = getTopLevelClass(accessObjectClass, memberClass);
if (!manager.areElementsEquivalent(topMemberClass, topAccessClass)) return false;
if (accessObjectClass instanceof PsiAnonymousClass && accessObjectClass.isInheritor(memberClass, true)) {
- if (place instanceof PsiMethodCallExpression &&
- ((PsiMethodCallExpression)place).getMethodExpression().getQualifierExpression() instanceof PsiThisExpression) {
+ if (place instanceof PsiMethodCallExpression) {
return false;
}
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiOldInferenceHelper.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiOldInferenceHelper.java
index 67b06a0e5629..84e3b27dd60a 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiOldInferenceHelper.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiOldInferenceHelper.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -157,7 +157,7 @@ public class PsiOldInferenceHelper implements PsiInferenceHelper {
}
if (rawInference != null) return rawInference;
- if (lowerBound != PsiType.NULL) return new Pair<PsiType, ConstraintType>(lowerBound, ConstraintType.EQUALS);
+ if (lowerBound != PsiType.NULL) return Pair.create(lowerBound, ConstraintType.EQUALS);
if (parent != null) {
final Pair<PsiType, ConstraintType> constraint =
@@ -168,14 +168,14 @@ public class PsiOldInferenceHelper implements PsiInferenceHelper {
}
if (upperBound != PsiType.NULL) {
- return new Pair<PsiType, ConstraintType>(upperBound, ConstraintType.SUBTYPE);
+ return Pair.create(upperBound, ConstraintType.SUBTYPE);
}
return constraint;
}
}
- if (upperBound != PsiType.NULL) return new Pair<PsiType, ConstraintType>(upperBound, ConstraintType.SUBTYPE);
+ if (upperBound != PsiType.NULL) return Pair.create(upperBound, ConstraintType.SUBTYPE);
return null;
}
@@ -403,7 +403,7 @@ public class PsiOldInferenceHelper implements PsiInferenceHelper {
final boolean captureWildcard) {
if (arg instanceof PsiWildcardType && !captureWildcard) return FAILED_INFERENCE;
if (arg != PsiType.NULL) {
- return new Pair<PsiType, ConstraintType>(arg, constraintType);
+ return Pair.create(arg, constraintType);
}
return null;
}
@@ -460,7 +460,7 @@ public class PsiOldInferenceHelper implements PsiInferenceHelper {
arg instanceof PsiIntersectionType ||
(psiClass != null && (isContraVariantPosition || !CommonClassNames.JAVA_LANG_OBJECT.equals(psiClass.getQualifiedName()) || (arg instanceof PsiArrayType)))) {
PsiType bound = intersectAllExtends(typeParam, arg);
- return new Pair<PsiType, ConstraintType>(bound, ConstraintType.SUPERTYPE);
+ return Pair.create(bound, ConstraintType.SUPERTYPE);
}
if (psiClass == null && arg instanceof PsiClassType) {
return Pair.create(arg, ConstraintType.EQUALS);
@@ -512,16 +512,16 @@ public class PsiOldInferenceHelper implements PsiInferenceHelper {
PsiType patternType,
final ConstraintType constraintType,
final int depth) {
+ if (patternType.equals(param)) {
+ return processArgType(arg, constraintType, depth < 2);
+ }
+
if (arg instanceof PsiCapturedWildcardType && (depth < 2 ||
constraintType != ConstraintType.EQUALS ||
param instanceof PsiWildcardType)) {
arg = ((PsiCapturedWildcardType)arg).getWildcard(); //reopen
}
- if (patternType.equals(param)) {
- return processArgType(arg, constraintType, depth < 2);
- }
-
if (param instanceof PsiWildcardType) {
final PsiWildcardType wildcardParam = (PsiWildcardType)param;
final PsiType paramBound = wildcardParam.getBound();
@@ -651,8 +651,8 @@ public class PsiOldInferenceHelper implements PsiInferenceHelper {
}
}
- if (lowerBound != PsiType.NULL) return new Pair<PsiType, ConstraintType>(lowerBound, ConstraintType.SUPERTYPE);
- if (upperBound != PsiType.NULL) return new Pair<PsiType, ConstraintType>(upperBound, ConstraintType.SUBTYPE);
+ if (lowerBound != PsiType.NULL) return Pair.create(lowerBound, ConstraintType.SUPERTYPE);
+ if (upperBound != PsiType.NULL) return Pair.create(upperBound, ConstraintType.SUBTYPE);
return wildcardCaptured;
}
@@ -787,6 +787,6 @@ public class PsiOldInferenceHelper implements PsiInferenceHelper {
}
}
- return new Pair<PsiType, ConstraintType>(guess, constraint.getSecond());
+ return Pair.create(guess, constraint.getSecond());
}
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
index 9d9c373159f9..f16231ac8d26 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java
@@ -23,10 +23,7 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.graphInference.constraints.*;
import com.intellij.psi.infos.MethodCandidateInfo;
import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.util.PsiTypesUtil;
-import com.intellij.psi.util.PsiUtil;
-import com.intellij.psi.util.TypeConversionUtil;
+import com.intellij.psi.util.*;
import com.intellij.util.ArrayUtilRt;
import com.intellij.util.Function;
import com.intellij.util.Processor;
@@ -77,7 +74,7 @@ public class InferenceSession {
for (int i = 0; i < leftTypes.length; i++) {
final PsiType rightType = mySiteSubstitutor.substitute(rightTypes[i]);
if (rightType != null) {
- myConstraints.add(new TypeCompatibilityConstraint(leftTypes[i], rightType));
+ addConstraint(new TypeCompatibilityConstraint(leftTypes[i], rightType));
}
}
}
@@ -118,7 +115,7 @@ public class InferenceSession {
for (int i = 0; i < args.length; i++) {
if (args[i] != null && isPertinentToApplicability(args[i], method)) {
PsiType parameterType = getParameterType(parameters, i, mySiteSubstitutor, varargs);
- myConstraints.add(new ExpressionCompatibilityConstraint(args[i], parameterType));
+ addConstraint(new ExpressionCompatibilityConstraint(args[i], parameterType));
}
}
}
@@ -288,11 +285,20 @@ public class InferenceSession {
}
}
- private void collectAdditionalConstraints(Set<ConstraintFormula> additionalConstraints,
- PsiCallExpression callExpression) {
+ private void collectAdditionalConstraints(final Set<ConstraintFormula> additionalConstraints,
+ final PsiCallExpression callExpression) {
PsiExpressionList argumentList = callExpression.getArgumentList();
if (argumentList != null) {
- final JavaResolveResult result = callExpression.resolveMethodGenerics();
+ final PsiLambdaExpression expression = PsiTreeUtil.getParentOfType(argumentList, PsiLambdaExpression.class);
+ final Computable<JavaResolveResult> computableResolve = new Computable<JavaResolveResult>() {
+ @Override
+ public JavaResolveResult compute() {
+ return callExpression.resolveMethodGenerics();
+ }
+ };
+ final JavaResolveResult result = expression == null
+ ? computableResolve.compute()
+ : PsiResolveHelper.ourGraphGuard.doPreventingRecursion(expression, false, computableResolve);
if (result instanceof MethodCandidateInfo) {
final PsiMethod method = ((MethodCandidateInfo)result).getElement();
//need to get type parameters for 2 level nested expressions (they won't be covered by expression constraints on this level?!)
@@ -374,7 +380,7 @@ public class InferenceSession {
if (!PsiType.VOID.equals(returnType) && returnType != null) {
PsiType targetType = getTargetType(context);
if (targetType != null) {
- registerConstraints(PsiUtil.isRawSubstitutor(method, mySiteSubstitutor) ? returnType : mySiteSubstitutor.substitute(returnType), targetType);
+ registerReturnTypeConstraints(PsiUtil.isRawSubstitutor(method, mySiteSubstitutor) ? returnType : mySiteSubstitutor.substitute(returnType), targetType);
}
}
}
@@ -387,13 +393,13 @@ public class InferenceSession {
}
}
- public void registerConstraints(PsiType returnType, PsiType targetType) {
+ public void registerReturnTypeConstraints(PsiType returnType, PsiType targetType) {
final InferenceVariable inferenceVariable = shouldResolveAndInstantiate(returnType, targetType);
if (inferenceVariable != null) {
final PsiSubstitutor substitutor = resolveSubset(Collections.singletonList(inferenceVariable), mySiteSubstitutor);
final PsiType substitutedReturnType = substitutor.substitute(inferenceVariable.getParameter());
if (substitutedReturnType != null) {
- myConstraints.add(new TypeCompatibilityConstraint(targetType, PsiUtil.captureToplevelWildcards(substitutedReturnType, myContext)));
+ addConstraint(new TypeCompatibilityConstraint(targetType, PsiUtil.captureToplevelWildcards(substitutedReturnType, myContext)));
}
}
else {
@@ -414,10 +420,10 @@ public class InferenceSession {
}
final PsiType substitutedCapture = PsiUtil.captureToplevelWildcards(subst.substitute(returnType), myContext);
myIncorporationPhase.addCapture(copy, (PsiClassType)returnType);
- myConstraints.add(new TypeCompatibilityConstraint(targetType, substitutedCapture));
+ addConstraint(new TypeCompatibilityConstraint(targetType, substitutedCapture));
}
} else {
- myConstraints.add(new TypeCompatibilityConstraint(targetType, myErased ? TypeConversionUtil.erasure(returnType) : returnType));
+ addConstraint(new TypeCompatibilityConstraint(targetType, myErased ? TypeConversionUtil.erasure(returnType) : returnType));
}
}
}
@@ -528,11 +534,22 @@ public class InferenceSession {
return getTargetType((PsiExpression)parent);
}
else if (parent instanceof PsiLambdaExpression) {
- if (PsiUtil.skipParenthesizedExprUp(parent.getParent()) instanceof PsiExpressionList) {
- final PsiType typeTypeByParentCall = getTargetType((PsiLambdaExpression)parent);
- return LambdaUtil.getFunctionalInterfaceReturnType(FunctionalInterfaceParameterizationUtil.getGroundTargetType(typeTypeByParentCall, (PsiLambdaExpression)parent));
+ return getTargetTypeByContainingLambda((PsiLambdaExpression)parent);
+ }
+ else if (parent instanceof PsiReturnStatement) {
+ return getTargetTypeByContainingLambda(PsiTreeUtil.getParentOfType(parent, PsiLambdaExpression.class));
+ }
+ return null;
+ }
+
+ private static PsiType getTargetTypeByContainingLambda(PsiLambdaExpression lambdaExpression) {
+ if (lambdaExpression != null) {
+ if (PsiUtil.skipParenthesizedExprUp(lambdaExpression.getParent()) instanceof PsiExpressionList) {
+ final PsiType typeTypeByParentCall = getTargetType(lambdaExpression);
+ return LambdaUtil.getFunctionalInterfaceReturnType(
+ FunctionalInterfaceParameterizationUtil.getGroundTargetType(typeTypeByParentCall, lambdaExpression));
}
- return LambdaUtil.getFunctionalInterfaceReturnType(((PsiLambdaExpression)parent).getFunctionalInterfaceType());
+ return LambdaUtil.getFunctionalInterfaceReturnType(lambdaExpression.getFunctionalInterfaceType());
}
return null;
}
@@ -857,7 +874,7 @@ public class InferenceSession {
try {
for (ConstraintFormula additionalConstraint : subset) {
- additionalConstraint.apply(substitutor);
+ additionalConstraint.apply(substitutor, true);
}
myConstraints.addAll(subset);
@@ -920,6 +937,76 @@ public class InferenceSession {
return subset;
}
+ public PsiSubstitutor collectApplicabilityConstraints(final PsiMethodReferenceExpression reference,
+ final MethodCandidateInfo candidateInfo,
+ final PsiType functionalInterfaceType) {
+ final PsiClassType.ClassResolveResult resolveResult = PsiUtil.resolveGenericsClassInType(functionalInterfaceType);
+ final PsiMethod interfaceMethod = LambdaUtil.getFunctionalInterfaceMethod(resolveResult);
+ LOG.assertTrue(interfaceMethod != null, myContext);
+ final PsiSubstitutor functionalInterfaceSubstitutor = LambdaUtil.getSubstitutor(interfaceMethod, resolveResult);
+ final MethodSignature signature = interfaceMethod.getSignature(functionalInterfaceSubstitutor);
+
+ final boolean varargs = candidateInfo.isVarargs();
+ final PsiMethod method = candidateInfo.getElement();
+
+ final PsiMethodReferenceUtil.QualifierResolveResult qualifierResolveResult = PsiMethodReferenceUtil.getQualifierResolveResult(reference);
+
+ final PsiClass containingClass = qualifierResolveResult.getContainingClass();
+ LOG.assertTrue(containingClass != null, myContext);
+
+ final PsiParameter[] functionalMethodParameters = interfaceMethod.getParameterList().getParameters();
+ final PsiParameter[] parameters = method.getParameterList().getParameters();
+
+ final boolean isStatic = method.hasModifierProperty(PsiModifier.STATIC);
+
+ if (parameters.length == functionalMethodParameters.length && !varargs || isStatic && varargs) {//static methods
+
+ if (method.isConstructor() && PsiUtil.isRawSubstitutor(containingClass, qualifierResolveResult.getSubstitutor())) {
+ initBounds(containingClass.getTypeParameters());
+ }
+
+ for (int i = 0; i < functionalMethodParameters.length; i++) {
+ final PsiType pType = signature.getParameterTypes()[i];
+ addConstraint(new TypeCompatibilityConstraint(getParameterType(parameters, i, PsiSubstitutor.EMPTY, varargs), pType));
+ }
+ }
+ else if (parameters.length + 1 == functionalMethodParameters.length && !varargs || !isStatic && varargs && functionalMethodParameters.length > 0) { //instance methods
+ initBounds(containingClass.getTypeParameters());
+
+ final PsiType pType = signature.getParameterTypes()[0];
+
+ PsiSubstitutor psiSubstitutor = qualifierResolveResult.getSubstitutor();
+ // 15.28.1 If the ReferenceType is a raw type, and there exists a parameterization of this type, T, that is a supertype of P1,
+ // the type to search is the result of capture conversion (5.1.10) applied to T;
+ // otherwise, the type to search is the same as the type of the first search. Again, the type arguments, if any, are given by the method reference.
+ if (PsiUtil.isRawSubstitutor(containingClass, qualifierResolveResult.getSubstitutor())) {
+ final PsiClassType.ClassResolveResult pResult = PsiUtil.resolveGenericsClassInType(pType);
+ final PsiClass pClass = pResult.getElement();
+ final PsiSubstitutor receiverSubstitutor = pClass != null ? TypeConversionUtil
+ .getClassSubstitutor(containingClass, pClass, pResult.getSubstitutor()) : null;
+ if (receiverSubstitutor != null) {
+ if (!method.hasTypeParameters()) {
+ if (signature.getParameterTypes().length == 1 || PsiUtil.isRawSubstitutor(containingClass, receiverSubstitutor)) {
+ return receiverSubstitutor;
+ }
+ }
+ psiSubstitutor = receiverSubstitutor;
+ }
+ }
+
+ final PsiType qType = JavaPsiFacade.getElementFactory(method.getProject()).createType(containingClass, psiSubstitutor);
+
+ addConstraint(new TypeCompatibilityConstraint(qType, pType));
+
+ for (int i = 0; i < signature.getParameterTypes().length - 1; i++) {
+ final PsiType interfaceParamType = signature.getParameterTypes()[i + 1];
+ addConstraint(new TypeCompatibilityConstraint(getParameterType(parameters, i, PsiSubstitutor.EMPTY, varargs), interfaceParamType));
+ }
+ }
+
+ return null;
+ }
+
public void setErased() {
myErased = true;
}
@@ -949,8 +1036,8 @@ public class InferenceSession {
final int paramsLength = !varargs ? parameters1.length : parameters1.length - 1;
for (int i = 0; i < paramsLength; i++) {
- PsiType sType = siteSubstitutor2.substitute(parameters1[i].getType());
- PsiType tType = siteSubstitutor2.substitute(getVarargParameterType(varargs, i, parameters2));
+ PsiType sType = getParameterType(parameters1, i, siteSubstitutor2, false);
+ PsiType tType = getParameterType(parameters2, i, siteSubstitutor2, varargs);
if (session.isProperType(sType) && session.isProperType(tType)) {
if (!TypeConversionUtil.isAssignable(tType, sType)) {
return false;
@@ -967,24 +1054,14 @@ public class InferenceSession {
}
if (varargs) {
- PsiType sType = siteSubstitutor2.substitute(getVarargParameterType(true, paramsLength, parameters1));
- PsiType tType = siteSubstitutor2.substitute(getVarargParameterType(true, paramsLength, parameters2));
+ PsiType sType = getParameterType(parameters1, paramsLength, siteSubstitutor2, true);
+ PsiType tType = getParameterType(parameters2, paramsLength, siteSubstitutor2, true);
session.addConstraint(new StrictSubtypingConstraint(tType, sType));
}
return session.repeatInferencePhases(true);
}
- public static PsiType getVarargParameterType(boolean varargs, int i, PsiParameter[] parameters2) {
- if (varargs && i >= parameters2.length - 1) {
- final PsiType lastParamType = parameters2[parameters2.length - 1].getType();
- if (lastParamType instanceof PsiEllipsisType) {
- return ((PsiEllipsisType)lastParamType).getComponentType();
- }
- }
- return parameters2[i].getType();
- }
-
/**
* 15.12.2.5 Choosing the Most Specific Method
* "a functional interface type S is more specific than a functional interface type T for an expression exp" part
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java
index 13497e3d4557..a606e90e8a98 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceVariable.java
@@ -15,27 +15,30 @@
*/
package com.intellij.psi.impl.source.resolve.graphInference;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiType;
import com.intellij.psi.PsiTypeParameter;
+import com.intellij.psi.impl.light.LightTypeParameter;
import java.util.*;
/**
* User: anna
*/
-public class InferenceVariable {
+public class InferenceVariable extends LightTypeParameter {
public PsiTypeParameter getParameter() {
- return myParameter;
+ return getDelegate();
}
private boolean myThrownBound = false;
private final Map<InferenceBound, List<PsiType>> myBounds = new HashMap<InferenceBound, List<PsiType>>();
- private final PsiTypeParameter myParameter;
private PsiType myInstantiation = PsiType.NULL;
- public InferenceVariable(PsiTypeParameter parameter) {
- myParameter = parameter;
+
+ InferenceVariable(PsiTypeParameter parameter) {
+ super(parameter);
}
+
public PsiType getInstantiation() {
return myInstantiation;
}
@@ -117,12 +120,13 @@ public class InferenceVariable {
myThrownBound = true;
}
- public void replaceBounds(InferenceBound boundType, LinkedHashSet<PsiType> bounds) {
-
+ @Override
+ public boolean isEquivalentTo(PsiElement another) {
+ return this == another || getDelegate() == another;
}
@Override
public String toString() {
- return myParameter.toString();
+ return getDelegate().toString();
}
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ConstraintFormula.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ConstraintFormula.java
index e9ca0b0179b2..0caaa075bb8a 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ConstraintFormula.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ConstraintFormula.java
@@ -25,5 +25,5 @@ import java.util.List;
*/
public interface ConstraintFormula {
boolean reduce(InferenceSession session, List<ConstraintFormula> constraints);
- void apply(PsiSubstitutor substitutor);
+ void apply(PsiSubstitutor substitutor, boolean cache);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java
index 6fa5fb46cb07..c33e2c31fa12 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java
@@ -52,6 +52,11 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm
}
final PsiType exprType = myExpression.getType();
+
+ if (exprType instanceof PsiLambdaParameterType) {
+ return false;
+ }
+
if (exprType != null && exprType != PsiType.NULL) {
constraints.add(new TypeCompatibilityConstraint(myT, exprType));
}
@@ -145,7 +150,9 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm
if (!accepted) {
return false;
}
- callSession.registerConstraints(method != null && !PsiUtil.isRawSubstitutor(method, siteSubstitutor) ? siteSubstitutor.substitute(returnType) : returnType, substitutor.substitute(returnType));
+ callSession.registerReturnTypeConstraints(
+ method != null && !PsiUtil.isRawSubstitutor(method, siteSubstitutor) ? siteSubstitutor.substitute(returnType) : returnType,
+ substitutor.substitute(returnType));
if (callSession.repeatInferencePhases(true)) {
final Collection<InferenceVariable> inferenceVariables = callSession.getInferenceVariables();
if (sameMethodCall) {
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java
index 67097df574a0..e5f5a8a8d483 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/InputOutputConstraintFormula.java
@@ -109,14 +109,16 @@ public abstract class InputOutputConstraintFormula implements ConstraintFormula
}
@Override
- public void apply(PsiSubstitutor substitutor) {
+ public void apply(PsiSubstitutor substitutor, boolean cache) {
setT(substitutor.substitute(getT()));
- Map<PsiElement, PsiType> map = LambdaUtil.ourFunctionTypes.get();
- if (map == null) {
- map = new HashMap<PsiElement, PsiType>();
- LambdaUtil.ourFunctionTypes.set(map);
+ if (cache) {
+ Map<PsiElement, PsiType> map = LambdaUtil.ourFunctionTypes.get();
+ if (map == null) {
+ map = new HashMap<PsiElement, PsiType>();
+ LambdaUtil.ourFunctionTypes.set(map);
+ }
+ map.put(getExpression(), getT());
}
- map.put(getExpression(), getT());
}
@Override
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/LambdaExpressionCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/LambdaExpressionCompatibilityConstraint.java
index 8de976b55acd..cbed2ea59491 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/LambdaExpressionCompatibilityConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/LambdaExpressionCompatibilityConstraint.java
@@ -74,7 +74,7 @@ public class LambdaExpressionCompatibilityConstraint implements ConstraintFormul
}
@Override
- public void apply(PsiSubstitutor substitutor) {
+ public void apply(PsiSubstitutor substitutor, boolean cache) {
myT = substitutor.substitute(myT);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java
index 6e5632847561..cd2e27f27b11 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/PsiMethodReferenceCompatibilityConstraint.java
@@ -20,7 +20,7 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil;
import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil;
-import com.intellij.psi.impl.source.tree.java.PsiMethodReferenceExpressionImpl;
+import com.intellij.psi.infos.MethodCandidateInfo;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -68,7 +68,7 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm
} else {
final PsiMethodReferenceUtil.QualifierResolveResult qualifierResolveResult = PsiMethodReferenceUtil.getQualifierResolveResult(myExpression);
PsiSubstitutor psiSubstitutor = qualifierResolveResult.getSubstitutor();
- final PsiMember applicableMember = ((PsiMethodReferenceExpressionImpl)myExpression).getPotentiallyApplicableMember();
+ final PsiMember applicableMember = myExpression.getPotentiallyApplicableMember();
LOG.assertTrue(applicableMember != null);
PsiType applicableMethodReturnType = applicableMember instanceof PsiMethod ? ((PsiMethod)applicableMember).getReturnType() : null;
int idx = 0;
@@ -111,16 +111,17 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm
final Map<PsiMethodReferenceExpression, PsiType> map = PsiMethodReferenceUtil.getFunctionalTypeMap();
final PsiType added = map.put(myExpression, groundTargetType);
- final PsiElement resolve;
+ final JavaResolveResult resolve;
try {
- resolve = myExpression.resolve();
+ resolve = myExpression.advancedResolve(true);
}
finally {
if (added == null) {
map.remove(myExpression);
}
}
- if (resolve == null) {
+ final PsiElement element = resolve.getElement();
+ if (element == null) {
return false;
}
@@ -128,8 +129,8 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm
return true;
}
- if (resolve instanceof PsiMethod) {
- final PsiMethod method = (PsiMethod)resolve;
+ if (element instanceof PsiMethod) {
+ final PsiMethod method = (PsiMethod)element;
final PsiType referencedMethodReturnType;
final PsiClass containingClass = method.getContainingClass();
LOG.assertTrue(containingClass != null, method);
@@ -158,8 +159,8 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm
ContainerUtil.newHashSet(method.getTypeParameters()))) {
//the constraint reduces to the bound set B3 which would be used to determine the method reference's invocation type
//when targeting the return type of the function type, as defined in 18.5.2.
- //as there is no parameters, only constraint for return types is left. Here you are:
- session.registerConstraints(referencedMethodReturnType, returnType);
+ session.collectApplicabilityConstraints(myExpression, ((MethodCandidateInfo)resolve), groundTargetType);
+ session.registerReturnTypeConstraints(referencedMethodReturnType, returnType);
return true;
}
}
@@ -191,21 +192,19 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm
List<ConstraintFormula> constraints,
PsiSubstitutor substitutor,
PsiParameter[] targetParameters) {
- final PsiTypeElement qualifierTypeElement = myExpression.getQualifierType();
- final PsiExpression qualifierExpression = myExpression.getQualifierExpression();
- PsiType qualifierType;
- if (qualifierTypeElement != null) {
- qualifierType = qualifierTypeElement.getType();
+ final PsiElement qualifier = myExpression.getQualifier();
+ PsiType qualifierType = null;
+ if (qualifier instanceof PsiTypeElement) {
+ qualifierType = ((PsiTypeElement)qualifier).getType();
final PsiClass qualifierClass = PsiUtil.resolveClassInType(qualifierType);
if (qualifierClass != null) {
qualifierType = JavaPsiFacade.getElementFactory(myExpression.getProject()).createType(qualifierClass, PsiSubstitutor.EMPTY);
}
}
- else {
- LOG.assertTrue(qualifierExpression != null);
- qualifierType = qualifierExpression.getType();
- if (qualifierType == null && qualifierExpression instanceof PsiReferenceExpression) {
- final JavaResolveResult resolveResult = ((PsiReferenceExpression)qualifierExpression).advancedResolve(false);
+ else if (qualifier instanceof PsiExpression) {
+ qualifierType = ((PsiExpression)qualifier).getType();
+ if (qualifierType == null && qualifier instanceof PsiReferenceExpression) {
+ final JavaResolveResult resolveResult = ((PsiReferenceExpression)qualifier).advancedResolve(false);
final PsiElement res = resolveResult.getElement();
if (res instanceof PsiClass) {
PsiClass containingClass = (PsiClass)res;
@@ -224,7 +223,7 @@ public class PsiMethodReferenceCompatibilityConstraint implements ConstraintForm
}
@Override
- public void apply(PsiSubstitutor substitutor) {
+ public void apply(PsiSubstitutor substitutor, boolean cache) {
myT = substitutor.substitute(myT);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java
index 92745cb14d01..412b09eadec3 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/StrictSubtypingConstraint.java
@@ -37,7 +37,7 @@ public class StrictSubtypingConstraint implements ConstraintFormula {
}
@Override
- public void apply(PsiSubstitutor substitutor) {
+ public void apply(PsiSubstitutor substitutor, boolean cache) {
myT = substitutor.substitute(myT);
myS = substitutor.substitute(myS);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java
index e539e943a433..f1502b248a79 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java
@@ -36,7 +36,7 @@ public class SubtypingConstraint implements ConstraintFormula {
}
@Override
- public void apply(PsiSubstitutor substitutor) {
+ public void apply(PsiSubstitutor substitutor, boolean cache) {
myT = substitutor.substitute(myT);
myS = substitutor.substitute(myS);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java
index 4038f9af5125..f01c82cae769 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeCompatibilityConstraint.java
@@ -84,7 +84,7 @@ public class TypeCompatibilityConstraint implements ConstraintFormula {
}
@Override
- public void apply(PsiSubstitutor substitutor) {
+ public void apply(PsiSubstitutor substitutor, boolean cache) {
myT = substitutor.substitute(myT);
myS = substitutor.substitute(myS);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeEqualityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeEqualityConstraint.java
index 1f4717ddc79e..fa3df6669cb9 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeEqualityConstraint.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/TypeEqualityConstraint.java
@@ -118,7 +118,7 @@ public class TypeEqualityConstraint implements ConstraintFormula {
}
@Override
- public void apply(PsiSubstitutor substitutor) {
+ public void apply(PsiSubstitutor substitutor, boolean cache) {
myT = substitutor.substitute(myT);
myS = substitutor.substitute(myS);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/CoreJavaASTFactory.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/CoreJavaASTFactory.java
index dc7b6e576871..9c888c006b99 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/CoreJavaASTFactory.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/CoreJavaASTFactory.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -27,6 +27,7 @@ import com.intellij.psi.impl.source.tree.java.PsiKeywordImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.java.IJavaDocElementType;
import com.intellij.psi.tree.java.IJavaElementType;
+import org.jetbrains.annotations.NotNull;
/**
* @author yole
@@ -35,7 +36,7 @@ public class CoreJavaASTFactory extends ASTFactory implements Constants {
private final DefaultASTFactory myDefaultASTFactory = ServiceManager.getService(DefaultASTFactory.class);
@Override
- public LeafElement createLeaf(final IElementType type, final CharSequence text) {
+ public LeafElement createLeaf(@NotNull final IElementType type, final CharSequence text) {
if (type == C_STYLE_COMMENT || type == END_OF_LINE_COMMENT) {
return myDefaultASTFactory.createComment(type, text);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java
index 503cbf48ddd3..ca40ef122c99 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/MethodReferenceResolver.java
@@ -21,7 +21,6 @@ import com.intellij.psi.impl.source.resolve.ParameterTypeInferencePolicy;
import com.intellij.psi.impl.source.resolve.ResolveCache;
import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil;
import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
-import com.intellij.psi.impl.source.resolve.graphInference.constraints.TypeCompatibilityConstraint;
import com.intellij.psi.infos.CandidateInfo;
import com.intellij.psi.infos.ClassCandidateInfo;
import com.intellij.psi.infos.MethodCandidateInfo;
@@ -41,7 +40,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-class MethodReferenceResolver implements ResolveCache.PolyVariantContextResolver<PsiMethodReferenceExpressionImpl> {
+public class MethodReferenceResolver implements ResolveCache.PolyVariantContextResolver<PsiMethodReferenceExpressionImpl> {
private static final Logger LOG = Logger.getInstance("#" + MethodReferenceResolver.class.getName());
@NotNull
@@ -70,7 +69,7 @@ class MethodReferenceResolver implements ResolveCache.PolyVariantContextResolver
final PsiClassType returnType = composeReturnType(containingClass, substitutor);
final InferenceSession session = new InferenceSession(containingClass.getTypeParameters(), substitutor, reference.getManager(), null);
if (!(session.isProperType(returnType) && session.isProperType(interfaceMethodReturnType))) {
- session.registerConstraints(returnType, interfaceMethodReturnType);
+ session.registerReturnTypeConstraints(returnType, interfaceMethodReturnType);
substitutor = session.infer();
}
}
@@ -111,12 +110,11 @@ class MethodReferenceResolver implements ResolveCache.PolyVariantContextResolver
@NotNull
@Override
public PsiSubstitutor inferTypeArguments(@NotNull ParameterTypeInferencePolicy policy, boolean includeReturnConstraint) {
- return inferTypeArguments(varargs);
+ return inferTypeArguments();
}
- public PsiSubstitutor inferTypeArguments(boolean varargs) {
+ private PsiSubstitutor inferTypeArguments() {
if (interfaceMethod == null) return substitutor;
- final PsiSubstitutor qualifierResultSubstitutor = qualifierResolveResult.getSubstitutor();
final InferenceSession session = new InferenceSession(method.getTypeParameters(), substitutor, reference.getManager(), reference);
//lift parameters from outer call
@@ -125,53 +123,9 @@ class MethodReferenceResolver implements ResolveCache.PolyVariantContextResolver
session.initBounds(methodSubstitutorPair.getMethod().getTypeParameters());
}
- final PsiParameter[] functionalMethodParameters = interfaceMethod.getParameterList().getParameters();
- final PsiParameter[] parameters = method.getParameterList().getParameters();
- final boolean isStatic = method.hasModifierProperty(PsiModifier.STATIC);
- if (parameters.length == functionalMethodParameters.length && !varargs || isStatic && varargs) {//static methods
-
- if (method.isConstructor() && PsiUtil.isRawSubstitutor(containingClass, qualifierResultSubstitutor)) {
- session.initBounds(containingClass.getTypeParameters());
- }
-
- for (int i = 0; i < functionalMethodParameters.length; i++) {
- final PsiType pType = signature.getParameterTypes()[i];
- session.addConstraint(new TypeCompatibilityConstraint(getParameterType(parameters, i, varargs), pType));
- }
- }
- else if (parameters.length + 1 == functionalMethodParameters.length && !varargs || !isStatic && varargs && functionalMethodParameters.length > 0) { //instance methods
- final PsiClass aClass = qualifierResolveResult.getContainingClass();
- session.initBounds(aClass.getTypeParameters());
-
- final PsiType pType = signature.getParameterTypes()[0];
-
- PsiSubstitutor psiSubstitutor = qualifierResultSubstitutor;
- // 15.28.1 If the ReferenceType is a raw type, and there exists a parameterization of this type, T, that is a supertype of P1,
- // the type to search is the result of capture conversion (5.1.10) applied to T;
- // otherwise, the type to search is the same as the type of the first search. Again, the type arguments, if any, are given by the method reference.
- if (PsiUtil.isRawSubstitutor(containingClass, qualifierResultSubstitutor)) {
- final PsiClassType.ClassResolveResult pResult = PsiUtil.resolveGenericsClassInType(pType);
- final PsiClass pClass = pResult.getElement();
- final PsiSubstitutor receiverSubstitutor = pClass != null ? TypeConversionUtil
- .getClassSubstitutor(containingClass, pClass, pResult.getSubstitutor()) : null;
- if (receiverSubstitutor != null) {
- if (!method.hasTypeParameters()) {
- if (signature.getParameterTypes().length == 1 || PsiUtil.isRawSubstitutor(containingClass, receiverSubstitutor)) {
- return receiverSubstitutor;
- }
- }
- psiSubstitutor = receiverSubstitutor;
- }
- }
-
- final PsiType qType = JavaPsiFacade.getElementFactory(reference.getProject()).createType(containingClass, psiSubstitutor);
-
- session.addConstraint(new TypeCompatibilityConstraint(qType, pType));
-
- for (int i = 0; i < signature.getParameterTypes().length - 1; i++) {
- final PsiType interfaceParamType = signature.getParameterTypes()[i + 1];
- session.addConstraint(new TypeCompatibilityConstraint(getParameterType(parameters, i, varargs), interfaceParamType));
- }
+ final PsiSubstitutor psiSubstitutor = session.collectApplicabilityConstraints(reference, this, functionalInterfaceType);
+ if (psiSubstitutor != null) {
+ return psiSubstitutor;
}
if (!session.repeatInferencePhases(false)) {
@@ -181,19 +135,10 @@ class MethodReferenceResolver implements ResolveCache.PolyVariantContextResolver
if (interfaceMethodReturnType != PsiType.VOID && interfaceMethodReturnType != null) {
final PsiType returnType = method.isConstructor() ? composeReturnType(containingClass, substitutor) : method.getReturnType();
if (returnType != null) {
- session.registerConstraints(returnType, interfaceMethodReturnType);
+ session.registerReturnTypeConstraints(returnType, interfaceMethodReturnType);
}
}
- return session.infer(parameters, null, null);
- }
-
- private PsiType getParameterType(PsiParameter[] parameters, int i, boolean varargs) {
- if (varargs && i >= parameters.length - 1) {
- final PsiType type = parameters[parameters.length - 1].getType();
- LOG.assertTrue(type instanceof PsiEllipsisType);
- return ((PsiEllipsisType)type).getComponentType();
- }
- return parameters[i].getType();
+ return session.infer(method.getParameterList().getParameters(), null, null);
}
};
}
@@ -254,8 +199,7 @@ class MethodReferenceResolver implements ResolveCache.PolyVariantContextResolver
private static PsiClassType composeReturnType(PsiClass containingClass, PsiSubstitutor substitutor) {
final boolean isRawSubst = PsiUtil.isRawSubstitutor(containingClass, substitutor);
- return JavaPsiFacade.getElementFactory(containingClass.getProject())
- .createType(containingClass, isRawSubst ? PsiSubstitutor.EMPTY : substitutor);
+ return JavaPsiFacade.getElementFactory(containingClass.getProject()).createType(containingClass, isRawSubst ? PsiSubstitutor.EMPTY : substitutor);
}
private static class MethodReferenceConflictResolver extends JavaMethodsConflictResolver {
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCodeBlockImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCodeBlockImpl.java
index e530554341fd..5c8e425301fb 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCodeBlockImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCodeBlockImpl.java
@@ -18,7 +18,7 @@ package com.intellij.psi.impl.source.tree.java;
import com.intellij.lang.ASTNode;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiImplUtil;
@@ -92,7 +92,7 @@ public class PsiCodeBlockImpl extends LazyParseablePsiElement implements PsiCode
// return Pair(classes, locals) or null if there was conflict
@Nullable
- private Pair<Set<String>, Set<String>> buildMaps() {
+ private Couple<Set<String>> buildMaps() {
Set<String> set1 = myClassesSet;
Set<String> set2 = myVariablesSet;
boolean wasConflict = myConflict;
@@ -129,7 +129,7 @@ public class PsiCodeBlockImpl extends LazyParseablePsiElement implements PsiCode
myVariablesSet = set2 = localsSet.isEmpty() ? Collections.<String>emptySet() : localsSet;
myConflict = wasConflict = conflict.get();
}
- return wasConflict ? null : Pair.create(set1, set2);
+ return wasConflict ? null : Couple.newOne(set1, set2);
}
@Override
@@ -218,7 +218,7 @@ public class PsiCodeBlockImpl extends LazyParseablePsiElement implements PsiCode
// Parent element should not see our vars
return true;
}
- Pair<Set<String>, Set<String>> pair = buildMaps();
+ Couple<Set<String>> pair = buildMaps();
boolean conflict = pair == null;
final Set<String> classesSet = conflict ? null : pair.getFirst();
final Set<String> variablesSet = conflict ? null : pair.getSecond();
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiJavaTokenImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiJavaTokenImpl.java
index b5759a188084..38447a9bc324 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiJavaTokenImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiJavaTokenImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -23,7 +23,7 @@ import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
public class PsiJavaTokenImpl extends LeafPsiElement implements PsiJavaToken{
- public PsiJavaTokenImpl(IElementType type, CharSequence text) {
+ public PsiJavaTokenImpl(@NotNull IElementType type, CharSequence text) {
super(type, text);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiKeywordImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiKeywordImpl.java
index fa69e5c28083..f39a88e8b35c 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiKeywordImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiKeywordImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Field;
public class PsiKeywordImpl extends LeafPsiElement implements PsiKeyword, PsiJavaToken {
- public PsiKeywordImpl(IElementType type, CharSequence text) {
+ public PsiKeywordImpl(@NotNull IElementType type, CharSequence text) {
super(type, text);
}
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java
index 311b161df557..94cce501d521 100644
--- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java
+++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerEx;
+import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
import com.intellij.psi.impl.source.resolve.ResolveCache;
import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil;
import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession;
@@ -43,6 +44,9 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import java.util.Map;
public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase implements PsiMethodReferenceExpression {
@@ -136,7 +140,14 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase
if (containingClass != null) {
PsiMethod[] methods = null;
if (element instanceof PsiIdentifier) {
- methods = containingClass.findMethodsByName(element.getText(), !qualifierResolveResult.isReferenceTypeQualified());
+ final String identifierName = element.getText();
+ final List<PsiMethod> result = new ArrayList<PsiMethod>();
+ for (HierarchicalMethodSignature signature : containingClass.getVisibleSignatures()) {
+ if (identifierName.equals(signature.getName())) {
+ result.add(signature.getMethod());
+ }
+ }
+ methods = result.toArray(new PsiMethod[result.size()]);
}
else if (isConstructor()) {
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(getProject());