summaryrefslogtreecommitdiff
path: root/xml
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2013-08-29 10:40:28 -0700
committerTor Norbye <tnorbye@google.com>2013-08-29 10:40:35 -0700
commit932259520ebaedeb2ccf4b7594bad50c700963d7 (patch)
tree2b52334b8a019d9652625b1432deac11a7c4b31e /xml
parente47d04f1f804b9e725b768725da436af6788f19b (diff)
downloadidea-932259520ebaedeb2ccf4b7594bad50c700963d7.tar.gz
Snapshot 1c7917945d4706cdbb32b599f81abd05c0251e32 from idea/132.27 branch of git://git.jetbrains.org/idea/community.git
1c79179: 2013-08-29 Yann Cébron - DevKit: smart EP "implementation" highlighting/completion f3a83bc: 2013-08-29 Roman Shevchenko - IDEA-112827 (NPE in error reporter) 464a45b: 2013-08-29 Anna Kozlova - move pin button to the right side of popup (IDEA-112435) 1635be8: 2013-08-29 Yann Cébron - Dom EPs: add some <with> tags 6bcac42: 2013-08-29 Roman Shevchenko - IDEA-112824 (suppress SVN logging for normal use) 16d0ba4: 2013-08-29 Anna Kozlova - NPE 285509c4c: 2013-08-28 Max Medvedev - IDEA-111110 Groovy: Introduce Field Refactoring doesn't suggest to choose destination class 5415af1: 2013-08-28 Yann Cébron - Merge remote-tracking branch 'origin/master' 8462f3b: 2013-08-28 Dmitry Jemerov - cleanup 2ad6100: 2013-08-28 Yann Cébron - Merge remote-tracking branch 'origin/master' 9de8bfc: 2013-08-28 Dmitry Jemerov - Merge branch 'master' of git://github.com/niktrop/intellij-community into pull92 6315415: 2013-08-28 Dmitry Jemerov - cleanup 7281b73: 2013-08-28 Dmitry Jemerov - Merge branch 'cjfm3' of git://github.com/max-kammerer/intellij-community into pull87 6e31350: 2013-08-28 Dmitry Jemerov - fix couple of issues with https://github.com/JetBrains/intellij-community/pull/94 3695aa0: 2013-08-28 Dmitry Jemerov - Merge branch 'master' of git://github.com/asedunov/intellij-community into pull94 ce2c15f: 2013-08-28 Yann Cébron - fix javadoc @see link 6794ead: 2013-08-28 Anna Kozlova - skip adverts when server doesn't accept provided info 851da00: 2013-08-28 Anna Kozlova - skip advs in tests and headless mode cddbc28: 2013-08-28 Anna Kozlova - EA-48802 - assert: JavaFileManagerBase.findClass 1eafaae: 2013-08-28 Anna Kozlova - EA-49147 - NPE: UnusedDeclarationInspection.isReadObjectMethod f1a2040: 2013-08-28 Anna Kozlova - EA-49155 - NPE: JavaChangeSignatureDialog.doCalculateSignature 2684709: 2013-08-28 Dmitry Jemerov - MalformedFormatStringInspectionTest fixed ce8088e: 2013-08-28 Evgeny Gerashchenko - Removed extra checking for duplicate annotations in one file. It is performed when reading file anyway. 9d4c7ca: 2013-08-28 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' 2fd8641: 2013-08-28 Eugene Kudelevsky - add possibility to setup lookup element for XML attribute values; IDEA-102167 layout_* attributes should go first 3b065b1: 2013-08-28 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' d8d9168: 2013-08-28 Dmitry Trofimov - Libs update. 28a95a6: 2013-08-28 Alexey Kudravtsev - compilation d4a0d69: 2013-08-28 Alexey Kudravtsev - notnull f9f8006: 2013-08-28 Alexey Kudravtsev - moved to appropriate package 4d058f8: 2013-08-28 Alexey Kudravtsev - cleanup 111301a: 2013-08-28 Alexey Kudravtsev - extra method 01e59b0: 2013-08-28 Alexey Kudravtsev - doc da966ae: 2013-08-28 Alexey Kudravtsev - cleanup 7503616: 2013-08-28 Alexey Kudravtsev - add method to javaversionservice 7d6de4f: 2013-08-28 Alexey Kudravtsev - notnull dee081f: 2013-08-27 Alexey Kudravtsev - statistics dd327c0: 2013-08-28 Dmitry Trofimov - Focus fixes. 7231931: 2013-08-28 Vladimir Krivosheev - WEB-8988 Return "open in browser" in context menu 2102255: 2013-08-28 Roman Shevchenko - app: install-over range extended for next EAPs ddad3bb: 2013-08-28 Dmitry Avdeev - IDEA-112728 Can't create new task from tasks menu in toolbar: no need to fix lost typing for Go To Task a8160c2: 2013-08-28 Dmitry Avdeev - typo 7328cbd: 2013-08-28 Dmitry Avdeev - cleanup abbdb5a: 2013-08-28 Dmitry Avdeev - cleanup a5c8503: 2013-08-28 Dmitry Avdeev - do not allow empty task name e8daf37: 2013-08-28 Dmitry Avdeev - simplified dff28d3: 2013-08-28 Dmitry Avdeev - simplified 38513a8: 2013-08-28 Dmitry Avdeev - cleanup c09dd55: 2013-08-28 Vladimir Krivosheev - VariablesGroup — avoid array copy 8f3c91f: 2013-08-28 Roman Shevchenko - java: correct character escaping in decompiler 9a19e30: 2013-08-28 Dmitry Trofimov - Fixed hiding and activating of the terminal (PY-10669). df672ba: 2013-08-28 Dmitry Trofimov - Terminal system settings refactored. 4653b54: 2013-08-28 Anna Kozlova - unknown features equality fixed 2896270: 2013-08-28 Anna Kozlova - ensure read access ccff3af: 2013-08-28 Anna Kozlova - suggest to download plugins by unknown run configurations 9c8a3d2: 2013-08-28 Konstantin Bulenkov - include os.arch and jdk build number in about 861984c: 2013-08-28 Denis Fokin - IDEA-108265. We should not do anything if an empty array is passed. a6b3441: 2013-08-28 Sergey Simonchik - EA-49063 - AIOOBE: ScriptRunnerUtil$ScriptOutput.onTextAvailable 845ee5c: 2013-08-28 Vladimir Krivosheev - value nullability 36121a2: 2013-08-28 Konstantin Kolosovsky - Merge branch 'svn1_8_new' 1515b70: 2013-08-28 Mikhail Golubev - Merge remote-tracking branch 'origin/master' 33d684e0: 2013-08-28 Mikhail Golubev - IDEA-110012 Not all Redmine Issues Available on "Open Task" (Limited to 100?) 39899b1: 2013-08-28 Bas Leijdekkers - IDEA-112782 (Change signature dialog shows unexpected 'cannot resolve symbol' message) e469928: 2013-08-28 Anna Kozlova - accept test config methods in non-test classes (IDEA-112537) b53abed: 2013-08-27 Anna Kozlova - fix typo 3074f49: 2013-08-28 Dmitry Avdeev - IDEA-112781 Open YouTrack task: Create changelist doesn't work with SVN ? 43c8897: 2013-08-27 Dmitry Avdeev - cleanup ff6217a: 2013-08-28 Kirill Likhodedov - Annotate overriding methods 8e2d0e1: 2013-08-28 Roman Shevchenko - terminal: platform's Guava should be good enough for the plugin 2055780: 2013-08-27 Roman Shevchenko - EA-49123 (do not load extensions from static initializer) 116dc30: 2013-08-27 Roman Shevchenko - EA-49235 (check proxy port) 2b4f96f: 2013-08-27 Roman Shevchenko - EA-49235 (code readability) ed03bca: 2013-08-27 Roman Shevchenko - EA-49142 (NPE, cleanup) e6053d0: 2013-08-27 Roman Shevchenko - EA-49102 (face user with printing errors) a748474: 2013-08-28 Vladimir Krivosheev - 4.1.0. update netty (now it is not patched build, https://github.com/netty/netty/pull/1762) 3c60901: 2013-08-28 Konstantin Bulenkov - better selection for mixed languages 20decc3: 2013-08-28 Konstantin Bulenkov - fix selection for files with multiple languages 878ad26: 2013-08-27 Max Medvedev - IDEA-111100 Groovy: Introduce Variable/Parameter Refactorings don't suggest to replace occurrences if applied to expressions inside code blocks 8a60662: 2013-08-27 Max Medvedev - IDEA-110981 Groovy: "Split into declaration and assignment" intention leaves unnecessary "=" if applied to closures 77912c1: 2013-08-27 Max Medvedev - IDEA-111101 Groovy: In-Place Introduce Field: Alt+I mnemonic doesn't work in the refactoring preview 088f68e: 2013-08-27 Max Medvedev - IDEA-111027 Groovy: In-Place Introduce Variable: PIEAE at GrInplaceIntroducer.<init> on introducing a variable within one-line method/closure a2210a4: 2013-08-27 Aleksei Sedunov - Extract inheritor candidate check into separate InheritanceChecker interface f40be5e: 2013-08-27 Alexander Zolotov - Filter moduleAwareConfigurables by module cf7704f: 2013-08-26 Alexander Zolotov - WEB-6452 SASS suggests functions at the top, instead of property values 165ccf7: 2013-08-27 Konstantin Kolosovsky - IDEA-94942 Fixed diff, annotate errors in history view after rename/move 7b6396a: 2013-08-27 Dmitry Jemerov - branch number 132 e176d25: 2013-08-27 Sergey Evdokimov - IDEA-112754 Maven import: NCDFE for org/jetbrains/plugins/groovy/util/ClassInstanceCache 43c49f6: 2013-08-27 Sergey Evdokimov - IDEA-112754 Maven import: NCDFE for org/jetbrains/plugins/groovy/util/ClassInstanceCache 377dd45: 2013-08-27 Konstantin Bulenkov - fix memory leak 203fb69: 2013-08-27 Sergey Simonchik - WEB-9011 Karma plugin ignored tests 3b896f2: 2013-08-27 Sergey Evdokimov - Make project unignored when new module is created by ignored project 9ae29c6: 2013-08-27 Sergey Evdokimov - Remove maven project from project tree when user deletes module. +review CR-IC-2084 0f0f39e: 2013-08-27 Vladimir Krivosheev - cleanup, Overrides 3dddec4: 2013-08-27 Vladimir Krivosheev - cleanup a2fff55: 2013-08-27 Aleksey Pivovarov - Github: Add API function for loading Commit Comments 9bd1660: 2013-08-27 Aleksey Pivovarov - fix IndexOutOfBoundsException on inserting empty collection to empty model 46b8998: 2013-08-27 Nadya Zabrodina - exception during annotate copied file fixed 66640b2: 2013-08-27 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' c597bcc: 2013-08-27 Sergey Evdokimov - Remove maven project from project tree when user deletes module. +review CR-IC-2084 33e932a: 2013-08-27 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' 7cc9cca: 2013-08-27 Vladislav.Soroka - IDEA-79466 gradle support should generate web module configuration 42e649d: 2013-08-27 Dmitry Jemerov - better names for couple of new classes added to API 5c70eaf: 2013-08-27 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' 2e0f1fa: 2013-08-27 Dmitry Trofimov - Update lib. dcc2c4b: 2013-08-27 Dmitry Trofimov - Override isRetina. 05b716b: 2013-08-27 nik - processing dependencies in JPS: @NotNull annotations and javadoc added 6314b6e: 2013-08-27 Dmitry Trofimov - Fixed for Retina. 9d1886c: 2013-08-27 Dmitry Avdeev - navigatable xsd documentation 0f389c5: 2013-08-27 Vladimir Krivosheev - hide internal class XValuePresenterAdapter a0386eb: 2013-08-27 Mikhail Golubev - Merge remote-tracking branch 'origin/master' 53248dc: 2013-08-27 Vladimir Krivosheev - fix createPresenter d0355b3: 2013-08-27 Sergey Evdokimov - Remove maven project from project tree when user deletes module. +review CR-IC @Anton.Makeev fb48f62: 2013-08-27 Sergey Evdokimov - Optimization of MavenProjectsTree.isManagedFile() 6b123aa: 2013-08-27 nik - JPS dependencies enumerator: convenient method added d4579e1: 2013-08-27 Dmitry Avdeev - UrlPsiReference promoted 3b1feea: 2013-08-27 Dmitry Avdeev - cleanup ee18443: 2013-08-27 Dmitry Avdeev - cleanup ca2484e: 2013-08-27 Dmitry Avdeev - cleanup c9e045b: 2013-08-27 Vladimir Krivosheev - 1) methods "void setPresentation(@NonNls String name, @Nullable Icon icon, @NonNls @Nullable String type, @NonNls @NotNull String separator, @NonNls @NotNull String value, boolean hasChildren);" and "void setPresentation(@NonNls String name, @Nullable Icon icon, @NonNls @Nullable String type, @NonNls @NotNull String value, boolean hasChildren);" b38d58a: 2013-08-27 Konstantin Kolosovsky - IDEA-94942 Fixed treating svn client warnings as errors 8cab12c: 2013-08-27 Dmitry Jemerov - separate UI and non-UI parts of MalformedFormatStringInspection 93e3fa6: 2013-08-20 Jason Holmes - Custom "Malformed format string" inspection b9f6fde: 2013-08-27 nik - actions to mark/unmark roots in Project View refactored to support custom root types 0455e46: 2013-08-27 Aleksey Pivovarov - Github: remove useless listener 7f40613: 2013-08-27 Aleksey Pivovarov - Github: reset User on token change c8a5402: 2013-08-27 Aleksey Pivovarov - Github: change layout 89769be: 2013-08-27 Aleksey Pivovarov - Github: add test 0d8ab04: 2013-08-27 Aleksey Pivovarov - Github: comment cba103c: 2013-08-27 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' d6ca049: 2013-08-27 Anna Kozlova - allow autoPopup after custom symbols (IDEA-112571) a70c338: 2013-08-27 Konstantin Bulenkov - IDEA-110846 File Structure pop-up doesn't work properly for template languages 4896775: 2013-08-27 Konstantin Bulenkov - recent files duplicates 05835fa: 2013-08-27 Fedor Korotkov - WEB-6328 Add support for HTML5 <main> element 2407d7b: 2013-08-27 Anna Kozlova - allow to call getValue without readAction as it was before 29cb25d: 2013-08-27 Dmitry Avdeev - fixing the leak 7d3932a: 2013-08-27 Dmitry Avdeev - IDEA-112708 Static classes in JSP class block are considered an error f6dbce2: 2013-08-26 Mikhail Golubev - IDEA-112605 Task management: can't add Generic server: NoClassDefFoundError: XPathFileType 82c1dc1: 2013-08-27 Konstantin Kolosovsky - Merge branch 'svn1_8_new' 08d46f1: 2013-08-27 Alexey Kudravtsev - highlightVisitor moves and cleanup e0fec9d: 2013-08-27 Alexey Kudravtsev - Merge remote-tracking branch 'origin/master' e9b1dfc: 2013-08-27 Anna Kozlova - dumb smart lambda completion (IDEA-112553) 6da30a4: 2013-08-26 Alexey Kudravtsev - calculate column/offset: optimisation of the no-tabs case c0990c4: 2013-08-26 Alexey Kudravtsev - race conditions? 135e250: 2013-08-26 Alexey Kudravtsev - notnull, cleanup 75b28ba: 2013-08-26 Alexey Kudravtsev - file was not rehighlighted on some changes 5647d35: 2013-08-26 Sergey Evdokimov - Make myManagedFilesPaths a Set to avoid duplication. 680dd76: 2013-08-27 Aleksey Pivovarov - Github: fix memory leak on Exception in setUp(); e3092b7: 2013-08-27 Dmitry Avdeev - IDEA-112611 Task management: DVCS: closing a task fails: "Cannot delete the branch master" d12d4fe: 2013-08-27 Anna Kozlova - logging for EA-49099 - PIEAE: PsiAnchor$StubIndexReference.getStartOffset 3cc53fe: 2013-08-27 Anna Kozlova - revert changes in api 10fbef9: 2013-08-27 Roman Shevchenko - Test data updated a5455ba: 2013-08-27 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' 8ed3ae8: 2013-08-27 Dmitry Trofimov - Updated lib. e6df583: 2013-08-27 Dmitry Trofimov - Added guava lib to terminal. 1853090: 2013-08-27 Dmitry Trofimov - Draw image Retina support. a7ebcaf: 2013-08-27 Dmitry Trofimov - Open session action moved to constructor. 5176bfa: 2013-08-26 Sergey Evdokimov - Fix maven tests 291f740: 2013-08-26 Vladimir Krivosheev - we must check if any port free too 18d4be6: 2013-08-26 Vassiliy Kudryashov - IDEA-70769 Settings panel: increase speed of scrollbars 0c76aca: 2013-08-26 Vassiliy Kudryashov - IDEA-112524 Working directory for default rake tasks is changed to $MODULE_DIR$ after project's reopening e2b7f6b: 2013-08-26 Konstantin Bulenkov - pattern dependent delay 1916142: 2013-08-26 Vladimir Krivosheev - cleanup 3da9dcd: 2013-08-26 Vladimir Krivosheev - done: custom binary request handler e02eba9: 2013-08-26 Aleksey Pivovarov - Github: do not produce dozens of notifications 8e41d59: 2013-08-26 Aleksey Pivovarov - Simplify 78c800d: 2013-08-26 Aleksey Pivovarov - Github: respect 'max' parameter 3afb19f: 2013-08-26 Maxim.Mossienko - proper versioning of stub index when persistent enumerator version changes c853e9e: 2013-08-26 Eugene Kudelevsky - IDEA-112376 add "importFilter" extension point to force using FQN when importing class 31281a9: 2013-08-26 Kirill Likhodedov - [git] Don't write empty lines to LOG.debug. 493b9fb: 2013-08-26 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' 60384ba: 2013-08-26 Dmitry Trofimov - Enable Run local terminal action for Windows. bfa8e61: 2013-08-26 Dmitry Jemerov - stupid typo fixed 04a76c3: 2013-08-26 Anna Kozlova - IDEA-112555 Bad code is green with method references on instance 8f5139d: 2013-08-26 Denis Fokin - IDEA-108265. Now user is asked whether the project should be opened in a new frame. da958ab: 2013-08-26 Natalia Ukhorskaya - Decompile chars, bytes and shorts correctly 8008709: 2013-08-26 Roman Shevchenko - java: incorrect annotation decoding fixed 9f07ea5: 2013-08-26 Roman Shevchenko - logging e07c905: 2013-08-26 Dmitry Trofimov - Merge remote-tracking branch 'origin/master' e81832d: 2013-08-26 Dmitry Trofimov - This update fixes pty on windows. e36607b: 2013-08-26 Konstantin Bulenkov - new renderer 9ea47a5: 2013-08-26 nik - source roots editors: obtain icons for content tree from extension d52dfb8: 2013-08-26 nik - constants moved 710d3ba: 2013-08-26 niktrop - Code style fixed aa8832d: 2013-08-26 Sergey Simonchik - code style: two subsequent ifs merged to reduce inner indent ed88487: 2013-08-26 Konstantin Kolosovsky - IDEA-94942 Provide detailed error messages to user instead of general ones e0df7a3: 2013-08-26 Vassiliy Kudryashov - IDEA-112524 Working directory for default rake tasks is changed to $MODULE_DIR$ after project's reopening e60a55b: 2013-08-26 nik - source roots editors refactored: root type specific UI moved to extension 928ea20: 2013-08-26 Mikhail Golubev - Merge remote-tracking branch 'origin/master' 70d526d: 2013-08-26 Anna Kozlova - guardedBy itself support (IDEA-112565) 2e23cb8: 2013-08-26 Anna Kozlova - restore bytecode viewer for java classes 89dffc9: 2013-08-26 Anna Kozlova - cal property name: accept without any other checks non-letter prefixes (IDEA-112585) bab044f: 2013-08-26 Vladimir Krivosheev - restore Alarm.cancelRequest dd817dc: 2013-08-26 Sergey Simonchik - simplification 7046dc4: 2013-08-26 niktrop - Some refactoring for reusing GenerateEquals UI in scala plugin 44e4219: 2013-08-26 Sergey Evdokimov - IDEA-112529 Maven: code completion could work in file path value with property references 867be29: 2013-08-26 Denis Fokin - Jumplist libraries changes. This is a release version of dll with eliminated MSVCRT dependencies. 7b0029d: 2013-08-26 Anton Makeev - CIDR: language tests in windows +review CR-OC @micha 9bef3a2: 2013-08-26 Konstantin Kolosovsky - IDEA-94942 Updated cleanup behavior after previous command failed 8447776: 2013-08-26 Mikhail Golubev - Remove SelectorBasedResponseHandler#getSelectorFileType, delegate to #getResponseType instead. Add missing @NotNull annotation, update doc comments. d7ecb44: 2013-08-26 Anna Kozlova - treat classes with before/after methods as test classes for bad declared exceptions (IDEA-112537) 4be2bcf: 2013-08-26 Anna Kozlova - restore suggestion to remove 'abstract' when method has body c57c308: 2013-08-26 Anna Kozlova - local can be final inside lambda body (IDEA-112630) b8170a6: 2013-08-26 Vladimir Krivosheev - isValuesCustomSorted, add or not SortValuesAction (alphabetically sort) TODO: this action should be moved to "Variables" as gear action b56b744: 2013-08-26 Mikhail Golubev - Merge remote-tracking branch 'origin/master' ba7e194: 2013-08-23 Mikhail Golubev - Migrate Assembla to new GenericRepository dd0885d: 2013-08-23 Mikhail Golubev - Refactor TemplateVariable aa94a3c: 2013-08-23 Mikhail Golubev - Add several tests of date parsing 0e7e61e: 2013-08-23 Mikhail Golubev - Reflective PsiElements creation in JqlParserDefinition a5f3011: 2013-08-26 Konstantin Kolosovsky - IDEA-94942 Short refactoring (removed duplication) 01cd38b: 2013-08-26 Sergey Simonchik - unnecessary line removed 7c34a2a: 2013-08-26 Dmitry Avdeev - IDEA-60895 No completion for enumerated and boolean values of xml tags 8b83a30: 2013-08-26 Vladislav.Soroka - gradle: cosmetic UI fix 8ee6a76: 2013-08-26 Roman Shevchenko - Convenient debug logging cde5373: 2013-08-26 Dmitry Avdeev - IDEA-60895 No completion for enumerated and boolean values of xml tags 75d9b47: 2013-08-24 Max Medvedev - IDEA-112621 Groovy: Remove explicit type declaration intention d1c29fb: 2013-08-23 Max Medvedev - separate visit methods for all types of classes, enums, interfaces, annotation types, and anonymous classes 5eca3d0: 2013-08-23 Max Medvedev - Byte code viewer shows byte code for groovy scripts c96d27f: 2013-08-23 Max Medvedev - Convert anonymous class to closure: don't insert 'as Runnable' if groovy version is at least 2.2 7e993a0: 2013-08-23 Max Medvedev - IDEA-112560 process only applicable mixins to a ref c33dc4a: 2013-08-26 Roman Shevchenko - platform: unified loading of system libraries (done right) d492a6f: 2013-08-25 Roman Shevchenko - logging 2f2b546: 2013-08-25 Roman Shevchenko - IDEA-112462 (allow plugins to extend lib search path) 2a39bf2: 2013-08-25 Maxim.Mossienko - restart lexer from 0 offset when searching from start a0858dbf: 2013-08-25 Maxim.Mossienko - 20% more compact compiler caches (-50M for IDEA project) 5ce3373: 2013-08-25 Maxim.Mossienko - IDEA-111918 Find: comments / string literals only: just 1 entry is found in each comment or literal 68ffc65: 2013-08-25 Maxim.Mossienko - faster contol + shift + N / control + N by default eb67af1: 2013-08-24 Vassiliy Kudryashov - IDEA-107413 Cannot drag'n'drop more than one item in Changes View d5ed7b5: 2013-08-24 nik - store properties of source folder in JPS element b3dd357: 2013-08-24 nik - typo 5b8b1ff: 2013-08-24 Kirill Likhodedov - Merge remote-tracking branch 'origin/master' 0dd284a: 2013-08-24 Kirill Likhodedov - Better assertion error in the DefaultLogger 3146c0b: 2013-08-23 Bas Leijdekkers - foreach can also initialize field 6356a11: 2013-08-23 Konstantin Bulenkov - completely refacrored 6ad3452: 2013-08-23 Anna Kozlova - show conflict on invert boolean and method references (IDEA-112572) 4726276: 2013-08-23 Anna Kozlova - extract method from lambda body: accept parameters of parent method (IDEA-112570) 16a5e32: 2013-08-23 Gregory.Shrago - EditorEx: permanent header API edc3497: 2013-08-23 Konstantin Kolosovsky - IDEA-94942 Content retrieval from svn refactored to ClientFactory model 0f40312: 2013-08-23 Mikhail Golubev - Change JqlQuery methods, JqlTerminalClause should extend JqlClause c335f2b: 2013-08-23 Mikhail Golubev - IDEA-111811 Task management: JIRA: JQL: code completion suggests nothing after closing parenthesis 6e6972a: 2013-08-23 Konstantin Kolosovsky - IDEA-94942 Annotate action e9d5412: 2013-08-23 Mikhail Golubev - Update description of NATIVE_SEARCH feature in TaskRepository 3c948a8: 2013-08-22 Konstantin Kolosovsky - IDEA-94942 Code cleanup - unused parameters removed 64706df: 2013-08-22 Konstantin Kolosovsky - IDEA-112184 0e41cad: 2013-08-22 Konstantin Kolosovsky - IDEA-94942 Simple property client to fix SvnMergeProvider.isBinary implementation 8091bb0: 2013-08-22 Konstantin Kolosovsky - IDEA-94942 Implemented file conflicts resolving Updated "svn info" result parsing 040f405: 2013-08-21 Konstantin Kolosovsky - IDEA-94942 SvnBindClient - unsupported methods removed cef0440: 2013-08-21 Konstantin Kolosovsky - IDEA-94942 "bindSvn" module classes moved to "svn4idea" SvnBindClient unsupported methods will be removed in next commit (to track change like "rename" instead of "delete" + "add" to preserve history) 6c36a93: 2013-08-20 Konstantin Kolosovsky - IDEA-112184 Added logging to detect authentication issues 928c01e: 2013-08-07 Konstantin Kolosovsky - IDEA-94942 - Basic svn 1.8 test support d880599: 2013-08-20 Konstantin Kolosovsky - IDEA-94942 Small text fixes Ignoring tests for old/not used functionality 71384c1: 2013-08-19 Konstantin Kolosovsky - IDEA-94942 Copy and move actions a5f7e7c: 2013-08-19 Konstantin Kolosovsky - IDEA-94942 Delete action e197c08: 2013-08-19 Konstantin Kolosovsky - IDEA-94942 Fixed authentication for svn protocol c28c127: 2013-08-19 Konstantin Kolosovsky - IDEA-94942 Short add, revert commands refactoring e06a346: 2013-08-19 Konstantin Kolosovsky - IDEA-94942 Revert action Fixed status command for single file Fixed status result parsing for normal (non-modified versioned) file 0f66f9d: 2013-08-19 Konstantin Kolosovsky - IDEA-94942 Logging and comments for some commands c928fe5: 2013-08-16 Konstantin Kolosovsky - IDEA-94942 Force command line client usage if working copy of svn 1.8 format detected d6e4e38: 2013-08-16 Konstantin Kolosovsky - IDEA-94942 Fixed "add" action output parsing for binary files 1236be5: 2013-08-15 Konstantin Kolosovsky - IDEA-94942 Small refactoring and fixes after review e05b576: 2013-08-15 Konstantin Kolosovsky - IDEA-94942 "Add" action for files and directories ccf6085: 2013-08-15 Konstantin Kolosovsky - IDEA-94942 "Subversion" -> "Show History" for files and folders aba7390: 2013-08-14 Konstantin Kolosovsky - IDEA-94942 Add command refactored 555d597: 2013-08-14 Konstantin Kolosovsky - IDEA-94942 Fixing status, info commands to use correct arguments b083f31: 2013-08-14 Konstantin Kolosovsky - IDEA-94942 Diff provider (without revision properties) Small command refactoring f657dc8: 2013-08-13 Konstantin Kolosovsky - IDEA-94942 Authentication updates Authentication for remote status command Result parsing for remote info command 2 way SSL support (could be issues with ordinary password entering after 2 way SSL) 2785122: 2013-07-29 Konstantin Kolosovsky - IDEA-94942 initial svn 1.8 support with already existing command line functionality 857bfd5: 2013-08-12 max-kammerer - Update CoreJavaFileManagerTest.java 13539bc: 2013-08-09 Mikhael Bogdanov - CoreJavaFileManager.findClass: properly resolve $ in inner class names Change-Id: Ica3d3d647183983bcd88ce2fb3450deb86343cdb
Diffstat (limited to 'xml')
-rw-r--r--xml/dom-impl/src/META-INF/DomPlugin.xml13
-rw-r--r--xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java8
-rw-r--r--xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java38
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java123
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java17
-rw-r--r--xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlCompletionExtension.java (renamed from xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java)4
-rw-r--r--xml/impl/src/com/intellij/xml/XmlCompletionExtension.java (renamed from xml/impl/src/com/intellij/xml/XmlTagNameProvider.java)21
-rw-r--r--xml/impl/src/com/intellij/xml/util/UserColorLookup.java6
-rw-r--r--xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java59
-rw-r--r--xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java2
-rw-r--r--xml/impl/src/com/intellij/xml/util/XmlPrefixReferenceProvider.java16
-rw-r--r--xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java2
-rw-r--r--xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java18
-rw-r--r--xml/impl/src/com/intellij/xml/util/documentation/html5table.xml8
-rw-r--r--xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java8
-rw-r--r--xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java6
-rw-r--r--xml/tests/testData/completion/tagValue/completeBoolean.xml1
-rw-r--r--xml/tests/testData/completion/tagValue/completeEnum.xml1
-rw-r--r--xml/tests/testData/completion/tagValue/enumerated.xsd16
-rw-r--r--xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties4
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java5
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java9
-rw-r--r--xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java2
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java5
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java12
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java20
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java4
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java3
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java19
-rw-r--r--xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java6
30 files changed, 358 insertions, 98 deletions
diff --git a/xml/dom-impl/src/META-INF/DomPlugin.xml b/xml/dom-impl/src/META-INF/DomPlugin.xml
index ae1e1b0ce0ef..89dee6b3f6ad 100644
--- a/xml/dom-impl/src/META-INF/DomPlugin.xml
+++ b/xml/dom-impl/src/META-INF/DomPlugin.xml
@@ -4,14 +4,21 @@
interface="com.intellij.util.xml.DomFileDescription"/>
<extensionPoint name="dom.implementation"
- beanClass="com.intellij.util.xml.impl.DomImplementationClassEP"/>
+ beanClass="com.intellij.util.xml.impl.DomImplementationClassEP">
+ <with attribute="interfaceName" implements="com.intellij.util.xml.DomElement"/>
+ <with attribute="implementationName" implements="com.intellij.util.xml.DomElement"/>
+ </extensionPoint>
<extensionPoint name="dom.converter"
- beanClass="com.intellij.util.xml.impl.DomImplementationClassEP"/>
+ beanClass="com.intellij.util.xml.impl.DomImplementationClassEP">
+ <with attribute="interfaceName" implements="com.intellij.util.xml.Converter"/>
+ <with attribute="implementationName" implements="com.intellij.util.xml.Converter"/>
+ </extensionPoint>
<extensionPoint name="dom.extender"
beanClass="com.intellij.util.xml.reflect.DomExtenderEP">
- <with attribute="myDomClass" implements="com.intellij.util.xml.reflect.DomExtender"/>
+ <with attribute="domClassName" implements="com.intellij.util.xml.DomElement"/>
+ <with attribute="extenderClassName" implements="com.intellij.util.xml.reflect.DomExtender"/>
</extensionPoint>
<extensionPoint name="dom.customAnnotationChecker"
diff --git a/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java b/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java
index 45220b08a552..a068f0fb0271 100644
--- a/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java
+++ b/xml/impl/resources/com/intellij/codeInsight/completion/TagNameReferenceCompletionProvider.java
@@ -29,7 +29,7 @@ import com.intellij.psi.xml.XmlTag;
import com.intellij.util.Consumer;
import com.intellij.util.PairConsumer;
import com.intellij.util.ProcessingContext;
-import com.intellij.xml.XmlTagNameProvider;
+import com.intellij.xml.XmlCompletionExtension;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -41,8 +41,10 @@ import java.util.List;
public class TagNameReferenceCompletionProvider extends CompletionProvider<CompletionParameters> {
public static LookupElement[] getTagNameVariants(final @NotNull XmlTag tag, final String prefix) {
List<LookupElement> elements = new ArrayList<LookupElement>();
- for (XmlTagNameProvider tagNameProvider : XmlTagNameProvider.EP_NAME.getExtensions()) {
- tagNameProvider.addTagNameVariants(elements, tag, prefix);
+ for (XmlCompletionExtension tagNameProvider : XmlCompletionExtension.EP_NAME.getExtensions()) {
+ if (tagNameProvider.isMyContext(tag)) {
+ tagNameProvider.addTagNameVariants(elements, tag, prefix);
+ }
}
return elements.toArray(new LookupElement[elements.size()]);
}
diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java
index 6b0debbb8896..b7710d6728b2 100644
--- a/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java
+++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlAttributeReferenceCompletionProvider.java
@@ -27,14 +27,14 @@ import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ProcessingContext;
-import com.intellij.xml.NamespaceAwareXmlAttributeDescriptor;
-import com.intellij.xml.XmlAttributeDescriptor;
-import com.intellij.xml.XmlElementDescriptor;
-import com.intellij.xml.XmlExtension;
+import com.intellij.xml.*;
import com.intellij.xml.util.HtmlUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
+import java.util.List;
+
import static com.intellij.codeInsight.completion.CompletionInitializationContext.DUMMY_IDENTIFIER_TRIMMED;
public class XmlAttributeReferenceCompletionProvider extends CompletionProvider<CompletionParameters> {
@@ -81,9 +81,18 @@ public class XmlAttributeReferenceCompletionProvider extends CompletionProvider<
completionData = CompletionUtil.getCompletionDataByElement(attribute, attribute.getContainingFile().getOriginalFile());
boolean caseSensitive = !(completionData instanceof HtmlCompletionData) || ((HtmlCompletionData)completionData).isCaseSensitive();
+ final List<XmlCompletionExtension> completionExtensions = new ArrayList<XmlCompletionExtension>();
+
+ for (XmlCompletionExtension completionExtension : XmlCompletionExtension.EP_NAME.getExtensions()) {
+ if (completionExtension.isMyContext(tag)) {
+ completionExtensions.add(completionExtension);
+ }
+ }
+
for (XmlAttributeDescriptor descriptor : descriptors) {
if (isValidVariant(attribute, descriptor, attributes, extension)) {
- String name = descriptor.getName(tag);
+ final String fullAttrName = descriptor.getName(tag);
+ String name = fullAttrName;
InsertHandler<LookupElement> insertHandler = XmlAttributeInsertHandler.INSTANCE;
@@ -103,7 +112,7 @@ public class XmlAttributeReferenceCompletionProvider extends CompletionProvider<
}
if (prefix == null || name.startsWith(prefix)) {
if (prefix != null && name.length() > prefix.length()) {
- name = descriptor.getName(tag).substring(prefix.length());
+ name = fullAttrName.substring(prefix.length());
}
LookupElementBuilder element = LookupElementBuilder.create(name);
if (descriptor instanceof PsiPresentableMetaData) {
@@ -116,8 +125,21 @@ public class XmlAttributeReferenceCompletionProvider extends CompletionProvider<
element = element
.withCaseSensitivity(caseSensitive)
.withInsertHandler(insertHandler);
- result.addElement(
- descriptor.isRequired() ? PrioritizedLookupElement.withPriority(element.appendTailText("(required)", true), 100) : element);
+ LookupElement e = null;
+
+ for (XmlCompletionExtension tagNameProvider : completionExtensions) {
+ e = tagNameProvider.setupAttributeLookupElement(tag, descriptor, fullAttrName, element);
+
+ if (e != null) {
+ break;
+ }
+ }
+ if (e == null) {
+ e = descriptor.isRequired()
+ ? PrioritizedLookupElement.withPriority(element.appendTailText("(required)", true), 100)
+ : element;
+ }
+ result.addElement(e);
}
}
}
diff --git a/xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java
new file mode 100644
index 000000000000..0062567ed16f
--- /dev/null
+++ b/xml/impl/src/com/intellij/ide/browsers/OpenFileInDefaultBrowserAction.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2000-2013 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * 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.ide.browsers;
+
+import com.intellij.ide.BrowserUtil;
+import com.intellij.ide.GeneralSettings;
+import com.intellij.ide.browsers.impl.WebBrowserServiceImpl;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.project.DumbAwareAction;
+import com.intellij.openapi.ui.Messages;
+import com.intellij.openapi.util.Pair;
+import com.intellij.psi.PsiFile;
+import com.intellij.testFramework.LightVirtualFile;
+import com.intellij.xml.XmlBundle;
+import com.intellij.xml.util.HtmlUtil;
+
+import java.awt.event.InputEvent;
+
+public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
+ private static final Logger LOG = Logger.getInstance(OpenFileInDefaultBrowserAction.class);
+
+ @Override
+ public void update(AnActionEvent e) {
+ final DataContext dataContext = e.getDataContext();
+ final PsiFile file = LangDataKeys.PSI_FILE.getData(dataContext);
+ final Presentation presentation = e.getPresentation();
+
+ if (file == null || file.getVirtualFile() == null) {
+ presentation.setVisible(false);
+ presentation.setEnabled(false);
+ return;
+ }
+
+ Pair<WebBrowserUrlProvider, Url> browserUrlProvider = WebBrowserServiceImpl.getProvider(file);
+ final boolean isHtmlFile = HtmlUtil.isHtmlFile(file);
+ if (browserUrlProvider == null) {
+ if (file.getVirtualFile() instanceof LightVirtualFile) {
+ presentation.setVisible(false);
+ presentation.setEnabled(false);
+ return;
+ }
+ else {
+ presentation.setEnabled(isHtmlFile);
+ }
+ }
+ else {
+ presentation.setEnabled(true);
+ }
+ presentation.setVisible(true);
+
+ String text = getTemplatePresentation().getText();
+ String description = getTemplatePresentation().getDescription();
+
+ if (browserUrlProvider != null) {
+ final String customText = browserUrlProvider.first.getOpenInBrowserActionText(file);
+ if (customText != null) {
+ text = customText;
+ }
+ final String customDescription = browserUrlProvider.first.getOpenInBrowserActionDescription(file);
+ if (customDescription != null) {
+ description = customDescription;
+ }
+ if (isHtmlFile) {
+ description += " (hold Shift to open URL of local file)";
+ }
+ }
+
+ presentation.setText(text);
+ presentation.setDescription(description);
+
+ GeneralSettings settings = GeneralSettings.getInstance();
+ if (!settings.isUseDefaultBrowser()) {
+ BrowsersConfiguration.BrowserFamily family = BrowsersConfiguration.getInstance().findFamilyByPath(settings.getBrowserPath());
+ if (family != null) {
+ presentation.setIcon(family.getIcon());
+ }
+ }
+
+ if (ActionPlaces.isPopupPlace(e.getPlace())) {
+ presentation.setVisible(presentation.isEnabled());
+ }
+ }
+
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ DataContext dataContext = e.getDataContext();
+ PsiFile psiFile = LangDataKeys.PSI_FILE.getData(dataContext);
+ LOG.assertTrue(psiFile != null);
+ InputEvent event = e.getInputEvent();
+ doOpen(psiFile, event != null && event.isShiftDown());
+ }
+
+ static void doOpen(PsiFile psiFile, boolean preferLocalUrl) {
+ try {
+ Url url = WebBrowserService.getInstance().getUrlToOpen(psiFile, preferLocalUrl);
+ if (url != null) {
+ ApplicationManager.getApplication().saveAll();
+ BrowserUtil.launchBrowser(url.toExternalForm());
+ }
+ }
+ catch (WebBrowserUrlProvider.BrowserException e1) {
+ Messages.showErrorDialog(e1.getMessage(), XmlBundle.message("browser.error"));
+ }
+ catch (Exception e1) {
+ LOG.error(e1);
+ }
+ }
+}
diff --git a/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java b/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java
index e223ee3d6bcb..3114bb80d97b 100644
--- a/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java
+++ b/xml/impl/src/com/intellij/ide/browsers/SelectInDefaultBrowserTarget.java
@@ -15,14 +15,11 @@
*/
package com.intellij.ide.browsers;
-import com.intellij.ide.BrowserUtil;
import com.intellij.ide.SelectInContext;
import com.intellij.ide.SelectInTargetBase;
import com.intellij.ide.StandardTargetWeights;
import com.intellij.ide.browsers.impl.WebBrowserServiceImpl;
-import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -72,19 +69,7 @@ class SelectInDefaultBrowserTarget extends SelectInTargetBase {
LOG.assertTrue(psiElement != null);
PsiFile psiFile = psiElement.getContainingFile();
LOG.assertTrue(psiFile != null);
- try {
- Url url = WebBrowserService.getInstance().getUrlToOpen(psiFile, false);
- if (url != null) {
- ApplicationManager.getApplication().saveAll();
- BrowserUtil.launchBrowser(url.toExternalForm());
- }
- }
- catch (WebBrowserUrlProvider.BrowserException e1) {
- Messages.showErrorDialog(e1.getMessage(), XmlBundle.message("browser.error"));
- }
- catch (Exception e1) {
- LOG.error(e1);
- }
+ OpenFileInDefaultBrowserAction.doOpen(psiFile, false);
}
@Override
diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlCompletionExtension.java
index 0601b92c40a1..7fca24b973de 100644
--- a/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlTagNameProvider.java
+++ b/xml/impl/src/com/intellij/psi/impl/source/xml/DefaultXmlCompletionExtension.java
@@ -23,7 +23,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlTag;
import com.intellij.xml.XmlElementDescriptor;
import com.intellij.xml.XmlExtension;
-import com.intellij.xml.XmlTagNameProvider;
+import com.intellij.xml.XmlCompletionExtension;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NotNull;
@@ -32,7 +32,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-public class DefaultXmlTagNameProvider implements XmlTagNameProvider {
+public class DefaultXmlCompletionExtension extends XmlCompletionExtension {
@Override
public void addTagNameVariants(List<LookupElement> elements, @NotNull XmlTag tag, String prefix) {
final List<String> namespaces;
diff --git a/xml/impl/src/com/intellij/xml/XmlTagNameProvider.java b/xml/impl/src/com/intellij/xml/XmlCompletionExtension.java
index a0b5809d7277..01aea037c3bb 100644
--- a/xml/impl/src/com/intellij/xml/XmlTagNameProvider.java
+++ b/xml/impl/src/com/intellij/xml/XmlCompletionExtension.java
@@ -16,9 +16,11 @@
package com.intellij.xml;
import com.intellij.codeInsight.lookup.LookupElement;
+import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.psi.xml.XmlTag;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -27,8 +29,21 @@ import java.util.List;
*
* @see HtmlCustomTagNameProvider
*/
-public interface XmlTagNameProvider {
- ExtensionPointName<XmlTagNameProvider> EP_NAME = new ExtensionPointName<XmlTagNameProvider>("com.intellij.xml.tagNameProvider");
+public abstract class XmlCompletionExtension {
+ public static final ExtensionPointName<XmlCompletionExtension> EP_NAME = new ExtensionPointName<XmlCompletionExtension>("com.intellij.xml.completionExtension");
- void addTagNameVariants(List<LookupElement> elements, @NotNull XmlTag tag, String prefix);
+ public void addTagNameVariants(List<LookupElement> elements, @NotNull XmlTag tag, String prefix) {
+ }
+
+ @Nullable
+ public LookupElement setupAttributeLookupElement(@NotNull XmlTag contextTag,
+ @NotNull XmlAttributeDescriptor descriptor,
+ @NotNull String name,
+ @NotNull LookupElementBuilder elementBuilder) {
+ return null;
+ }
+
+ public boolean isMyContext(@NotNull XmlTag context) {
+ return true;
+ }
}
diff --git a/xml/impl/src/com/intellij/xml/util/UserColorLookup.java b/xml/impl/src/com/intellij/xml/util/UserColorLookup.java
index dbc248031c21..1f39b9162cce 100644
--- a/xml/impl/src/com/intellij/xml/util/UserColorLookup.java
+++ b/xml/impl/src/com/intellij/xml/util/UserColorLookup.java
@@ -54,13 +54,17 @@ public class UserColorLookup extends LookupElementDecorator<LookupElement> {
}
public UserColorLookup(final Function<Color, String> colorToStringConverter) {
+ this(colorToStringConverter, LookupValueWithPriority.HIGH);
+ }
+
+ public UserColorLookup(final Function<Color, String> colorToStringConverter, int priority) {
super(PrioritizedLookupElement.withPriority(LookupElementBuilder.create(COLOR_STRING).withInsertHandler(
new InsertHandler<LookupElement>() {
@Override
public void handleInsert(InsertionContext context, LookupElement item) {
handleUserSelection(context, colorToStringConverter);
}
- }), LookupValueWithPriority.HIGH));
+ }), priority));
}
private static void handleUserSelection(InsertionContext context, @NotNull Function<Color, String> colorToStringConverter) {
diff --git a/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java b/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java
index 590ae534eaa6..c1309a54f1d2 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java
+++ b/xml/impl/src/com/intellij/xml/util/XmlEnumeratedValueReferenceProvider.java
@@ -17,15 +17,11 @@ package com.intellij.xml.util;
import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor;
import com.intellij.openapi.util.Key;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiLanguageInjectionHost;
-import com.intellij.psi.PsiReference;
-import com.intellij.psi.PsiReferenceProvider;
+import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
-import com.intellij.psi.xml.XmlAttribute;
-import com.intellij.psi.xml.XmlAttributeValue;
+import com.intellij.psi.xml.*;
+import com.intellij.util.ArrayUtil;
import com.intellij.util.ProcessingContext;
-import com.intellij.xml.XmlAttributeDescriptor;
import com.intellij.xml.impl.XmlEnumerationDescriptor;
import com.intellij.xml.impl.schema.XmlSchemaTagsProcessor;
import org.jetbrains.annotations.NotNull;
@@ -34,7 +30,7 @@ import org.jetbrains.annotations.NotNull;
* @author Dmitry Avdeev
* Date: 15.08.13
*/
-public class XmlEnumeratedValueReferenceProvider extends PsiReferenceProvider {
+public class XmlEnumeratedValueReferenceProvider<T extends PsiElement> extends PsiReferenceProvider {
public final static Key<Boolean> SUPPRESS = Key.create("suppress attribute value references");
@@ -45,22 +41,49 @@ public class XmlEnumeratedValueReferenceProvider extends PsiReferenceProvider {
if (XmlSchemaTagsProcessor.PROCESSING_FLAG.get() != null || context.get(SUPPRESS) != null) {
return PsiReference.EMPTY_ARRAY;
}
- XmlAttributeValue value = (XmlAttributeValue)element;
- if (value instanceof PsiLanguageInjectionHost && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)value)) {
+ @SuppressWarnings("unchecked") PsiElement host = getHost((T)element);
+ if (host instanceof PsiLanguageInjectionHost && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)host)) {
return PsiReference.EMPTY_ARRAY;
}
- String unquotedValue = value.getValue();
- if (unquotedValue == null || XmlHighlightVisitor.skipValidation(value) || !XmlUtil.isSimpleXmlAttributeValue(unquotedValue, value)) {
+ String unquotedValue = ElementManipulators.getValueText(element);
+ if (XmlHighlightVisitor.skipValidation(element) || !XmlUtil.isSimpleValue(unquotedValue, element)) {
return PsiReference.EMPTY_ARRAY;
}
- PsiElement parent = value.getParent();
- if (parent instanceof XmlAttribute) {
- final XmlAttributeDescriptor descriptor = ((XmlAttribute)parent).getDescriptor();
- if (descriptor instanceof XmlEnumerationDescriptor &&
- (descriptor.isFixed() || descriptor.isEnumerated() || unquotedValue.equals(descriptor.getDefaultValue()))) { // todo case insensitive
- return ((XmlEnumerationDescriptor)descriptor).getValueReferences(value);
+ @SuppressWarnings("unchecked") final Object descriptor = getDescriptor((T)element);
+ if (descriptor instanceof XmlEnumerationDescriptor) {
+ XmlEnumerationDescriptor enumerationDescriptor = (XmlEnumerationDescriptor)descriptor;
+ if (enumerationDescriptor.isFixed() ||
+ enumerationDescriptor.isEnumerated((XmlElement)element) ||
+ unquotedValue.equals(enumerationDescriptor.getDefaultValue())) { // todo case insensitive
+ //noinspection unchecked
+ return enumerationDescriptor.getValueReferences((XmlElement)element, unquotedValue);
}
}
return PsiReference.EMPTY_ARRAY;
}
+
+ protected PsiElement getHost(T element) {
+ return element;
+ }
+
+ protected Object getDescriptor(T element) {
+ PsiElement parent = element.getParent();
+ return parent instanceof XmlAttribute ? ((XmlAttribute)parent).getDescriptor() : null;
+ }
+
+ public static XmlEnumeratedValueReferenceProvider forTags() {
+ return new XmlEnumeratedValueReferenceProvider<XmlTag>() {
+
+ @Override
+ protected Object getDescriptor(XmlTag element) {
+ return element.getDescriptor();
+ }
+
+ @Override
+ protected PsiElement getHost(XmlTag element) {
+ XmlText[] textElements = element.getValue().getTextElements();
+ return ArrayUtil.getFirstElement(textElements);
+ }
+ };
+ }
}
diff --git a/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java b/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java
index afe28eda4b4d..6f8a17a6ff35 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java
+++ b/xml/impl/src/com/intellij/xml/util/XmlInvalidIdInspection.java
@@ -40,7 +40,7 @@ public class XmlInvalidIdInspection extends XmlDuplicatedIdInspection {
idRef = idRef.toLowerCase();
}
- if (XmlUtil.isSimpleXmlAttributeValue(idRef, value) && refHolder.isIdReferenceValue(value)) {
+ if (XmlUtil.isSimpleValue(idRef, value) && refHolder.isIdReferenceValue(value)) {
boolean hasIdDeclaration = refHolder.hasIdDeclaration(idRef);
if (!hasIdDeclaration && tag instanceof HtmlTag) {
hasIdDeclaration = refHolder.hasIdDeclaration(value.getValue());
diff --git a/xml/impl/src/com/intellij/xml/util/XmlPrefixReferenceProvider.java b/xml/impl/src/com/intellij/xml/util/XmlPrefixReferenceProvider.java
index f1b829475a3b..a740db03aba0 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlPrefixReferenceProvider.java
+++ b/xml/impl/src/com/intellij/xml/util/XmlPrefixReferenceProvider.java
@@ -23,6 +23,10 @@ public class XmlPrefixReferenceProvider extends PsiReferenceProvider {
@Override
public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) {
XmlAttributeValue attributeValue = (XmlAttributeValue)element;
+ String value = attributeValue.getValue();
+ if (value == null) return PsiReference.EMPTY_ARRAY;
+ int i = value.indexOf(':');
+ if (i <= 0) return PsiReference.EMPTY_ARRAY;
PsiElement parent = attributeValue.getParent();
if (parent instanceof XmlAttribute && !XmlNSDescriptorImpl.checkSchemaNamespace(((XmlAttribute)parent).getParent())) {
XmlAttributeDescriptor descriptor = ((XmlAttribute)parent).getDescriptor();
@@ -32,15 +36,9 @@ public class XmlPrefixReferenceProvider extends PsiReferenceProvider {
String prefix = XmlUtil.findPrefixByQualifiedName(type);
String ns = ((XmlTag)descriptor.getDeclaration()).getNamespaceByPrefix(prefix);
if (XmlNSDescriptorImpl.checkSchemaNamespace(ns)) {
- String value = attributeValue.getValue();
- if (value != null) {
- int i = value.indexOf(':');
- if (i > 0) {
- return new PsiReference[] {
- new SchemaPrefixReference(attributeValue, TextRange.from(1, i), value.substring(0, i), null)
- };
- }
- }
+ return new PsiReference[] {
+ new SchemaPrefixReference(attributeValue, TextRange.from(1, i), value.substring(0, i), null)
+ };
}
}
}
diff --git a/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java b/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java
index 023e3a97c441..3d475498870d 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java
+++ b/xml/impl/src/com/intellij/xml/util/XmlRefCountHolder.java
@@ -266,7 +266,7 @@ public class XmlRefCountHolder {
private void updateMap(@NotNull final XmlAttribute attribute, @NotNull final XmlAttributeValue value, final boolean soft) {
final String id = XmlHighlightVisitor.getUnquotedValue(value, attribute.getParent());
- if (XmlUtil.isSimpleXmlAttributeValue(id, value) &&
+ if (XmlUtil.isSimpleValue(id, value) &&
PsiTreeUtil.getChildOfType(value, OuterLanguageElement.class) == null) {
myHolder.registerId(id, value, soft);
}
diff --git a/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java b/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java
index ae588622794a..fa04ab0edddc 100644
--- a/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java
+++ b/xml/impl/src/com/intellij/xml/util/XmlReferenceContributor.java
@@ -4,16 +4,18 @@ import com.intellij.codeInsight.daemon.impl.analysis.encoding.XmlEncodingReferen
import com.intellij.html.impl.providers.MicrodataReferenceProvider;
import com.intellij.html.impl.util.MicrodataUtil;
import com.intellij.patterns.PlatformPatterns;
-import com.intellij.psi.PsiReferenceContributor;
-import com.intellij.psi.PsiReferenceRegistrar;
+import com.intellij.psi.*;
import com.intellij.psi.filters.*;
import com.intellij.psi.filters.position.NamespaceFilter;
import com.intellij.psi.filters.position.ParentElementFilter;
+import com.intellij.psi.impl.UrlPsiReference;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.DtdReferencesProvider;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.IdReferenceProvider;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.SchemaReferencesProvider;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.URIReferenceProvider;
import com.intellij.psi.xml.*;
+import com.intellij.util.ProcessingContext;
+import org.jetbrains.annotations.NotNull;
import static com.intellij.patterns.XmlPatterns.*;
@@ -90,5 +92,17 @@ public class XmlReferenceContributor extends PsiReferenceContributor {
registrar.registerReferenceProvider(xmlAttributeValue(), new XmlPrefixReferenceProvider());
registrar.registerReferenceProvider(xmlAttributeValue(), new XmlEnumeratedValueReferenceProvider(), PsiReferenceRegistrar.LOWER_PRIORITY);
+ registrar.registerReferenceProvider(xmlTag(), XmlEnumeratedValueReferenceProvider.forTags(), PsiReferenceRegistrar.LOWER_PRIORITY);
+
+ registrar.registerReferenceProvider(xmlAttributeValue().withLocalName("source")
+ .withSuperParent(2, xmlTag().withLocalName("documentation").withNamespace(XmlUtil.SCHEMA_URIS)),
+ new PsiReferenceProvider() {
+ @NotNull
+ @Override
+ public PsiReference[] getReferencesByElement(@NotNull PsiElement element,
+ @NotNull ProcessingContext context) {
+ return new PsiReference[] { new UrlPsiReference(element) };
+ }
+ });
}
}
diff --git a/xml/impl/src/com/intellij/xml/util/documentation/html5table.xml b/xml/impl/src/com/intellij/xml/util/documentation/html5table.xml
index 94c2e45589a6..de3dbabfe0fb 100644
--- a/xml/impl/src/com/intellij/xml/util/documentation/html5table.xml
+++ b/xml/impl/src/com/intellij/xml/util/documentation/html5table.xml
@@ -1,4 +1,12 @@
<html-property-table baseHelpRef="http://dev.w3.org/html5/spec/">
+<tag name = "main"
+ helpref = "grouping-content.html#the-main-element"
+ description = "represents the main content of the body of a document or application"
+ startTag = "true"
+ endTag = "true"
+ empty = "false"
+ dtd = ""
+/>
<tag name = "section"
helpref = "sections.html#the-section-element"
description = "generic document or application section"
diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java
index f9d9f7cbe23e..b05794e92320 100644
--- a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java
+++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RngXmlAttributeDescriptor.java
@@ -21,7 +21,6 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlElement;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ArrayUtil;
@@ -32,6 +31,7 @@ import com.intellij.xml.util.XmlEnumeratedValueReference;
import gnu.trove.THashSet;
import gnu.trove.TObjectHashingStrategy;
import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.kohsuke.rngom.digested.DAttributePattern;
import org.xml.sax.Locator;
@@ -206,10 +206,8 @@ public class RngXmlAttributeDescriptor extends BasicXmlAttributeDescriptor {
}
@Override
- public PsiReference[] getValueReferences(final XmlAttributeValue value) {
- String text = value.getValue();
- if (text == null) return PsiReference.EMPTY_ARRAY;
- return new PsiReference[] { new XmlEnumeratedValueReference(value, this) {
+ public PsiReference[] getValueReferences(final XmlElement element, @NotNull String text) {
+ return new PsiReference[] { new XmlEnumeratedValueReference(element, this) {
@Nullable
@Override
public PsiElement resolve() {
diff --git a/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java b/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java
index b054b7f9a2a5..7d6df70ec21e 100644
--- a/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java
+++ b/xml/tests/src/com/intellij/codeInsight/completion/XmlCompletionTest.java
@@ -670,5 +670,11 @@ public class XmlCompletionTest extends LightCodeInsightFixtureTestCase {
myFixture.configureByFiles("Substitute/schema-a.xsd", "Substitute/schema-b.xsd");
myFixture.testCompletionVariants("Substitute/test.xml", "b:instance", "instance");
}
+
+ public void testEnumeratedTagValue() throws Exception {
+ myFixture.configureByFile("tagValue/enumerated.xsd");
+ myFixture.testCompletionVariants("tagValue/completeEnum.xml", "none", "standard");
+ myFixture.testCompletionVariants("tagValue/completeBoolean.xml", "false", "true");
+ }
}
diff --git a/xml/tests/testData/completion/tagValue/completeBoolean.xml b/xml/tests/testData/completion/tagValue/completeBoolean.xml
new file mode 100644
index 000000000000..7e8479f9147f
--- /dev/null
+++ b/xml/tests/testData/completion/tagValue/completeBoolean.xml
@@ -0,0 +1 @@
+<bar xmlns="foo.bar"><caret></bar> \ No newline at end of file
diff --git a/xml/tests/testData/completion/tagValue/completeEnum.xml b/xml/tests/testData/completion/tagValue/completeEnum.xml
new file mode 100644
index 000000000000..4926a63a2837
--- /dev/null
+++ b/xml/tests/testData/completion/tagValue/completeEnum.xml
@@ -0,0 +1 @@
+<foo xmlns="foo.bar"><caret></foo> \ No newline at end of file
diff --git a/xml/tests/testData/completion/tagValue/enumerated.xsd b/xml/tests/testData/completion/tagValue/enumerated.xsd
new file mode 100644
index 000000000000..fc0a4d86fa33
--- /dev/null
+++ b/xml/tests/testData/completion/tagValue/enumerated.xsd
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+ targetNamespace="foo.bar">
+ <xs:element name="foo">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="standard"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+
+ <xs:element name="bar" type="xs:boolean"/>
+
+ <xs:element name="def" type="xs:string" default="my default"/>
+</xs:schema>
diff --git a/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties b/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties
index 8ab43e2f5311..166a0b84f123 100644
--- a/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties
+++ b/xml/xml-psi-impl/resources/messages/XmlErrorMessages.properties
@@ -20,7 +20,7 @@ duplicate.id.reference=Duplicate id reference
invalid.id.reference=Invalid id reference
uri.is.not.registered=URI is not registered (Settings | Project Settings | Schemas and DTDs)
registered.resource.is.not.recognized=Resource registered by this uri is not recognized (Settings | Project Settings | Schemas and DTDs)
-attribute.should.have.fixed.value=Attribute should have fixed value {0}
+should.have.fixed.value={0} should have fixed value {1}
#quickfixes
insert.required.attribute.quickfix.text=Insert Required Attribute {0}
@@ -44,7 +44,7 @@ tag.start.is.not.closed=Tag start is not closed
unescaped.ampersand.or.nonterminated.character.entity.reference=Unescaped \\& or nonterminated character/entity reference
expected.prologue.tag.termination.expected='?>' expected
expected.whitespace=Whitespace expected
-wrong.attribute.value=Wrong attribute value
+wrong.value=Wrong {0} value
way.too.unbalanced=Way too unbalanced. Stopping attempt to balance tags properly at this point
cannot.resolve.taglib.uri=Cannot resolve taglib with uri {0}
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java
index 674ad163c0b2..7204bf720403 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/dtd/HtmlAttributeDescriptorImpl.java
@@ -20,6 +20,7 @@ import com.intellij.psi.xml.XmlElement;
import com.intellij.util.ArrayUtil;
import com.intellij.xml.XmlAttributeDescriptor;
import com.intellij.xml.impl.BasicXmlAttributeDescriptor;
+import com.intellij.xml.impl.XmlEnumerationDescriptor;
/**
* @author Maxim.Mossienko
@@ -95,8 +96,8 @@ public class HtmlAttributeDescriptorImpl extends BasicXmlAttributeDescriptor {
@Override
public PsiElement getValueDeclaration(XmlElement attributeValue, String value) {
String s = myCaseSensitive ? value : value.toLowerCase();
- return delegate instanceof BasicXmlAttributeDescriptor ?
- ((BasicXmlAttributeDescriptor)delegate).getValueDeclaration(attributeValue, s) :
+ return delegate instanceof XmlEnumerationDescriptor ?
+ ((XmlEnumerationDescriptor)delegate).getValueDeclaration(attributeValue, s) :
super.getValueDeclaration(attributeValue, value);
}
}
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java
index 8862ac892f0e..cd1f672d8819 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/SchemaReferencesProvider.java
@@ -410,7 +410,11 @@ public class SchemaReferencesProvider extends PsiReferenceProvider {
class CompletionProcessor implements PsiElementProcessor<XmlTag> {
List<String> myElements = new ArrayList<String>(1);
String namespace;
- XmlTag tag;
+ final XmlTag tag;
+
+ CompletionProcessor(XmlTag tag) {
+ this.tag = tag;
+ }
public boolean execute(@NotNull final XmlTag element) {
String name = element.getAttributeValue(NAME_ATTR_NAME);
@@ -448,8 +452,7 @@ public class SchemaReferencesProvider extends PsiReferenceProvider {
break;
}
- CompletionProcessor processor = new CompletionProcessor();
- processor.tag = tag;
+ CompletionProcessor processor = new CompletionProcessor(tag);
final XmlElement context = PsiTreeUtil.getContextOfType(myElement, XmlElement.class, false);
if (context == null) {
diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java
index 2c963a95bd80..4d4c3aa60187 100644
--- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java
+++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java
@@ -47,7 +47,7 @@ public class SchemaPrefixReference extends PsiReferenceBase<XmlElement> implemen
* @param name
* @param reference
*/
- public SchemaPrefixReference(XmlElement element, TextRange range, String name, TagNameReference reference) {
+ public SchemaPrefixReference(XmlElement element, TextRange range, String name, @Nullable TagNameReference reference) {
super(element, range);
myName = name;
myTagNameReference = reference;
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java
index fba46a2cec3d..4e2055d40fe7 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/BasicXmlAttributeDescriptor.java
@@ -45,6 +45,11 @@ public abstract class BasicXmlAttributeDescriptor extends XmlEnumerationDescript
}
@Override
+ public boolean isEnumerated(XmlElement context) {
+ return isEnumerated();
+ }
+
+ @Override
public String toString() {
return getName();
}
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java
index bf7b988e899d..b77ed3a1b866 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/XmlEnumerationDescriptor.java
@@ -3,20 +3,23 @@ package com.intellij.xml.impl;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
-import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlElement;
import com.intellij.xml.util.XmlEnumeratedValueReference;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
/**
* @author Dmitry Avdeev
* Date: 22.08.13
*/
-public abstract class XmlEnumerationDescriptor {
+public abstract class XmlEnumerationDescriptor<T extends XmlElement> {
public abstract boolean isFixed();
public abstract String getDefaultValue();
+ public abstract boolean isEnumerated(@Nullable XmlElement context);
+
public abstract String[] getEnumeratedValues();
public PsiElement getValueDeclaration(XmlElement attributeValue, String value) {
@@ -31,8 +34,7 @@ public abstract class XmlEnumerationDescriptor {
protected abstract PsiElement getDefaultValueDeclaration();
- public PsiReference[] getValueReferences(XmlAttributeValue value) {
- return new PsiReference[] { new XmlEnumeratedValueReference(value, this)};
+ public PsiReference[] getValueReferences(T element, @NotNull String text) {
+ return new PsiReference[] { new XmlEnumeratedValueReference(element, this)};
}
-
}
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java
index 61c33c09cafc..3d3cab737a27 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java
@@ -16,14 +16,17 @@
package com.intellij.xml.impl.schema;
import com.intellij.codeInsight.daemon.Validator;
+import com.intellij.psi.ElementManipulators;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiReference;
import com.intellij.psi.meta.PsiWritableMetaData;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.*;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.xml.*;
+import com.intellij.xml.util.XmlEnumeratedValueReference;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -36,7 +39,7 @@ import java.util.List;
/**
* @author Mike
*/
-public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
+public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor<XmlTag>
implements XmlElementDescriptor, PsiWritableMetaData, Validator<XmlTag>,
XmlElementDescriptorAwareAboutChildren {
protected XmlTag myDescriptorTag;
@@ -473,8 +476,9 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
}
public String getQualifiedName() {
- if (!"".equals(getNS())) {
- return getNS() + ":" + getName();
+ String ns = getNS();
+ if (ns != null && !ns.isEmpty()) {
+ return ns + ":" + getName();
}
return getName();
@@ -519,6 +523,16 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor
}
}
+ @Override
+ public PsiReference[] getValueReferences(XmlTag xmlTag, @NotNull String text) {
+ XmlTagValue value = xmlTag.getValue();
+ XmlText[] elements = value.getTextElements();
+ if (elements.length == 0 || xmlTag.getSubTags().length > 0) return PsiReference.EMPTY_ARRAY;
+ return new PsiReference[] {
+ new XmlEnumeratedValueReference(xmlTag, this, ElementManipulators.getValueTextRange(xmlTag))
+ };
+ }
+
public boolean allowElementsFromNamespace(final String namespace, final XmlTag context) {
final TypeDescriptor type = getType(context);
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java
index 0a1c341f6825..26600b7795bd 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XsdEnumerationDescriptor.java
@@ -21,7 +21,7 @@ import java.util.List;
* @author Dmitry Avdeev
* Date: 22.08.13
*/
-public abstract class XsdEnumerationDescriptor extends XmlEnumerationDescriptor {
+public abstract class XsdEnumerationDescriptor<T extends XmlElement> extends XmlEnumerationDescriptor<T> {
private boolean myExhaustiveEnum;
@@ -60,7 +60,7 @@ public abstract class XsdEnumerationDescriptor extends XmlEnumerationDescriptor
}
private boolean processEnumeration(XmlElement context, PairProcessor<PsiElement, String> processor) {
- XmlTag contextTag = context != null ? PsiTreeUtil.getContextOfType(context, XmlTag.class, true) : null;
+ XmlTag contextTag = context != null ? PsiTreeUtil.getContextOfType(context, XmlTag.class, false) : null;
final XmlElementDescriptorImpl elementDescriptor = (XmlElementDescriptorImpl)XmlUtil.findXmlDescriptorByType(getDeclaration(), contextTag);
if (elementDescriptor!=null && elementDescriptor.getType() instanceof ComplexTypeDescriptor) {
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java b/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java
index a25f60550e1f..ac01d81a2f77 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/util/HtmlUtil.java
@@ -139,7 +139,8 @@ public class HtmlUtil {
@NonNls private static final String[] HTML5_TAGS = {
"article", "aside", "audio", "canvas", "command", "datalist", "details", "embed", "figcaption", "figure", "footer", "header", "hgroup",
- "keygen", "mark", "meter", "nav", "output", "progress", "rp", "rt", "ruby", "section", "source", "summary", "time", "video", "wbr"
+ "keygen", "mark", "meter", "nav", "output", "progress", "rp", "rt", "ruby", "section", "source", "summary", "time", "video", "wbr",
+ "main"
};
private static final Set<String> HTML5_TAGS_SET = new THashSet<String>();
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java
index 5cf994a2deac..6b1bdf47bc2f 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java
@@ -17,9 +17,12 @@ package com.intellij.xml.util;
import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider;
import com.intellij.codeInsight.daemon.XmlErrorMessages;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceBase;
-import com.intellij.psi.xml.XmlAttributeValue;
+import com.intellij.psi.xml.XmlElement;
+import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ArrayUtil;
import com.intellij.xml.impl.XmlEnumerationDescriptor;
import org.jetbrains.annotations.NotNull;
@@ -29,14 +32,19 @@ import org.jetbrains.annotations.Nullable;
* @author Dmitry Avdeev
* Date: 16.08.13
*/
-public class XmlEnumeratedValueReference extends PsiReferenceBase<XmlAttributeValue> implements EmptyResolveMessageProvider {
+public class XmlEnumeratedValueReference extends PsiReferenceBase<XmlElement> implements EmptyResolveMessageProvider {
private final XmlEnumerationDescriptor myDescriptor;
- public XmlEnumeratedValueReference(XmlAttributeValue value, XmlEnumerationDescriptor descriptor) {
+ public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor) {
super(value);
myDescriptor = descriptor;
}
+ public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor, TextRange range) {
+ super(value, range);
+ myDescriptor = descriptor;
+ }
+
@Nullable
@Override
public PsiElement resolve() {
@@ -59,8 +67,9 @@ public class XmlEnumeratedValueReference extends PsiReferenceBase<XmlAttributeVa
@NotNull
@Override
public String getUnresolvedMessagePattern() {
+ String name = getElement() instanceof XmlTag ? "tag" : "attribute";
return myDescriptor.isFixed()
- ? XmlErrorMessages.message("attribute.should.have.fixed.value", myDescriptor.getDefaultValue())
- : XmlErrorMessages.message("wrong.attribute.value");
+ ? XmlErrorMessages.message("should.have.fixed.value", StringUtil.capitalize(name), myDescriptor.getDefaultValue())
+ : XmlErrorMessages.message("wrong.value", name);
}
}
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java
index e8bb8f4c6f41..abbddfcf654c 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlUtil.java
@@ -933,6 +933,8 @@ public class XmlUtil {
});
}
+ private final static Set<String> doNotVisitTags = new HashSet<String>(Arrays.asList("annotation", "element", "attribute"));
+
/**
* @return true if enumeration is exhaustive
*/
@@ -954,7 +956,7 @@ public class XmlUtil {
exhaustiveEnum = false;
processEnumerationValues(tag, tagProcessor);
}
- else if (!localName.equals("annotation")) {
+ else if (!doNotVisitTags.contains(localName)) {
// don't go into annotation
exhaustiveEnum &= processEnumerationValues(tag, tagProcessor);
}
@@ -1070,7 +1072,7 @@ public class XmlUtil {
return new Pair<XmlTagChild, XmlTagChild>(first, last);
}
- public static boolean isSimpleXmlAttributeValue(@NotNull final String unquotedValue, final XmlAttributeValue context) {
+ public static boolean isSimpleValue(@NotNull final String unquotedValue, final PsiElement context) {
for (int i = 0; i < unquotedValue.length(); ++i) {
final char ch = unquotedValue.charAt(i);
if (!Character.isJavaIdentifierPart(ch) && ch != ':' && ch != '-') {