diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/MainWatchPanel.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/MainWatchPanel.java index 203493817f97..b58d9e604f86 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/MainWatchPanel.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/MainWatchPanel.java @@ -184,8 +184,13 @@ public class MainWatchPanel extends WatchPanel implements DataProvider { } TextWithImports text = comboBox.getText(); - WatchDebuggerTree.setWatchNodeText(node, text); - comboBox.addRecent(text); + if (!text.isEmpty()) { + WatchDebuggerTree.setWatchNodeText(node, text); + comboBox.addRecent(text); + } + else { + getWatchTree().removeWatch(node); + } try { super.doOKAction(); } @@ -196,6 +201,9 @@ public class MainWatchPanel extends WatchPanel implements DataProvider { public void cancelEditing() { comboBox.setPopupVisible(false); + if (((WatchItemDescriptor)node.getDescriptor()).getEvaluationText().isEmpty()) { + getWatchTree().removeWatch(node); + } try { super.cancelEditing(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java index 917a8784b048..2aaf65fd1e98 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClassFileStubBuilder.java @@ -25,8 +25,7 @@ import com.intellij.psi.stubs.StubElement; import com.intellij.util.cls.ClsFormatException; import com.intellij.util.indexing.FileContent; -import java.util.Arrays; -import java.util.Comparator; +import java.util.*; /** * @author max @@ -73,8 +72,9 @@ public class ClassFileStubBuilder implements BinaryFileStubBuilder { @Override public int getStubVersion() { int version = STUB_VERSION; - final ClsStubBuilderFactory[] factories = Extensions.getExtensions(ClsStubBuilderFactory.EP_NAME); - Arrays.sort(factories, new Comparator() { // stable order + List factories = new ArrayList(Arrays.asList( + Extensions.getExtensions(ClsStubBuilderFactory.EP_NAME))); + Collections.sort(factories, new Comparator() { // stable order in copy @Override public int compare(ClsStubBuilderFactory o1, ClsStubBuilderFactory o2) { return o1.getClass().getName().compareTo(o2.getClass().getName()); diff --git a/platform/platform-impl/src/com/intellij/util/Urls.java b/platform/platform-impl/src/com/intellij/util/Urls.java index 6a1ee01f9793..2a7b9c5b76d8 100644 --- a/platform/platform-impl/src/com/intellij/util/Urls.java +++ b/platform/platform-impl/src/com/intellij/util/Urls.java @@ -83,6 +83,10 @@ public final class Urls { @Nullable public static Url parse(@NotNull String url, boolean asLocalIfNoScheme) { + if (url.isEmpty()) { + return null; + } + if (asLocalIfNoScheme && !URLUtil.containsScheme(url)) { // nodejs debug — files only in local filesystem return new LocalFileUrl(url); @@ -101,7 +105,7 @@ public final class Urls { return toUriWithoutParameters(asUrl); } catch (Exception e) { - LOG.info("Can't parse " + url, e); + LOG.info("Cannot parse url " + url, e); return null; } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspection.java index e98ce28efeb6..660a88f81a4a 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspection.java @@ -70,6 +70,14 @@ public class PlaceholderCountMatchesArgumentCountInspection extends BaseInspecti if (!loggingMethodNames.contains(name)) { return; } + final PsiMethod method = expression.resolveMethod(); + if (method == null) { + return; + } + final PsiClass aClass = method.getContainingClass(); + if (!InheritanceUtil.isInheritor(aClass, "org.slf4j.Logger")) { + return; + } final PsiExpressionList argumentList = expression.getArgumentList(); final PsiExpression[] arguments = argumentList.getExpressions(); if (arguments.length == 0) { diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspectionTest.java index 8b69ced5f811..c122583ee586 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/logging/PlaceholderCountMatchesArgumentCountInspectionTest.java @@ -76,4 +76,15 @@ public class PlaceholderCountMatchesArgumentCountInspectionTest extends LightIns " public static class SecondException extends Exception { }\n" + "}"); } + + public void testNoSlf4j() { + doTest("class FalsePositiveSLF4J {\n" + + " public void method( DefinitelyNotSLF4J definitelyNotSLF4J ) {\n" + + " definitelyNotSLF4J.trace( \"not a trace message\", \"not a trace parameter\" );\n" + + " }\n" + + " public interface DefinitelyNotSLF4J {\n" + + " void trace( String firstParameter, Object secondParameter );\n" + + " }\n" + + "}"); + } } \ No newline at end of file diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java index 53404bffa828..8e6df173dc0c 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java @@ -45,7 +45,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Field; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -204,9 +203,12 @@ public class GradleExecutionHelper { @NotNull GradleExecutionSettings settings, @NotNull ExternalSystemTaskNotificationListener listener) { - // use it only for customized wrapper - // TODO works correctly only or root project - if (settings.getDistributionType() != DistributionType.WRAPPED) return; + if (!settings.getDistributionType().isWrapped()) return; + + if (settings.getDistributionType() == DistributionType.DEFAULT_WRAPPED && + GradleUtil.findDefaultWrapperPropertiesFile(projectPath) != null) { + return; + } ProjectConnection connection = getConnection(projectPath, settings); try { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java index da9d4a0fce0e..fdea7aecf0f9 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java @@ -73,9 +73,9 @@ public class GradleTaskManager extends AbstractExternalSystemTaskManagercatch(IOException e) {} +try{} catch(IOException ignored) {} +try{} catch(IOException ignore) {} +try{} catch(IOException e) {/*comment*/} +''', GroovyEmptyCatchBlockInspection) + } + + void testEmptyCatchBlock2() { + GroovyEmptyCatchBlockInspection inspection = new GroovyEmptyCatchBlockInspection() + inspection.myIgnore = false + myFixture.enableInspections(inspection) + testHighlighting('try{} catch(IOException ignored) {}') + } + + void testEmptyCatchBlock3() { + GroovyEmptyCatchBlockInspection inspection = new GroovyEmptyCatchBlockInspection() + inspection.myIgnore = false + myFixture.enableInspections(inspection) + testHighlighting('try{} catch(IOException ignored) {}') + } + + void testEmptyCatchBlock4() { + GroovyEmptyCatchBlockInspection inspection = new GroovyEmptyCatchBlockInspection() + inspection.myCountCommentsAsContent = false + myFixture.enableInspections(inspection) + testHighlighting('try{} catch(IOException e) {/*comment*/}') + } + } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/convertToJava/CodeBlockGenerationTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/convertToJava/CodeBlockGenerationTest.groovy index c5d374178da6..f6e52759ee23 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/convertToJava/CodeBlockGenerationTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/convertToJava/CodeBlockGenerationTest.groovy @@ -198,4 +198,6 @@ public final class Matcher { void testInWitchClassCheck() { doTest() } void testSwitch() { doTest() } + + void testPropSelection() { doTest() } } diff --git a/plugins/groovy/testdata/refactoring/convertGroovyToJava/codeBlock/propSelection.groovy b/plugins/groovy/testdata/refactoring/convertGroovyToJava/codeBlock/propSelection.groovy new file mode 100644 index 000000000000..0073667147f4 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/convertGroovyToJava/codeBlock/propSelection.groovy @@ -0,0 +1 @@ +print p."a$c" \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/convertGroovyToJava/codeBlock/propSelection.java b/plugins/groovy/testdata/refactoring/convertGroovyToJava/codeBlock/propSelection.java new file mode 100644 index 000000000000..0347871923e2 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/convertGroovyToJava/codeBlock/propSelection.java @@ -0,0 +1 @@ +print(this.getBinding().getProperty("p")."a$c"); diff --git a/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleGrouper.java b/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleGrouper.java index 9a3cd7f88738..3394011ab309 100644 --- a/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleGrouper.java +++ b/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleGrouper.java @@ -22,8 +22,10 @@ import com.intellij.lang.properties.PropertiesUtil; import com.intellij.lang.properties.ResourceBundle; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiFile; import com.intellij.util.SmartList; import gnu.trove.THashMap; @@ -40,49 +42,54 @@ public class ResourceBundleGrouper implements TreeStructureProvider, DumbAware { myProject = project; } - public Collection modify(AbstractTreeNode parent, Collection children, ViewSettings settings) { + public Collection modify(AbstractTreeNode parent, final Collection children, final ViewSettings settings) { if (parent instanceof ResourceBundleNode) return children; - Map> childBundles = new THashMap>(); - for (AbstractTreeNode child : children) { - Object f = child.getValue(); - if (f instanceof PsiFile) { - PropertiesFile propertiesFile = PropertiesUtil.getPropertiesFile((PsiFile)f); - if (propertiesFile != null) { - ResourceBundle bundle = propertiesFile.getResourceBundle(); - Collection files = childBundles.get(bundle); - if (files == null) { - files = new SmartList(); - childBundles.put(bundle, files); - } - files.add(propertiesFile); - } - } - } - - List result = new ArrayList(); - for (Map.Entry> entry : childBundles.entrySet()) { - ResourceBundle resourceBundle = entry.getKey(); - Collection files = entry.getValue(); - if (files.size() != 1) { - result.add(new ResourceBundleNode(myProject, resourceBundle, settings)); - } - } - for (AbstractTreeNode child : children) { - Object f = child.getValue(); - if (f instanceof PsiFile) { - PropertiesFile propertiesFile = PropertiesUtil.getPropertiesFile((PsiFile)f); - if (propertiesFile != null) { - ResourceBundle bundle = propertiesFile.getResourceBundle(); - if (childBundles.get(bundle).size() != 1) { - continue; + return ApplicationManager.getApplication().runReadAction(new Computable>() { + @Override + public Collection compute() { + Map> childBundles = new THashMap>(); + for (AbstractTreeNode child : children) { + Object f = child.getValue(); + if (f instanceof PsiFile) { + PropertiesFile propertiesFile = PropertiesUtil.getPropertiesFile((PsiFile)f); + if (propertiesFile != null) { + ResourceBundle bundle = propertiesFile.getResourceBundle(); + Collection files = childBundles.get(bundle); + if (files == null) { + files = new SmartList(); + childBundles.put(bundle, files); + } + files.add(propertiesFile); + } } } - } - result.add(child); - } - return result; + List result = new ArrayList(); + for (Map.Entry> entry : childBundles.entrySet()) { + ResourceBundle resourceBundle = entry.getKey(); + Collection files = entry.getValue(); + if (files.size() != 1) { + result.add(new ResourceBundleNode(myProject, resourceBundle, settings)); + } + } + for (AbstractTreeNode child : children) { + Object f = child.getValue(); + if (f instanceof PsiFile) { + PropertiesFile propertiesFile = PropertiesUtil.getPropertiesFile((PsiFile)f); + if (propertiesFile != null) { + ResourceBundle bundle = propertiesFile.getResourceBundle(); + if (childBundles.get(bundle).size() != 1) { + continue; + } + } + } + result.add(child); + } + + return result; + } + }); } public Object getData(Collection selected, String dataName) { diff --git a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesFile.java b/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesFile.java index efd5b47d7626..aeb607d89cb0 100644 --- a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesFile.java +++ b/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesFile.java @@ -32,10 +32,9 @@ import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; -import com.intellij.util.IncorrectOperationException; import com.intellij.reference.SoftLazyValue; +import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.MultiMap; -import com.intellij.util.text.CharArrayUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -82,14 +81,7 @@ public class XmlPropertiesFile implements PropertiesFile { new CachedValueProvider() { @Override public Result compute() { - CharSequence contents = file.getViewProvider().getContents(); - PropertiesFile value = null; - if (CharArrayUtil.indexOf(contents, XmlPropertiesIndex.HTTP_JAVA_SUN_COM_DTD_PROPERTIES_DTD, 0) != -1 && - XmlPropertiesIndex.isAccepted(contents) - ) { - value = new XmlPropertiesFile(file); - } - + PropertiesFile value = XmlPropertiesIndex.isPropertiesFile(file) ? new XmlPropertiesFile(file) : null; return Result.create(value, file); } }, false); diff --git a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesIndex.java b/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesIndex.java index 467f656aeb71..6c3b4b1a371c 100644 --- a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesIndex.java +++ b/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesIndex.java @@ -2,12 +2,18 @@ package com.intellij.lang.properties.xml; import com.intellij.ide.highlighter.XmlFileType; import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.io.StreamUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.search.EverythingGlobalScope; +import com.intellij.psi.xml.XmlFile; import com.intellij.util.Consumer; import com.intellij.util.indexing.*; -import com.intellij.util.io.*; +import com.intellij.util.io.DataExternalizer; +import com.intellij.util.io.EnumeratorStringDescriptor; +import com.intellij.util.io.IOUtil; +import com.intellij.util.io.KeyDescriptor; import com.intellij.util.text.CharArrayUtil; import com.intellij.util.xml.NanoXmlUtil; import net.n3.nanoxml.StdXMLReader; @@ -31,7 +37,7 @@ public class XmlPropertiesIndex extends FileBasedIndexExtension NAME = ID.create("xmlProperties"); private static final EnumeratorStringDescriptor ENUMERATOR_STRING_DESCRIPTOR = new EnumeratorStringDescriptor(); - public static final String HTTP_JAVA_SUN_COM_DTD_PROPERTIES_DTD = "http://java.sun.com/dtd/properties.dtd"; + private static final String HTTP_JAVA_SUN_COM_DTD_PROPERTIES_DTD = "http://java.sun.com/dtd/properties.dtd"; @NotNull @Override @@ -94,6 +100,20 @@ public class XmlPropertiesIndex extends FileBasedIndexExtension() { + @Override + public boolean process(VirtualFile file, String value) { + return false; + } + }, new EverythingGlobalScope()); + } + static boolean isAccepted(CharSequence bytes) { MyIXMLBuilderAdapter builder = parse(bytes, true); return builder != null && builder.accepted; diff --git a/xml/impl/src/com/intellij/codeInsight/completion/HtmlCompletionData.java b/xml/impl/src/com/intellij/codeInsight/completion/HtmlCompletionData.java index dbf7393c57e9..6823d69e3337 100644 --- a/xml/impl/src/com/intellij/codeInsight/completion/HtmlCompletionData.java +++ b/xml/impl/src/com/intellij/codeInsight/completion/HtmlCompletionData.java @@ -25,7 +25,11 @@ import com.intellij.psi.filters.getters.HtmlAttributeValueGetter; import com.intellij.psi.filters.getters.XmlAttributeValueGetter; import com.intellij.psi.filters.position.XmlTokenTypeFilter; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.xml.*; +import com.intellij.psi.xml.XmlAttribute; +import com.intellij.psi.xml.XmlTag; +import com.intellij.psi.xml.XmlToken; +import com.intellij.psi.xml.XmlTokenType; +import com.intellij.xml.util.HtmlUtil; import org.jetbrains.annotations.NonNls; /** @@ -36,7 +40,6 @@ public class HtmlCompletionData extends XmlCompletionData { private boolean myCaseInsensitive; private static final @NonNls String JAVASCRIPT_LANGUAGE_ID = "JavaScript"; private static final @NonNls String STYLE_TAG = "style"; - private static final @NonNls String SCRIPT_TAG = "script"; public HtmlCompletionData() { this(true); @@ -46,6 +49,7 @@ public class HtmlCompletionData extends XmlCompletionData { myCaseInsensitive = _caseInsensitive; } + @Override protected ElementFilter createXmlEntityCompletionFilter() { if (isCaseInsensitive()) { return new AndFilter( @@ -77,12 +81,15 @@ public class HtmlCompletionData extends XmlCompletionData { myCaseInsensitive = caseInsensitive; } + @Override protected XmlAttributeValueGetter getAttributeValueGetter() { return new HtmlAttributeValueGetter(!isCaseInsensitive()); } + @Override protected ElementFilter createTagCompletionFilter() { return new ElementFilter() { + @Override public boolean isAcceptable(Object element, PsiElement context) { String name = ((XmlTag)context).getName(); @@ -92,7 +99,7 @@ public class HtmlCompletionData extends XmlCompletionData { } if (equalNames(name, STYLE_TAG) || - equalNames(name,SCRIPT_TAG)) { + equalNames(name, HtmlUtil.SCRIPT_TAG_NAME)) { return false; } @@ -100,33 +107,40 @@ public class HtmlCompletionData extends XmlCompletionData { return true; } + @Override public boolean isClassAcceptable(Class hintClass) { return true; } }; } + @Override protected ElementFilter createAttributeCompletionFilter() { return new ElementFilter() { + @Override public boolean isAcceptable(Object element, PsiElement context) { if (isStyleAttributeContext(context)) return false; return true; } + @Override public boolean isClassAcceptable(Class hintClass) { return true; } }; } + @Override protected ElementFilter createAttributeValueCompletionFilter() { return new ElementFilter() { + @Override public boolean isAcceptable(Object element, PsiElement context) { if (isStyleAttributeContext(context)) return false; if ( isScriptContext((PsiElement)element) ) return false; return true; } + @Override public boolean isClassAcceptable(Class hintClass) { return true; } @@ -151,11 +165,13 @@ public class HtmlCompletionData extends XmlCompletionData { return false; } + @Override public void registerVariant(CompletionVariant variant) { super.registerVariant(variant); if (isCaseInsensitive()) variant.setCaseInsensitive(true); } + @Override public String findPrefix(PsiElement insertedElement, int offset) { String prefix = super.findPrefix(insertedElement, offset); diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java b/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java index 770ac7a1b868..da385b0112f6 100644 --- a/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java +++ b/xml/impl/src/com/intellij/codeInsight/editorActions/moveUpDown/XmlMover.java @@ -24,7 +24,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiNamedElement; import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.html.HtmlTag; import com.intellij.psi.impl.source.xml.TagNameVariantCollector; import com.intellij.psi.impl.source.xml.XmlDocumentImpl; import com.intellij.psi.util.PsiTreeUtil; @@ -34,6 +33,7 @@ import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlText; import com.intellij.xml.XmlElementDescriptor; import com.intellij.xml.XmlNSDescriptor; +import com.intellij.xml.util.HtmlUtil; import org.jetbrains.annotations.NotNull; class XmlMover extends LineMover { @@ -62,11 +62,7 @@ class XmlMover extends LineMover { if (checkInjections(movedEndElement, movedStartElement)) return false; XmlTag nearestTag = PsiTreeUtil.getParentOfType(movedStartElement, XmlTag.class); - if (nearestTag != null && - ( "script".equals(nearestTag.getLocalName()) || - (nearestTag instanceof HtmlTag && "script".equalsIgnoreCase(nearestTag.getLocalName())) - ) - ) { + if (nearestTag != null && HtmlUtil.isScriptTag(nearestTag)) { return false; } diff --git a/xml/impl/src/com/intellij/lang/html/structureView/HtmlTagTreeElement.java b/xml/impl/src/com/intellij/lang/html/structureView/HtmlTagTreeElement.java index d3bc34b8d18d..f896146608db 100644 --- a/xml/impl/src/com/intellij/lang/html/structureView/HtmlTagTreeElement.java +++ b/xml/impl/src/com/intellij/lang/html/structureView/HtmlTagTreeElement.java @@ -24,6 +24,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.xml.XmlTag; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; +import com.intellij.xml.util.HtmlUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -69,7 +70,7 @@ class HtmlTagTreeElement extends PsiTreeElementBase implements LocationP return null; } - if (tag.getName().equalsIgnoreCase("img") || tag.getName().equalsIgnoreCase("script")) { + if (tag.getName().equalsIgnoreCase("img") || HtmlUtil.isScriptTag(tag)) { return getPathDescription(tag.getAttributeValue("src")); } else if (tag.getName().equalsIgnoreCase("link")) { diff --git a/xml/impl/src/com/intellij/psi/impl/source/html/HtmlScriptLanguageInjector.java b/xml/impl/src/com/intellij/psi/impl/source/html/HtmlScriptLanguageInjector.java index 23c9cfdac3dd..ccde7d31801a 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/html/HtmlScriptLanguageInjector.java +++ b/xml/impl/src/com/intellij/psi/impl/source/html/HtmlScriptLanguageInjector.java @@ -39,7 +39,7 @@ public class HtmlScriptLanguageInjector implements MultiHostInjector { return; } XmlTag scriptTag = ((XmlText)host).getParentTag(); - if (scriptTag == null || !"script".equalsIgnoreCase(scriptTag.getLocalName())) { + if (scriptTag == null || !HtmlUtil.isScriptTag(scriptTag)) { return; } String mimeType = scriptTag.getAttributeValue("type"); diff --git a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckEmptyTagInspection.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckEmptyTagInspection.java index 7ec5ab415e2b..eb3eac55f9ca 100644 --- a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckEmptyTagInspection.java +++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckEmptyTagInspection.java @@ -44,8 +44,7 @@ import java.util.Set; */ public class CheckEmptyTagInspection extends XmlSuppressableInspectionTool { private static final Logger LOG = Logger.getInstance("#com.intellij.xml.util.CheckEmptyTagInspection"); - @NonNls private static final String SCRIPT_TAG_NAME = "script"; - @NonNls private static final Set ourTagsWithEmptyEndsNotAllowed = new THashSet(Arrays.asList(SCRIPT_TAG_NAME, "div", "iframe")); + @NonNls private static final Set ourTagsWithEmptyEndsNotAllowed = new THashSet(Arrays.asList(HtmlUtil.SCRIPT_TAG_NAME, "div", "iframe")); @Override public boolean isEnabledByDefault() { diff --git a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckValidXmlInScriptBodyInspectionBase.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckValidXmlInScriptBodyInspectionBase.java index 30cb218b7691..bf80b8cb71b6 100644 --- a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckValidXmlInScriptBodyInspectionBase.java +++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckValidXmlInScriptBodyInspectionBase.java @@ -41,8 +41,6 @@ public class CheckValidXmlInScriptBodyInspectionBase extends XmlSuppressableInsp protected static final String AMP_ENTITY_REFERENCE = "&"; @NonNls protected static final String LT_ENTITY_REFERENCE = "<"; - @NonNls - private static final String SCRIPT_TAG_NAME = "script"; private Lexer myXmlLexer; @Override @@ -57,8 +55,8 @@ public class CheckValidXmlInScriptBodyInspectionBase extends XmlSuppressableInsp @Override public void visitXmlTag(final XmlTag tag) { if (HtmlUtil.isHtmlTag(tag)) return; - if (SCRIPT_TAG_NAME.equals(tag.getName()) || - tag instanceof HtmlTag && SCRIPT_TAG_NAME.equalsIgnoreCase(tag.getName())) { + if (HtmlUtil.SCRIPT_TAG_NAME.equals(tag.getName()) || + tag instanceof HtmlTag && HtmlUtil.SCRIPT_TAG_NAME.equalsIgnoreCase(tag.getName())) { final PsiFile psiFile = tag.getContainingFile(); final FileType fileType = psiFile.getFileType(); diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/ScriptSupportUtil.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/ScriptSupportUtil.java index 2abbb5b9d775..ce5fe4ebfc61 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/ScriptSupportUtil.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/html/ScriptSupportUtil.java @@ -28,8 +28,8 @@ import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.xml.*; import com.intellij.xml.XmlElementDescriptor; import com.intellij.xml.util.HtmlPsiUtil; +import com.intellij.xml.util.HtmlUtil; import com.intellij.xml.util.XmlPsiUtil; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -41,7 +41,6 @@ import java.util.List; public class ScriptSupportUtil { private static final Key> CachedScriptTagsKey = Key.create("script tags"); private static final ThreadLocal ProcessingDeclarationsFlag = new ThreadLocal(); - @NonNls private static final String SCRIPT_TAG = "script"; private ScriptSupportUtil() { } @@ -66,13 +65,14 @@ public class ScriptSupportUtil { if (document != null) { PsiElementProcessor psiElementProcessor = new PsiElementProcessor() { + @Override public boolean execute(@NotNull final PsiElement element) { if (element instanceof XmlTag) { final XmlTag tag = (XmlTag)element; - if (SCRIPT_TAG.equalsIgnoreCase(tag.getName())) { + if (HtmlUtil.SCRIPT_TAG_NAME.equalsIgnoreCase(tag.getName())) { final XmlElementDescriptor descriptor = tag.getDescriptor(); - if (descriptor != null && SCRIPT_TAG.equals(descriptor.getName())) { + if (descriptor != null && HtmlUtil.SCRIPT_TAG_NAME.equals(descriptor.getName())) { scriptTags.add(tag); } } 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 adcfba57d616..7923801c3e36 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 @@ -70,6 +70,8 @@ public class HtmlUtil { @NonNls private static final String CHARSET_PREFIX = CHARSET+"="; @NonNls private static final String HTML5_DATA_ATTR_PREFIX = "data-"; + public static final String SCRIPT_TAG_NAME = "script"; + public static final String[] CONTENT_TYPES = {"application/activemessage", "application/andrew-inset", "application/applefile", "application/atomicmail", "application/dca-rft", "application/dec-dx", "application/mac-binhex40" @@ -488,7 +490,7 @@ public class HtmlUtil { public void endTag(final CharSequence localName, final String namespace, final int startoffset, final int endoffset) { @NonNls final String name = localName.toString().toLowerCase(); if ("meta".equals(name) && (metHttpEquiv || metHttml5Charset) && contentAttributeValue != null) { - String charsetName = null; + String charsetName; if (metHttpEquiv) { int start = contentAttributeValue.indexOf(CHARSET_PREFIX); if (start == -1) return; @@ -606,4 +608,8 @@ public class HtmlUtil { } return false; } + + public static boolean isScriptTag(@NotNull XmlTag tag) { + return tag.getLocalName().equalsIgnoreCase(SCRIPT_TAG_NAME); + } }