diff options
author | Tor Norbye <tnorbye@google.com> | 2013-08-29 10:40:28 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2013-08-29 10:40:35 -0700 |
commit | 932259520ebaedeb2ccf4b7594bad50c700963d7 (patch) | |
tree | 2b52334b8a019d9652625b1432deac11a7c4b31e /xml | |
parent | e47d04f1f804b9e725b768725da436af6788f19b (diff) | |
download | idea-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')
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 != '-') { |