diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpDocumentationProvider.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpDocumentationProvider.java index 0edb7c40d12d..9c6d1d734c60 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpDocumentationProvider.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpDocumentationProvider.java @@ -52,7 +52,7 @@ public final class RegExpDocumentationProvider extends AbstractDocumentationProv public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) { if (element instanceof RegExpGroup) { final RegExpGroup group = (RegExpGroup)element; - return StringUtil.escapeXml(group.getUnescapedText()); + return StringUtil.escapeXmlEntities(group.getUnescapedText()); } else { return null; } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpElement.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpElement.java index 1ebeee397eeb..6c26fd7fb1a2 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpElement.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpElement.java @@ -16,8 +16,10 @@ package org.intellij.lang.regexp.psi; import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; public interface RegExpElement extends PsiElement { + @NotNull String getUnescapedText(); } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java index ca0123fb1ec0..d68ca0e3e5c7 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java @@ -75,6 +75,7 @@ public abstract class RegExpElementImpl extends ASTWrapperPsiElement implements getNode().getTreeParent().removeChild(getNode()); } + @NotNull @Override public final String getUnescapedText() { if (InjectedLanguageUtil.isInInjectedLanguagePrefixSuffix(this)) { diff --git a/java/compiler/openapi/src/com/intellij/compiler/ModuleSourceSet.java b/java/compiler/openapi/src/com/intellij/compiler/ModuleSourceSet.java index 1d6a8f3c88dd..eb8d2ad199dd 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ModuleSourceSet.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ModuleSourceSet.java @@ -65,6 +65,7 @@ public class ModuleSourceSet { return getDisplayName(); } + @NotNull public String getDisplayName() { return (myType == Type.PRODUCTION ? "" : "Tests of ") + "'" + myModule.getName() + "' module"; } diff --git a/java/compiler/openapi/src/com/intellij/compiler/ant/Tag.java b/java/compiler/openapi/src/com/intellij/compiler/ant/Tag.java index a14124e41524..538743aed29c 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ant/Tag.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ant/Tag.java @@ -54,7 +54,7 @@ public class Tag extends CompositeGenerator { } out.print((String)option.getFirst()); out.print("=\""); - out.print(StringUtil.escapeXml((String)option.getSecond())); + out.print(StringUtil.escapeXmlEntities((String)option.getSecond())); out.print("\""); generated += 1; } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/CompilingEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/CompilingEvaluator.java index 553a9a516992..01763f676878 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/CompilingEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/CompilingEvaluator.java @@ -121,6 +121,7 @@ public abstract class CompilingEvaluator implements ExpressionEvaluator { return classWriter.toByteArray(); } + @NotNull public static String getGeneratedClassName() { return GEN_CLASS_NAME; } diff --git a/java/execution/impl/src/com/intellij/execution/AntTestContentHandler.java b/java/execution/impl/src/com/intellij/execution/AntTestContentHandler.java index b7fb2440e76a..8884e8e72c77 100644 --- a/java/execution/impl/src/com/intellij/execution/AntTestContentHandler.java +++ b/java/execution/impl/src/com/intellij/execution/AntTestContentHandler.java @@ -82,18 +82,23 @@ public class AntTestContentHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (TESTSUITE.equals(qName)) { - final String suiteName = StringUtil.unescapeXml(attributes.getValue(NAME)); - final String packageName = StringUtil.unescapeXml(attributes.getValue(PACKAGE)); + String nameValue = attributes.getValue(NAME); + final String suiteName = nameValue == null ? null : StringUtil.unescapeXmlEntities(nameValue); + String packageValue = attributes.getValue(PACKAGE); + final String packageName = packageValue == null ? null : StringUtil.unescapeXmlEntities(packageValue); myProcessor - .onSuiteStarted(new TestSuiteStartedEvent(suiteName, "java:suite://" + StringUtil.getQualifiedName(packageName, suiteName))); + .onSuiteStarted(new TestSuiteStartedEvent(suiteName, "java:suite://" + StringUtil.getQualifiedName(packageName, + StringUtil.notNullize(suiteName)))); mySuites.push(suiteName); } else if (TESTCASE.equals(qName)) { - final String name = StringUtil.unescapeXml(attributes.getValue(NAME)); + String nameValue = attributes.getValue(NAME); + final String name = nameValue == null ? null : StringUtil.unescapeXmlEntities(nameValue); myCurrentTest = name; myStatus = null; myDuration = attributes.getValue(DURATION); - String classname = StringUtil.unescapeXml(attributes.getValue(CLASSNAME)); + String classNameValue = attributes.getValue(CLASSNAME); + String classname = classNameValue == null ? null : StringUtil.unescapeXmlEntities(classNameValue); String location = StringUtil.isEmpty(classname) ? name : classname + "/" + name; final TestStartedEvent startedEvent = new TestStartedEvent(name, "java:test://" + location); myProcessor.onTestStarted(startedEvent); @@ -117,7 +122,7 @@ public class AntTestContentHandler extends DefaultHandler { @Override public void endElement(String uri, String localName, String qName) throws SAXException { - final String currentText = StringUtil.unescapeXml(currentValue.toString()); + final String currentText = StringUtil.unescapeXmlEntities(currentValue.toString()); currentValue.setLength(0); if (TESTSUITE.equals(qName)) { myProcessor.onSuiteFinished(new TestSuiteFinishedEvent(mySuites.pop())); diff --git a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java index fdf83acc53b0..2e26d1359ec6 100644 --- a/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java +++ b/java/idea-ui/src/com/intellij/jarRepository/RepositoryAttachDialog.java @@ -98,8 +98,8 @@ public class RepositoryAttachDialog extends DialogWrapper { myProject = project; myProgressIcon.suspend(); myCaptionLabel.setText( - XmlStringUtil.wrapInHtml(StringUtil.escapeXml("keyword or class name to search by or exact Maven coordinates, " + - "i.e. 'spring', 'Logger' or 'ant:ant-junit:1.6.5'") + XmlStringUtil.wrapInHtml(StringUtil.escapeXmlEntities("keyword or class name to search by or exact Maven coordinates, " + + "i.e. 'spring', 'Logger' or 'ant:ant-junit:1.6.5'") )); myInfoLabel.setPreferredSize( new Dimension(myInfoLabel.getFontMetrics(myInfoLabel.getFont()).stringWidth("Showing: 1000"), myInfoLabel.getPreferredSize().height)); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ErrorPaneConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ErrorPaneConfigurable.java index 443438fc0bfb..b4f7d9844b47 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ErrorPaneConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ErrorPaneConfigurable.java @@ -99,7 +99,7 @@ public class ErrorPaneConfigurable extends JPanel implements Configurable, Dispo final String host = url.getHost(); String path = url.getPath(); if (path != null && path.startsWith("/")) { - path = StringUtil.unescapeXml(path.substring(1)); + path = StringUtil.unescapeXmlEntities(path.substring(1)); } if (path != null) { if ("fix".equals(host)) { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java index 25fc1ded1c39..63b59c4a260b 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/GeneralProjectSettingsElement.java @@ -45,6 +45,7 @@ public class GeneralProjectSettingsElement extends ProjectStructureElement { super(context); } + @NotNull @Override public String getPresentableText() { return "Project"; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/FacetProjectStructureElement.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/FacetProjectStructureElement.java index f8af8026748c..7ce9c43d8832 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/FacetProjectStructureElement.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/FacetProjectStructureElement.java @@ -43,6 +43,7 @@ public class FacetProjectStructureElement extends ProjectStructureElement { return Collections.emptyList(); } + @NotNull @Override public String getPresentableText() { return "Facet '" + myFacet.getName() + "' in module '" + myFacet.getModule().getName() + "'"; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java index 33c048681e6e..9017f300ea38 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java @@ -95,7 +95,7 @@ public class LibraryProjectStructureElement extends ProjectStructureElement { private static String createInvalidRootsDescription(List invalidClasses, String rootName, String libraryName) { StringBuilder buffer = new StringBuilder(); - final String name = StringUtil.escapeXml(libraryName); + final String name = StringUtil.escapeXmlEntities(libraryName); buffer.append("Library "); buffer.append("").append(name).append(""); buffer.append(" has broken " + rootName + " " + StringUtil.pluralize("path", invalidClasses.size()) + ":"); @@ -153,7 +153,7 @@ public class LibraryProjectStructureElement extends ProjectStructureElement { @Override public ProjectStructureProblemDescription createUnusedElementWarning() { final List fixes = Arrays.asList(new AddLibraryToDependenciesFix(), new RemoveLibraryFix(), new RemoveAllUnusedLibrariesFix()); - final String name = StringUtil.escapeXml(myLibrary.getName()); + final String name = StringUtil.escapeXmlEntities(myLibrary.getName()); String libraryName = "" + name + ""; return new ProjectStructureProblemDescription(XmlStringUtil.wrapInHtml("Library " + libraryName + " is not used"), null, createPlace(), ProjectStructureProblemType.unused("unused-library"), ProjectStructureProblemDescription.ProblemLevel.PROJECT, diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectConfigurationProblem.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectConfigurationProblem.java index d2a3308cb58e..2c431a3ce656 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectConfigurationProblem.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectConfigurationProblem.java @@ -31,7 +31,7 @@ public class ProjectConfigurationProblem extends ConfigurationError { private final Project myProject; public ProjectConfigurationProblem(ProjectStructureProblemDescription description, Project project) { - super(StringUtil.unescapeXml(description.getMessage(true)), computeDescription(description), + super(StringUtil.unescapeXmlEntities(description.getMessage(true)), computeDescription(description), getSettings(project, description.getProblemLevel()).isIgnored(description)); myDescription = description; myProject = project; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElement.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElement.java index a141bf20152f..4a25683776a5 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElement.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElement.java @@ -16,6 +16,7 @@ public abstract class ProjectStructureElement { myContext = context; } + @NotNull public String getPresentableText() { return getTypeName() + " '" + getPresentableName() + "'"; } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureProblemDescription.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureProblemDescription.java index 8cea338e9f74..1745724909cf 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureProblemDescription.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureProblemDescription.java @@ -26,6 +26,7 @@ import java.util.List; */ public class ProjectStructureProblemDescription { public enum ProblemLevel {PROJECT, GLOBAL} + @NotNull private final String myMessage; private final String myDescription; private final PlaceInProjectStructure myPlace; @@ -61,6 +62,7 @@ public class ProjectStructureProblemDescription { return myProblemLevel; } + @NotNull public String getMessage(final boolean includePlace) { if (includePlace && myCanShowPlace) { return myPlace.getContainingElement().getPresentableText() + ": " + StringUtil.decapitalize(myMessage); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaFactType.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaFactType.java index 941de6ef0fa8..8527d7a38230 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaFactType.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaFactType.java @@ -252,15 +252,17 @@ public abstract class DfaFactType extends Key { } }; + @NotNull private final String myName; - private DfaFactType(String name) { + private DfaFactType(@NotNull String name) { super("DfaFactType: " + name); myName = name; // Thread-safe as all DfaFactType instances are created only from DfaFactType class static initializer ourFactTypes.add(this); } + @NotNull public String getName() { return myName; } diff --git a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java index 385494af553c..4e056b50cf96 100644 --- a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java @@ -198,7 +198,7 @@ public class ExternalAnnotationsManagerImpl extends ReadableExternalAnnotationsM XmlTag rootTag = extractRootTag(annotationsFile); TreeMap> ownerToAnnotations = StreamEx.of(annotations) - .mapToEntry(annotation -> StringUtil.escapeXml(getExternalName(annotation.getOwner())), Function.identity()) + .mapToEntry(annotation -> StringUtil.escapeXmlEntities(getExternalName(annotation.getOwner())), Function.identity()) .distinct() .grouping(() -> new TreeMap<>(Comparator.nullsFirst(Comparator.naturalOrder()))); @@ -511,13 +511,15 @@ public class ExternalAnnotationsManagerImpl extends ReadableExternalAnnotationsM } for (XmlTag tag : rootTag.getSubTags()) { - String className = StringUtil.unescapeXml(tag.getAttributeValue("name")); + String nameValue = tag.getAttributeValue("name"); + String className = nameValue == null ? null : StringUtil.unescapeXmlEntities(nameValue); if (Comparing.strEqual(className, oldExternalName)) { WriteCommandAction .runWriteCommandAction(myPsiManager.getProject(), ExternalAnnotationsManagerImpl.class.getName(), null, () -> { PsiDocumentManager.getInstance(myPsiManager.getProject()).commitAllDocuments(); try { - tag.setAttribute("name", StringUtil.escapeXml(getExternalName(element))); + String name = getExternalName(element); + tag.setAttribute("name", name == null ? null : StringUtil.escapeXmlEntities(name)); commitChanges(file); } catch (IncorrectOperationException e) { @@ -576,7 +578,8 @@ public class ExternalAnnotationsManagerImpl extends ReadableExternalAnnotationsM final List tagsToProcess = new ArrayList<>(); for (XmlTag tag : rootTag.getSubTags()) { - String className = StringUtil.unescapeXml(tag.getAttributeValue("name")); + String nameValue = tag.getAttributeValue("name"); + String className = nameValue == null ? null : StringUtil.unescapeXmlEntities(nameValue); if (!Comparing.strEqual(className, externalName)) { continue; } @@ -765,8 +768,8 @@ public class ExternalAnnotationsManagerImpl extends ReadableExternalAnnotationsM if (values != null && values.length != 0) { text = " \n"; text += StringUtil.join(values, pair -> "", " \n"); + (pair.getName() != null ? " name=\"" + pair.getName() + "\"" : "") + + " val=\"" + StringUtil.escapeXmlEntities(pair.getValue().getText()) + "\"/>", " \n"); text += " "; } else { diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 77e8dbaaf915..dd98aa1f9e19 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -909,9 +909,10 @@ public class JavaCompletionUtil { }; } - public static String escapeXmlIfNeeded(InsertionContext context, String generics) { + @NotNull + public static String escapeXmlIfNeeded(InsertionContext context, @NotNull String generics) { if (context.getFile().getViewProvider().getBaseLanguage() == StdLanguages.JSPX) { - return StringUtil.escapeXml(generics); + return StringUtil.escapeXmlEntities(generics); } return generics; } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java index 0b4f57b8f2bc..f1cb0555876c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java @@ -370,8 +370,9 @@ public class ChangeMethodSignatureFromUsageFix implements IntentionAction/*, Hig return result.toArray(new ParameterInfoImpl[0]); } - protected static String escapePresentableType(PsiType exprType) { - return StringUtil.escapeXml(exprType.getPresentableText()); + @NotNull + protected static String escapePresentableType(@NotNull PsiType exprType) { + return StringUtil.escapeXmlEntities(exprType.getPresentableText()); } protected boolean findNewParamsPlace(PsiExpression[] expressions, diff --git a/java/java-impl/src/com/intellij/codeInsight/hint/JavaTypeProvider.java b/java/java-impl/src/com/intellij/codeInsight/hint/JavaTypeProvider.java index daeb656c0588..e342da18234f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hint/JavaTypeProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/hint/JavaTypeProvider.java @@ -44,7 +44,7 @@ public class JavaTypeProvider extends ExpressionTypeProvider { type = ((PsiMethodReferenceType)type).getExpression().getFunctionalInterfaceType(); } String text = type == null ? "" : type.getPresentableText(); - return StringUtil.escapeXml(text); + return StringUtil.escapeXmlEntities(text); } @NotNull @@ -98,12 +98,12 @@ public class JavaTypeProvider extends ExpressionTypeProvider { private static String formatFact(@NotNull DfaFactType factType, @NotNull T value, @Nullable PsiType type) { String presentationText = factType.getPresentationText(value, type); - return presentationText.isEmpty() ? "" : makeHtmlRow(factType.getName(), StringUtil.escapeXml(presentationText)); + return presentationText.isEmpty() ? "" : makeHtmlRow(factType.getName(), StringUtil.escapeXmlEntities(presentationText)); } - private static String makeHtmlRow(String titleText, String contentHtml) { + private static String makeHtmlRow(@NotNull String titleText, String contentHtml) { String titleCell = "" + StringUtil.escapeXml(titleText) + ":"; + ColorUtil.toHtmlColor(DocumentationComponent.SECTION_COLOR) + "'>" + StringUtil.escapeXmlEntities(titleText) + ":"; String contentCell = "" + contentHtml + ""; return "" + titleCell + contentCell + ""; } diff --git a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java index ca50855f5207..19062e70e718 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java @@ -693,7 +693,7 @@ public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabAc if (context.isSingleParameterInfo()) buffer.append(""); appendModifierList(buffer, param); String type = paramType.getPresentableText(true); - buffer.append(context.isSingleParameterInfo() ? StringUtil.escapeXml(type) : type); + buffer.append(context.isSingleParameterInfo() ? StringUtil.escapeXmlEntities(type) : type); String name = param.getName(); if (name != null && !context.isSingleParameterInfo()) { buffer.append(" "); diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/AssignmentTooltipLinkHandler.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/AssignmentTooltipLinkHandler.java index 41c24bc5ad14..09108fc9b677 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/AssignmentTooltipLinkHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/AssignmentTooltipLinkHandler.java @@ -29,6 +29,6 @@ public class AssignmentTooltipLinkHandler extends TooltipLinkHandler { @Nullable @Override public String getDescription(@NotNull String refSuffix, @NotNull Editor editor) { - return StringUtil.unescapeXml(refSuffix); + return StringUtil.unescapeXmlEntities(refSuffix); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java index 2a1d0a4bf787..999cfc03a347 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java @@ -815,7 +815,7 @@ public class JavaDocInfoGenerator { boolean trunc = index < text.length(); text = text.substring(0, index); buffer.append(" = "); - buffer.append(StringUtil.escapeXml(text)); + buffer.append(StringUtil.escapeXmlEntities(text)); if (trunc) { buffer.append("..."); } @@ -836,7 +836,7 @@ public class JavaDocInfoGenerator { boolean trunc = index < text.length(); if (trunc) { text = text.substring(0, index); - buffer.append(StringUtil.escapeXml(text)); + buffer.append(StringUtil.escapeXmlEntities(text)); buffer.append("..."); } else { @@ -1069,7 +1069,7 @@ public class JavaDocInfoGenerator { } final String typeParamsString = generateTypeParameters(method, useShortNames); - indent += StringUtil.unescapeXml(StringUtil.stripHtml(typeParamsString, true)).length(); + indent += StringUtil.unescapeXmlEntities(StringUtil.stripHtml(typeParamsString, true)).length(); if (!typeParamsString.isEmpty()) { buffer.append(typeParamsString); buffer.append(NBSP); @@ -1282,7 +1282,7 @@ public class JavaDocInfoGenerator { int pos = elementText.lastIndexOf('\n'); if (pos >= 0) elementText = elementText.substring(0, pos + 1); // skip whitespace before leading asterisk } - appendPlainText(StringUtil.escapeXml(elementText), tmpBuffer); + appendPlainText(StringUtil.escapeXmlEntities(elementText), tmpBuffer); } if ((mySdkVersion == null || mySdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) && isInPre(tag)) { buffer.append(tmpBuffer); @@ -1357,7 +1357,7 @@ public class JavaDocInfoGenerator { } if (value != null) { - String valueText = StringUtil.escapeXml(value.toString()); + String valueText = StringUtil.escapeXmlEntities(value.toString()); if (value instanceof String) valueText = '"' + valueText + '"'; if (valueField.equals(myElement)) buffer.append(valueText); // don't generate link to itself else generateLink(buffer, valueField, valueText, true); @@ -1524,7 +1524,7 @@ public class JavaDocInfoGenerator { if (spaceIndex < 0) { spaceIndex = text.length(); } - buffer.append(StringUtil.escapeXml(tag.name)); + buffer.append(StringUtil.escapeXmlEntities(tag.name)); buffer.append(" – "); buffer.append(text.substring(spaceIndex)); generateValue(buffer, elements, 1, mapProvider(tag.inheritDocTagProvider, true)); @@ -1778,7 +1778,7 @@ public class JavaDocInfoGenerator { */ public static int generateType(StringBuilder buffer, PsiType type, PsiElement context, boolean generateLink, boolean useShortNames) { if (type instanceof PsiPrimitiveType) { - String text = StringUtil.escapeXml(type.getCanonicalText()); + String text = StringUtil.escapeXmlEntities(type.getCanonicalText()); buffer.append(text); return text.length(); } @@ -1821,7 +1821,7 @@ public class JavaDocInfoGenerator { catch (IndexNotReadyException e) { LOG.debug(e); String text = ((PsiClassType)type).getClassName(); - buffer.append(StringUtil.escapeXml(text)); + buffer.append(StringUtil.escapeXmlEntities(text)); return text.length(); } PsiClass psiClass = result.getElement(); @@ -1829,7 +1829,7 @@ public class JavaDocInfoGenerator { if (psiClass == null) { String canonicalText = type.getCanonicalText(); - String text = "" + StringUtil.escapeXml(canonicalText) + ""; + String text = "" + StringUtil.escapeXmlEntities(canonicalText) + ""; buffer.append(text); return canonicalText.length(); } @@ -1837,7 +1837,7 @@ public class JavaDocInfoGenerator { String qName = psiClass.getQualifiedName(); if (qName == null || psiClass instanceof PsiTypeParameter) { - String text = StringUtil.escapeXml(useShortNames ? type.getPresentableText() : type.getCanonicalText()); + String text = StringUtil.escapeXmlEntities(useShortNames ? type.getPresentableText() : type.getCanonicalText()); buffer.append(text); return text.length(); } @@ -1891,7 +1891,7 @@ public class JavaDocInfoGenerator { if (type instanceof PsiDisjunctionType || type instanceof PsiIntersectionType) { if (!generateLink) { String canonicalText = useShortNames ? type.getPresentableText() : type.getCanonicalText(); - final String text = StringUtil.escapeXml(canonicalText); + final String text = StringUtil.escapeXmlEntities(canonicalText); buffer.append(text); return canonicalText.length(); } @@ -2155,18 +2155,18 @@ public class JavaDocInfoGenerator { @Override public void visitMethodCallExpression(PsiMethodCallExpression expression) { - myBuffer.append(StringUtil.escapeXml(expression.getMethodExpression().getText())); + myBuffer.append(StringUtil.escapeXmlEntities(expression.getMethodExpression().getText())); expression.getArgumentList().accept(this); } @Override public void visitExpression(PsiExpression expression) { - myBuffer.append(StringUtil.escapeXml(expression.getText())); + myBuffer.append(StringUtil.escapeXmlEntities(expression.getText())); } @Override public void visitReferenceExpression(PsiReferenceExpression expression) { - myBuffer.append(StringUtil.escapeXml(expression.getText())); + myBuffer.append(StringUtil.escapeXmlEntities(expression.getText())); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java index cb5256b904a1..417e42a7dbcd 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java @@ -134,6 +134,7 @@ public class PsiTypeLookupItem extends LookupItem implements TypedLookupItem { } } + @NotNull public String calcGenerics(@NotNull PsiElement context, InsertionContext insertionContext) { if (insertionContext.getCompletionChar() == '<') { return ""; diff --git a/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java b/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java index 7c44f307ec1d..8b84a897eeb8 100644 --- a/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java +++ b/java/java-impl/src/com/intellij/ide/actions/CreateClassAction.java @@ -79,6 +79,7 @@ public class CreateClassAction extends JavaCreateTemplateInPackageAction buffer.append('[').append(StringUtil.escapeXml(entry.getPresentableName())).append("] ")); + .ifPresent(entry -> buffer.append('[').append(StringUtil.escapeXmlEntities(entry.getPresentableName())).append("] ")); } else { Module module = index.getModuleForFile(file); @@ -551,7 +551,7 @@ public class JavaDocumentationProvider extends DocumentationProviderEx implement PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_PARAMETERS, PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_NAME); - createElementLink(sb, constructor, StringUtil.escapeXml(str)); + createElementLink(sb, constructor, StringUtil.escapeXmlEntities(str)); } return CodeInsightBundle.message("javadoc.constructor.candidates", targetClass.getName(), sb); @@ -624,7 +624,7 @@ public class JavaDocumentationProvider extends DocumentationProviderEx implement PsiFormatUtilBase.SHOW_TYPE | PsiFormatUtilBase.SHOW_PARAMETERS, PsiFormatUtilBase.SHOW_TYPE); - createElementLink(sb, element, StringUtil.escapeXml(str)); + createElementLink(sb, element, StringUtil.escapeXmlEntities(str)); } return CodeInsightBundle.message("javadoc.candidates", text, sb); diff --git a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java index 8f073e849c7b..ac75c6844cdd 100644 --- a/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java +++ b/java/java-impl/src/com/intellij/psi/formatter/java/JavaSpacePropertyProcessor.java @@ -1839,7 +1839,7 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor { private static String unescapeTokenText(ASTNode token, IElementType type) { String text = token.getText(); if (ESCAPED_TOKENS.contains(type) && StringUtil.startsWithChar(text, '&')) { - text = StringUtil.unescapeXml(text); + text = StringUtil.unescapeXmlEntities(text); } return text; } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/tree/JavaTreeCopyHandler.java b/java/java-impl/src/com/intellij/psi/impl/source/tree/JavaTreeCopyHandler.java index 7c67cb3b51d0..41304ff1c7e1 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/tree/JavaTreeCopyHandler.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/tree/JavaTreeCopyHandler.java @@ -118,7 +118,7 @@ public class JavaTreeCopyHandler implements TreeCopyHandler { else if (shallDecodeEscapedTexts && element instanceof LeafElement && !(element instanceof OuterLanguageElement)) { if (!isInCData(element)) { String original = element.getText(); - String escaped = StringUtil.escapeXml(original); + String escaped = StringUtil.escapeXmlEntities(original); if (!Comparing.equal(original, escaped) && element.getCopyableUserData(ALREADY_ESCAPED) == null) { LeafElement copy = ((LeafElement)element).replaceWithText(escaped); copy.putCopyableUserData(ALREADY_ESCAPED, Boolean.TRUE); @@ -168,7 +168,7 @@ public class JavaTreeCopyHandler implements TreeCopyHandler { !(original instanceof OuterLanguageElement) && !isInCData(original)) { String originalText = element.getText(); - String unescapedText = StringUtil.unescapeXml(originalText); + String unescapedText = StringUtil.unescapeXmlEntities(originalText); if (!Comparing.equal(originalText, unescapedText)) { LeafElement replaced = ((LeafElement)element).rawReplaceWithText(unescapedText); element.putCopyableUserData(ALREADY_ESCAPED, null); diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureViewDescriptor.java index ca6f28a6497d..b56889bc2e35 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureViewDescriptor.java @@ -46,6 +46,7 @@ public class ChangeSignatureViewDescriptor implements UsageViewDescriptor { return myProcessedElementsHeader; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("references.to.be.changed", diff --git a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsViewDescriptor.java index 6ef0f9d1abf9..7c8d5093a6e4 100644 --- a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsViewDescriptor.java @@ -44,6 +44,7 @@ class EncapsulateFieldsViewDescriptor implements UsageViewDescriptor { return myFields; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("references.to.be.changed", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java b/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java index ff4bda963f48..c77368854f4c 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java @@ -29,6 +29,7 @@ import com.intellij.refactoring.ui.MemberSelectionPanel; import com.intellij.refactoring.util.DocCommentPolicy; import com.intellij.refactoring.util.classMembers.MemberInfo; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; @@ -87,6 +88,7 @@ class ExtractInterfaceDialog extends JavaExtractSuperBaseDialog { : RefactoringBundle.message("package.for.original.class"); } + @NotNull @Override protected String getEntityName() { return RefactoringBundle.message("extractSuperInterface.interface"); diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/AbstractExtractDialog.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/AbstractExtractDialog.java index a5778c926994..abb532c38174 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/AbstractExtractDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/AbstractExtractDialog.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.NotNull; public interface AbstractExtractDialog { + @NotNull String getChosenMethodName(); VariableData[] getChosenParameters(); @PsiModifier.ModifierConstant diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java index 5b50285eadfd..a8f0f808c1fb 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodDialog.java @@ -151,6 +151,7 @@ public class ExtractMethodDialog extends RefactoringDialog implements AbstractEx return getHelpId() != null; } + @NotNull @Override public String getChosenMethodName() { return myNameField.getEnteredName().trim(); diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java index 24d80e1a9592..524538d42654 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractLightMethodObjectHandler.java @@ -80,7 +80,7 @@ public class ExtractLightMethodObjectHandler { public static ExtractedData extractLightMethodObject(final Project project, @Nullable PsiElement originalContext, @NotNull final PsiCodeFragment fragment, - final String methodName, + @NotNull String methodName, @Nullable JavaSdkVersion javaVersion) throws PrepareFailedException { final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project); PsiElement[] elements = completeToStatementArray(fragment, elementFactory); @@ -325,13 +325,15 @@ public class ExtractLightMethodObjectHandler { private static class LightExtractMethodObjectDialog implements AbstractExtractDialog { private final ExtractMethodObjectProcessor myProcessor; + @NotNull private final String myMethodName; - LightExtractMethodObjectDialog(ExtractMethodObjectProcessor processor, String methodName) { + LightExtractMethodObjectDialog(ExtractMethodObjectProcessor processor, @NotNull String methodName) { myProcessor = processor; myMethodName = methodName; } + @NotNull @Override public String getChosenMethodName() { return myMethodName; diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectDialog.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectDialog.java index 7a5b74f6ab68..105e1e13e989 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectDialog.java @@ -117,6 +117,7 @@ public class ExtractMethodObjectDialog extends DialogWrapper implements Abstract return null; } + @NotNull @Override public String getChosenMethodName() { return myCreateInnerClassRb.isSelected() ? myInnerClassName.getText() : myMethodName.getText(); diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java index 3d1879bb89db..270c94349a83 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectProcessor.java @@ -74,6 +74,7 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor { protected final MyExtractMethodProcessor myExtractProcessor; private boolean myCreateInnerClass = true; + @NotNull private String myInnerClassName; private boolean myMultipleExitPoints; @@ -91,7 +92,7 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor { private static final Key GENERATED_RETURN = new Key<>("GENERATED_RETURN"); - public ExtractMethodObjectProcessor(Project project, Editor editor, PsiElement[] elements, final String innerClassName) { + public ExtractMethodObjectProcessor(Project project, Editor editor, PsiElement[] elements, @NotNull String innerClassName) { super(project); myInnerClassName = innerClassName; myExtractProcessor = new MyExtractMethodProcessor(project, editor, elements, null, REFACTORING_NAME, innerClassName, HelpID.EXTRACT_METHOD_OBJECT); @@ -695,6 +696,7 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor { return myExtractProcessor.getExtractedMethod(); } + @NotNull public String getInnerClassName() { return myInnerClassName; } diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectViewDescriptor.java index 19581e369d6c..b578f7d93c5b 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethodObject/ExtractMethodObjectViewDescriptor.java @@ -39,6 +39,7 @@ public class ExtractMethodObjectViewDescriptor implements UsageViewDescriptor { return "Method to be converted"; } + @NotNull @Override public String getCodeReferencesText(final int usagesCount, final int filesCount) { return "References to be changed"; diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java index 9637bdfb4180..cad410058424 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java @@ -31,6 +31,7 @@ import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier; import com.intellij.refactoring.util.classMembers.MemberInfo; import com.intellij.refactoring.util.classMembers.UsesAndInterfacesDependencyMemberInfoModel; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; @@ -74,6 +75,7 @@ class ExtractSuperclassDialog extends JavaExtractSuperBaseDialog { : RefactoringBundle.message("package.for.original.class"); } + @NotNull @Override protected String getEntityName() { return RefactoringBundle.message("ExtractSuperClass.superclass"); diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/JavaExtractSuperBaseDialog.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/JavaExtractSuperBaseDialog.java index 82a5894d8daf..efef7b7938c6 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/JavaExtractSuperBaseDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/JavaExtractSuperBaseDialog.java @@ -36,6 +36,7 @@ import com.intellij.refactoring.util.RefactoringMessageUtil; import com.intellij.refactoring.util.classMembers.MemberInfo; import com.intellij.ui.EditorComboBox; import com.intellij.ui.components.JBLabel; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -180,7 +181,7 @@ public abstract class JavaExtractSuperBaseDialog extends ExtractSuperBaseDialog< @Nullable @Override - protected String validateQualifiedName(String packageName, String extractedSuperName) { + protected String validateQualifiedName(String packageName, @NotNull String extractedSuperName) { return StringUtil.getQualifiedName(packageName, extractedSuperName).equals(mySourceClass.getQualifiedName()) ? "Different name expected" : null; } diff --git a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java index 6f4de1e221c4..2f07a8849757 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java @@ -76,6 +76,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor { private final String myNewVisibility; private final boolean myGenerateAccessors; private final List enumConstants; + @NotNull private final String newClassName; private final String delegateFieldName; private final boolean requiresBackpointer; @@ -89,7 +90,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor { List methods, List innerClasses, String newPackageName, - String newClassName) { + @NotNull String newClassName) { this(sourceClass, fields, methods, innerClasses, newPackageName, null, newClassName, null, false, Collections.emptyList(), false); } @@ -99,7 +100,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor { List classes, String packageName, MoveDestination moveDestination, - String newClassName, + @NotNull String newClassName, String newVisibility, boolean generateAccessors, List enumConstants, @@ -186,6 +187,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor { return showConflicts(conflicts, refUsages.get()); } + @NotNull private String getQualifiedName() { return extractInnerClass ? newClassName : StringUtil.getQualifiedName(newPackageName, newClassName); } diff --git a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassUsageViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassUsageViewDescriptor.java index 55ed5f4ba5fc..ee5cdba5a224 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassUsageViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassUsageViewDescriptor.java @@ -31,6 +31,7 @@ class ExtractClassUsageViewDescriptor implements UsageViewDescriptor { } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactorJBundle.message("references.to.extract") + MyUsageViewUtil.getUsageCountInfo(usagesCount, filesCount, "reference"); diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java index 47c80a6fdc43..9dc1c2b99ba5 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousConstructorProcessor.java @@ -251,7 +251,7 @@ class InlineToAnonymousConstructorProcessor { private PsiVariable generateOuterClassLocal() { PsiClass outerClass = myClass.getContainingClass(); assert outerClass != null; - return generateLocal(StringUtil.decapitalize(outerClass.getName()), + return generateLocal(StringUtil.decapitalize(StringUtil.notNullize(outerClass.getName())), myElementFactory.createType(outerClass), myNewExpression.getQualifier()); } diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineViewDescriptor.java index 9c8fc76d5019..277824ebc4d1 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineViewDescriptor.java @@ -53,6 +53,7 @@ class InlineViewDescriptor implements UsageViewDescriptor{ return "Unknown element"; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("invocations.to.be.inlined", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java index 14a41b6a9e70..d042b4562d7f 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java @@ -764,6 +764,7 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase { } private class MyAbstractExtractDialog implements AbstractExtractDialog { + @NotNull @Override public String getChosenMethodName() { return "name"; diff --git a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectDialog.java b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectDialog.java index 6e05c467aa13..c50edfe72fdb 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/IntroduceParameterObjectDialog.java @@ -226,6 +226,7 @@ public class IntroduceParameterObjectDialog extends AbstractIntroduceParameterOb } } + @NotNull private String getInnerClassName() { return myInnerClassNameTextField.getText().trim(); } diff --git a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectClassDescriptor.java b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectClassDescriptor.java index accb036059b1..12954ca641a9 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectClassDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectClassDescriptor.java @@ -49,7 +49,7 @@ public class JavaIntroduceParameterObjectClassDescriptor extends IntroduceParame private final Map myExistingClassProperties = new HashMap<>(); private final MoveDestination myMoveDestination; - public JavaIntroduceParameterObjectClassDescriptor(String className, + public JavaIntroduceParameterObjectClassDescriptor(@NotNull String className, String packageName, MoveDestination moveDestination, boolean useExistingClass, diff --git a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticViewDescriptor.java index 1869c6791965..73d812daf608 100644 --- a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticViewDescriptor.java @@ -49,6 +49,7 @@ public class MakeMethodOrClassStaticViewDescriptor implements UsageViewDescripto return myProcessedElementsHeader; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("references.to.be.changed", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java index f797d4b53995..17cf5877c5c3 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/PullUpProcessor.java @@ -318,6 +318,7 @@ public class PullUpProcessor extends BaseRefactoringProcessor implements PullUpD return ContainerUtil.map(myMembersToMove, info -> info.getMember(), PsiElement.EMPTY_ARRAY); } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return "Class to pull up members to \"" + RefactoringUIUtil.getDescription(myTargetSuperClass, true) + "\""; diff --git a/java/java-impl/src/com/intellij/refactoring/migration/MigrationUsagesViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/migration/MigrationUsagesViewDescriptor.java index 2fc3ac545e90..b34773d70c14 100644 --- a/java/java-impl/src/com/intellij/refactoring/migration/MigrationUsagesViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/migration/MigrationUsagesViewDescriptor.java @@ -46,6 +46,7 @@ class MigrationUsagesViewDescriptor implements UsageViewDescriptor { return null; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("references.in.code.to.elements.from.migration.map", myMigrationMap.getName(), diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java index 1f6a0b5e4de2..2c896faae30e 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesProcessor.java @@ -408,10 +408,10 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor { private String getNewQName(PsiElement element) { final String qualifiedName = myTargetPackage.getQualifiedName(); if (element instanceof PsiClass) { - return StringUtil.getQualifiedName(qualifiedName, ((PsiClass)element).getName()); + return StringUtil.getQualifiedName(qualifiedName, StringUtil.notNullize(((PsiClass)element).getName())); } else if (element instanceof PsiPackage) { - return StringUtil.getQualifiedName(qualifiedName, ((PsiPackage)element).getName()); + return StringUtil.getQualifiedName(qualifiedName, StringUtil.notNullize(((PsiPackage)element).getName())); } else if (element instanceof PsiClassOwner) { return ((PsiClassOwner)element).getName(); diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java index eb7981ed18ee..d05bbfd98b66 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveJavaFileHandler.java @@ -59,7 +59,8 @@ public class MoveJavaFileHandler extends MoveFileHandler { final String qualifiedName = newParentPackage == null ? "" : newParentPackage.getQualifiedName(); for (PsiClass aClass : ((PsiJavaFile)psiFile).getClasses()) { Collections.addAll(result, MoveClassesOrPackagesUtil.findUsages(aClass, searchInComments, searchInNonJavaFiles, - StringUtil.getQualifiedName(qualifiedName, aClass.getName()))); + StringUtil.getQualifiedName(qualifiedName, + StringUtil.notNullize(aClass.getName())))); } return result.isEmpty() ? null : result; } diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerViewDescriptor.java index 4b3e63ef69f4..bac9cad575bf 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveInner/MoveInnerViewDescriptor.java @@ -42,6 +42,7 @@ class MoveInnerViewDescriptor implements UsageViewDescriptor { return RefactoringBundle.message("move.inner.class.to.be.moved"); } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("references.to.be.changed", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanUsageViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanUsageViewDescriptor.java index 7b2f16ae891c..1b565b659cf7 100644 --- a/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanUsageViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/removemiddleman/RemoveMiddlemanUsageViewDescriptor.java @@ -30,6 +30,7 @@ class RemoveMiddlemanUsageViewDescriptor implements UsageViewDescriptor { this.field = field; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactorJBundle diff --git a/java/java-impl/src/com/intellij/refactoring/rename/RenamePsiPackageProcessor.java b/java/java-impl/src/com/intellij/refactoring/rename/RenamePsiPackageProcessor.java index 39b0fa118b50..9c39ce271e5e 100644 --- a/java/java-impl/src/com/intellij/refactoring/rename/RenamePsiPackageProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/rename/RenamePsiPackageProcessor.java @@ -54,6 +54,7 @@ public class RenamePsiPackageProcessor extends RenamePsiElementProcessor { return new String[]{((PsiPackage)element).getQualifiedName()}; } + @NotNull @Override public String getNewName() { final PsiPackage psiPackage = (PsiPackage)element; diff --git a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java index 2c4b7e3f18ba..f20bb0575427 100644 --- a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java @@ -57,6 +57,7 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto public static final String REFACTORING_NAME = "Replace Constructor with Builder"; private final PsiMethod[] myConstructors; private final Map myParametersMap; + @NotNull private final String myClassName; private final String myPackageName; private final boolean myCreateNewBuilderClass; @@ -67,7 +68,7 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto public ReplaceConstructorWithBuilderProcessor(Project project, PsiMethod[] constructors, Map parametersMap, - String className, + @NotNull String className, String packageName, MoveDestination moveDestination, boolean createNewBuilderClass) { super(project); diff --git a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/RefsToSuperViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/RefsToSuperViewDescriptor.java index ce596da05725..499092cb9049 100644 --- a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/RefsToSuperViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/RefsToSuperViewDescriptor.java @@ -46,6 +46,7 @@ class RefsToSuperViewDescriptor implements UsageViewDescriptor{ return null; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { StringBuilder buffer = new StringBuilder(); diff --git a/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookViewDescriptor.java index 437b31af2636..b373f7507441 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookViewDescriptor.java @@ -39,6 +39,7 @@ class TypeCookViewDescriptor implements UsageViewDescriptor { return RefactoringBundle.message("type.cook.elements.header"); } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("declaration.s.to.be.generified", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java index e9300d24407b..f113d9d69018 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java @@ -111,10 +111,10 @@ public class TypeMigrationLabeler { final PsiExpression element = p.getFirst().getElement(); LOG.assertTrue(element != null); final PsiType type = element.getType(); - report[j++] = "Cannot convert type of expression " + StringUtil.escapeXml(element.getText()) + "" + + report[j++] = "Cannot convert type of expression " + StringUtil.escapeXmlEntities(element.getText()) + "" + (type != null - ? " from " + StringUtil.escapeXml(type.getCanonicalText()) + "" + - " to " + StringUtil.escapeXml(p.getSecond().getCanonicalText()) + "" + ? " from " + StringUtil.escapeXmlEntities(type.getCanonicalText()) + "" + + " to " + StringUtil.escapeXmlEntities(p.getSecond().getCanonicalText()) + "" : "") + "
"; } diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationViewDescriptor.java index dc4cbf0b94fa..68685f913305 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationViewDescriptor.java @@ -40,6 +40,7 @@ class TypeMigrationViewDescriptor implements UsageViewDescriptor { return "Root for type migration"; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("occurences.to.be.migrated", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java index 209d9ca39b74..a816e3f792e7 100644 --- a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueDialog.java @@ -123,6 +123,7 @@ class WrapReturnValueDialog extends RefactoringDialog { } } + @NotNull private String getInnerClassName() { return myInnerClassNameTextField.getText().trim(); } diff --git a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java index 925a249cc934..6e50b9719a38 100644 --- a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueProcessor.java @@ -59,6 +59,7 @@ public class WrapReturnValueProcessor extends FixableUsagesRefactoringProcessor private final MoveDestination myMoveDestination; private final PsiMethod myMethod; + @NotNull private final String myClassName; private final String myPackageName; private final boolean myCreateInnerClass; @@ -68,7 +69,7 @@ public class WrapReturnValueProcessor extends FixableUsagesRefactoringProcessor private final List myTypeParameters; private final String myUnwrapMethodName; - public WrapReturnValueProcessor(String className, + public WrapReturnValueProcessor(@NotNull String className, String packageName, MoveDestination moveDestination, PsiMethod method, diff --git a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueUsageViewDescriptor.java b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueUsageViewDescriptor.java index 5eebbe042fce..7ee71c9c0e7f 100644 --- a/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueUsageViewDescriptor.java +++ b/java/java-impl/src/com/intellij/refactoring/wrapreturnvalue/WrapReturnValueUsageViewDescriptor.java @@ -45,6 +45,7 @@ class WrapReturnValueUsageViewDescriptor implements UsageViewDescriptor { return RefactorJBundle.message("method.whose.return.are.to.wrapped"); } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount){ return RefactorJBundle.message("references.to.be.modified.usage.view", diff --git a/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java b/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java index 3b8803d583e9..0c6c9f009abb 100644 --- a/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java +++ b/java/java-impl/src/com/intellij/testIntegration/TestIntegrationUtils.java @@ -70,12 +70,14 @@ public class TestIntegrationUtils { return null; } }; + @NotNull private final String myDefaultName; - MethodKind(String defaultName) { + MethodKind(@NotNull String defaultName) { myDefaultName = defaultName; } + @NotNull public String getDefaultName() { return myDefaultName; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java index 69d51c953812..964cfcbe5398 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java @@ -170,12 +170,12 @@ public class PsiClassImpl extends JavaStubPsiElement> implements PsiElement parent = getParent(); if (parent instanceof PsiJavaFile) { - return StringUtil.getQualifiedName(((PsiJavaFile)parent).getPackageName(), getName()); + return StringUtil.getQualifiedName(((PsiJavaFile)parent).getPackageName(), StringUtil.notNullize(getName())); } if (parent instanceof PsiClass) { String parentQName = ((PsiClass)parent).getQualifiedName(); if (parentQName == null) return null; - return StringUtil.getQualifiedName(parentQName, getName()); + return StringUtil.getQualifiedName(parentQName, StringUtil.notNullize(getName())); } return null; diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/ExternalAnnotationsManagerTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/ExternalAnnotationsManagerTest.java index a7de235a9b07..4717d4e0c86c 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/ExternalAnnotationsManagerTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/ExternalAnnotationsManagerTest.java @@ -127,7 +127,7 @@ public class ExternalAnnotationsManagerTest extends IdeaTestCase { } @Contract("_,_,_-> fail") - private static void fail(String error, PsiFile psiFile, String externalName) { + private static void fail(String error, PsiFile psiFile, @NotNull String externalName) { int offset = psiFile.getText().indexOf(XmlUtil.escape(externalName)); int line = PsiDocumentManager.getInstance(psiFile.getProject()).getDocument(psiFile).getLineNumber(offset); fail(error + "\nFile: " + psiFile.getVirtualFile().getPath() + ":" + (line+1) + " (offset: "+offset+")"); @@ -135,7 +135,7 @@ public class ExternalAnnotationsManagerTest extends IdeaTestCase { private void checkExternalName(@NotNull PsiFile psiFile, @NotNull String externalName, @NotNull String assumedPackage) { // 'item name="java.lang.ClassLoader java.net.URL getResource(java.lang.String) 0"' should have all FQNs - String unescaped = StringUtil.unescapeXml(externalName); + String unescaped = StringUtil.unescapeXmlEntities(externalName); List words = StringUtil.split(unescaped, " "); String className = words.get(0); PsiClass aClass = assertClassFqn(className, psiFile, externalName, assumedPackage); diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/bytecodeAnalysis/BytecodeAnalysisIntegrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/bytecodeAnalysis/BytecodeAnalysisIntegrationTest.java index 6342e64a83e1..ac10e1a7c113 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/bytecodeAnalysis/BytecodeAnalysisIntegrationTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/bytecodeAnalysis/BytecodeAnalysisIntegrationTest.java @@ -270,7 +270,7 @@ public class BytecodeAnalysisIntegrationTest extends LightCodeInsightFixtureTest if (annotations.isEmpty()) return; String xmlContent = EntryStream.of(annotations) .mapValues(map -> EntryStream.of(map).mapKeyValue(ExternalAnnotationsManagerImpl::createAnnotationTag).joining()) - .mapKeyValue((externalName, content) -> "\n" + content.trim() + "\n\n") + .mapKeyValue((externalName, content) -> "\n" + content.trim() + "\n\n") .joining("", "\n", ""); WriteCommandAction.runWriteCommandAction(getProject(), () -> { XmlFile xml = ExternalAnnotationsManagerImpl.createAnnotationsXml(root, packageName, getPsiManager()); diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceParameterObjectTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceParameterObjectTest.java index d84e8bef55bd..40b7397da5d4 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceParameterObjectTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceParameterObjectTest.java @@ -196,17 +196,17 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase { doTest(true, false); } - private void doTestExistingClass(final String existingClassName, final String existingClassPackage, final boolean generateAccessors) { + private void doTestExistingClass(@NotNull String existingClassName, final String existingClassPackage, final boolean generateAccessors) { doTestExistingClass(existingClassName, existingClassPackage, generateAccessors, null); } - private void doTestExistingClass(final String existingClassName, final String existingClassPackage, final boolean generateAccessors, + private void doTestExistingClass(@NotNull String existingClassName, final String existingClassPackage, final boolean generateAccessors, final String newVisibility) { doTestExistingClass(existingClassName, existingClassPackage, generateAccessors, newVisibility, IntroduceParameterObjectTest::generateParams); } - private void doTestExistingClass(final String existingClassName, + private void doTestExistingClass(@NotNull String existingClassName, final String existingClassPackage, final boolean generateAccessors, final String newVisibility, @@ -243,7 +243,7 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase { checkExceptionThrown("Integer", "java.lang", "Setter for field 'value' is required"); } - private void checkExceptionThrown(String existingClassName, String existingClassPackage, String exceptionMessage) { + private void checkExceptionThrown(@NotNull String existingClassName, String existingClassPackage, String exceptionMessage) { try { doTestExistingClass(existingClassName, existingClassPackage, false); } diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java index 481f6af5cebf..eca85cb2a340 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java @@ -171,8 +171,8 @@ public class JsonSchemaDocumentationProvider implements DocumentationProvider { } @NotNull - private static String plainTextPostProcess(String text) { - return StringUtil.escapeXml(text).replace("\\n", "
"); + private static String plainTextPostProcess(@NotNull String text) { + return StringUtil.escapeXmlEntities(text).replace("\\n", "
"); } @Nullable diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java index 621022ad8f60..bc185b447350 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java @@ -121,7 +121,7 @@ public class HighlightInfo implements Segment { private static String encodeTooltip(String toolTip, String description) { if (toolTip == null || description == null) return toolTip; - String unescaped = StringUtil.unescapeXml(XmlStringUtil.stripHtml(toolTip)); + String unescaped = StringUtil.unescapeXmlEntities(XmlStringUtil.stripHtml(toolTip)); String encoded = description.isEmpty() ? unescaped : StringUtil.replace(unescaped, description, DESCRIPTION_PLACEHOLDER); //noinspection StringEquality diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java b/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java index 5fcabad3b7c9..38af9b3aa038 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java +++ b/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java @@ -101,7 +101,7 @@ public class ProblemDescriptorUtil { public static String unescapeTags(String message) { message = StringUtil.replace(message, "", "'"); message = StringUtil.replace(message, "", "'"); - message = message.contains(XML_CODE_MARKER.first) ? unescapeXmlCode(message) : StringUtil.unescapeXml(message); + message = message.contains(XML_CODE_MARKER.first) ? unescapeXmlCode(message) : StringUtil.unescapeXmlEntities(message); return message; } @@ -120,7 +120,7 @@ public class ProblemDescriptorUtil { if (string.contains(XML_CODE_MARKER.second)) { builder.append(string.replace(XML_CODE_MARKER.second, "")); } else { - builder.append(StringUtil.unescapeXml(string)); + builder.append(StringUtil.unescapeXmlEntities(string)); } } return builder.toString(); diff --git a/platform/core-api/src/com/intellij/psi/targets/AliasingPsiTarget.java b/platform/core-api/src/com/intellij/psi/targets/AliasingPsiTarget.java index c73a72c9f0a3..2a93b063a8d0 100644 --- a/platform/core-api/src/com/intellij/psi/targets/AliasingPsiTarget.java +++ b/platform/core-api/src/com/intellij/psi/targets/AliasingPsiTarget.java @@ -40,7 +40,7 @@ public class AliasingPsiTarget extends DelegatePsiTarget implements PomRenameabl @Override @NotNull public String getName() { - return StringUtil.notNullize(getNameAlias(((PsiNamedElement)getNavigationElement()).getName())); + return StringUtil.notNullize(getNameAlias(StringUtil.notNullize(((PsiNamedElement)getNavigationElement()).getName()))); } @NotNull @@ -49,7 +49,7 @@ public class AliasingPsiTarget extends DelegatePsiTarget implements PomRenameabl } @Nullable - public String getNameAlias(@Nullable String delegatePsiTargetName) { + public String getNameAlias(@NotNull String delegatePsiTargetName) { return delegatePsiTargetName; } } diff --git a/platform/lang-api/src/com/intellij/execution/Executor.java b/platform/lang-api/src/com/intellij/execution/Executor.java index 44c930e44616..43de70ca351b 100644 --- a/platform/lang-api/src/com/intellij/execution/Executor.java +++ b/platform/lang-api/src/com/intellij/execution/Executor.java @@ -89,7 +89,8 @@ public abstract class Executor { @NonNls public abstract String getHelpId(); - public String getStartActionText(String configurationName) { + @NotNull + public String getStartActionText(@NotNull String configurationName) { return getStartActionText() + (StringUtil.isEmpty(configurationName) ? "" : " '" + shortenNameIfNeed(configurationName) + "'"); } diff --git a/platform/lang-api/src/com/intellij/ide/actions/CreateElementActionBase.java b/platform/lang-api/src/com/intellij/ide/actions/CreateElementActionBase.java index f49dc97937a7..765b6f5992e0 100644 --- a/platform/lang-api/src/com/intellij/ide/actions/CreateElementActionBase.java +++ b/platform/lang-api/src/com/intellij/ide/actions/CreateElementActionBase.java @@ -54,7 +54,7 @@ public abstract class CreateElementActionBase extends CreateInDirectoryActionBas * @return created elements. Never null. */ @NotNull - protected abstract PsiElement[] create(String newName, PsiDirectory directory) throws Exception; + protected abstract PsiElement[] create(@NotNull String newName, PsiDirectory directory) throws Exception; protected abstract String getErrorTitle(); @@ -106,7 +106,7 @@ public abstract class CreateElementActionBase extends CreateInDirectoryActionBas } @Override - public PsiElement[] create(String newName) throws Exception { + public PsiElement[] create(@NotNull String newName) throws Exception { return CreateElementActionBase.this.create(newName, myDirectory); } diff --git a/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java b/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java index 995dcbf0b838..de658f75b027 100644 --- a/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java +++ b/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java @@ -51,7 +51,7 @@ public abstract class ElementCreator implements WriteActionAware { myErrorTitle = errorTitle; } - protected abstract PsiElement[] create(String newName) throws Exception; + protected abstract PsiElement[] create(@NotNull String newName) throws Exception; protected abstract String getActionName(String newName); public PsiElement[] tryCreate(@NotNull final String inputString) { diff --git a/platform/lang-api/src/com/intellij/lang/ExpressionTypeProvider.java b/platform/lang-api/src/com/intellij/lang/ExpressionTypeProvider.java index cb5e59687082..960c87d98916 100644 --- a/platform/lang-api/src/com/intellij/lang/ExpressionTypeProvider.java +++ b/platform/lang-api/src/com/intellij/lang/ExpressionTypeProvider.java @@ -28,7 +28,7 @@ import java.util.List; public abstract class ExpressionTypeProvider { /** * Returns HTML string for type info hint. - * @see com.intellij.openapi.util.text.StringUtil#escapeXml(String) + * @see com.intellij.openapi.util.text.StringUtil#escapeXmlEntities(String) */ @NotNull public abstract String getInformationHint(@NotNull T element); diff --git a/platform/lang-api/src/com/intellij/usageView/BaseUsageViewDescriptor.java b/platform/lang-api/src/com/intellij/usageView/BaseUsageViewDescriptor.java index 366e5e1f4f51..f603b8d5e090 100644 --- a/platform/lang-api/src/com/intellij/usageView/BaseUsageViewDescriptor.java +++ b/platform/lang-api/src/com/intellij/usageView/BaseUsageViewDescriptor.java @@ -42,6 +42,7 @@ public class BaseUsageViewDescriptor implements UsageViewDescriptor { return "Element(s) to be refactored:"; } + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("references.to.be.changed", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/platform/lang-api/src/com/intellij/usageView/UsageViewDescriptor.java b/platform/lang-api/src/com/intellij/usageView/UsageViewDescriptor.java index 0db0d6c3aff5..bc7cd167dc5a 100644 --- a/platform/lang-api/src/com/intellij/usageView/UsageViewDescriptor.java +++ b/platform/lang-api/src/com/intellij/usageView/UsageViewDescriptor.java @@ -31,6 +31,7 @@ public interface UsageViewDescriptor { String getProcessedElementsHeader(); + @NotNull String getCodeReferencesText(int usagesCount, int filesCount); @Nullable diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java index 7ba746231163..2fbac58e778d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java @@ -787,7 +787,7 @@ public class CompletionProgressIndicator extends ProgressIndicatorBase implement final MessageBusConnection connection = project.getMessageBus().connect(); connection.subscribe(EditorHintListener.TOPIC, listener); assert text != null; - HintManager.getInstance().showErrorHint(editor, StringUtil.escapeXml(text), HintManager.UNDER); + HintManager.getInstance().showErrorHint(editor, StringUtil.escapeXmlEntities(text), HintManager.UNDER); connection.disconnect(); return result[0]; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index 07a0267fa8d0..3c5dbcfade1f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -506,7 +506,7 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass if (!inspectionProfile.isToolEnabled(key, getFile())) return; HighlightInfoType type = new InspectionHighlightInfoType(level, element); - final String plainMessage = message.startsWith("") ? StringUtil.unescapeXml(XmlStringUtil.stripHtml(message).replaceAll("<[^>]*>", "")) : message; + final String plainMessage = message.startsWith("") ? StringUtil.unescapeXmlEntities(XmlStringUtil.stripHtml(message).replaceAll("<[^>]*>", "")) : message; @NonNls String link = ""; if (showToolDescription(toolWrapper)) { link = " mkdirs.directory.createFile(getFileName(mkdirs.newName)))}; } @@ -217,7 +217,7 @@ public class CreateFileAction extends CreateElementActionBase implements DumbAwa } @Override - public PsiElement[] create(String newName) throws Exception { + public PsiElement[] create(@NotNull String newName) throws Exception { return super.create(newName); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/CreateFileFromTemplateDialog.java b/platform/lang-impl/src/com/intellij/ide/actions/CreateFileFromTemplateDialog.java index ccd0de29109a..4929bdab3325 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/CreateFileFromTemplateDialog.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/CreateFileFromTemplateDialog.java @@ -167,7 +167,7 @@ public class CreateFileFromTemplateDialog extends DialogWrapper { myDialog.myCreator = new ElementCreator(myProject, errorTitle) { @Override - protected PsiElement[] create(String newName) { + protected PsiElement[] create(@NotNull String newName) { T element = creator.createFile(myDialog.getEnteredName(), myDialog.getKindCombo().getSelectedName()); if (element != null) { created.set(SmartPointerManager.getInstance(myProject).createSmartPsiElementPointer(element)); diff --git a/platform/lang-impl/src/com/intellij/ide/actions/CreateFromTemplateAction.java b/platform/lang-impl/src/com/intellij/ide/actions/CreateFromTemplateAction.java index 1a2a3d209993..835baa8bd0d5 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/CreateFromTemplateAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/CreateFromTemplateAction.java @@ -126,8 +126,9 @@ public abstract class CreateFromTemplateAction extends AnA return project != null && view != null && view.getDirectories().length != 0; } - protected abstract String getActionName(PsiDirectory directory, String newName, String templateName); + protected abstract String getActionName(PsiDirectory directory, @NotNull String newName, String templateName); + @NotNull protected String getErrorTitle() { return CommonBundle.getErrorTitle(); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java index d6dd968eb2cb..c0f2477d45dc 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java @@ -1294,7 +1294,7 @@ public class SearchEverywhereAction extends AnAction implements CustomComponentA if (hit == null) { hit = value.getOption(); } - hit = StringUtil.unescapeXml(hit); + hit = StringUtil.unescapeXmlEntities(hit); if (hit.length() > 60) { hit = hit.substring(0, 60) + "..."; } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingUtil.java b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingUtil.java index ac2ec5e65b4b..63967bd7dc65 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingUtil.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingUtil.java @@ -75,7 +75,7 @@ public class RunAnythingUtil { if (hit == null) { hit = value.getOption(); } - hit = StringUtil.unescapeXml(hit); + hit = StringUtil.unescapeXmlEntities(hit); if (hit.length() > 60) { hit = hit.substring(0, 60) + "..."; } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/TopHitSEContributor.java b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/TopHitSEContributor.java index e9814053a099..f570e14546c5 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/TopHitSEContributor.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/TopHitSEContributor.java @@ -322,7 +322,7 @@ public class TopHitSEContributor implements SearchEverywhereContributor { if (hit == null) { hit = value.getOption(); } - hit = StringUtil.unescapeXml(hit); + hit = StringUtil.unescapeXmlEntities(hit); if (hit.length() > 60) { hit = hit.substring(0, 60) + "..."; } diff --git a/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java b/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java index a5315e8727dc..f091a3a6d8e3 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java +++ b/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java @@ -77,6 +77,7 @@ public class Bookmark implements Navigatable, Comparable { private final Project myProject; private Reference myHighlighterRef; + @NotNull private String myDescription; private char myMnemonic; int index; // index in the list of bookmarks in the Navigate|Bookmarks|show @@ -207,6 +208,7 @@ public class Bookmark implements Navigatable, Comparable { return myMnemonic == 0 ? DEFAULT_ICON : MnemonicIcon.getIcon(myMnemonic); } + @NotNull public String getDescription() { return myDescription; } @@ -288,7 +290,8 @@ public class Bookmark implements Navigatable, Comparable { @Override public String toString() { StringBuilder result = new StringBuilder(getQualifiedName()); - String description = StringUtil.escapeXml(nullizeEmptyDescription()); + String text = nullizeEmptyDescription(); + String description = text == null ? null : StringUtil.escapeXmlEntities(text); if (description != null) { result.append(": ").append(description); } @@ -331,7 +334,8 @@ public class Bookmark implements Navigatable, Comparable { if (myMnemonic != 0) { result.append(" ").append(myMnemonic); } - String description = StringUtil.escapeXml(nullizeEmptyDescription()); + String text = nullizeEmptyDescription(); + String description = text == null ? null : StringUtil.escapeXmlEntities(text); if (description != null) { result.append(": ").append(description); } diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteNode.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteNode.java index 1cc9599a5bc9..8abbf06c9ed3 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteNode.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteNode.java @@ -15,6 +15,8 @@ */ package com.intellij.ide.favoritesTreeView; +import org.jetbrains.annotations.NotNull; + import java.util.Set; public class NoteNode { @@ -22,10 +24,11 @@ public class NoteNode { private Set myFlags; private Set myConcepts; + @NotNull private String myText; private final boolean myReadonly; - public NoteNode(String text, boolean readonly) { + public NoteNode(@NotNull String text, boolean readonly) { myText = text; myReadonly = readonly; } @@ -54,11 +57,12 @@ public class NoteNode { myConcepts = concepts; } + @NotNull public String getText() { return myText; } - public void setText(String text) { + public void setText(@NotNull String text) { myText = text; } diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteSerializable.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteSerializable.java index d51cd5bd9f29..8d400dfe9837 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteSerializable.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/NoteSerializable.java @@ -35,7 +35,7 @@ public class NoteSerializable implements WorkingSetSerializable"); oos.append(t.isReadonly()); oos.append("<>"); @@ -45,7 +45,7 @@ public class NoteSerializable implements WorkingSetSerializable strings = StringUtil.split(ois, "<>", true); if (strings.size() == 2) { - return new NoteNode(StringUtil.unescapeXml(strings.get(0)), Boolean.parseBoolean(strings.get(1))); + return new NoteNode(StringUtil.unescapeXmlEntities(strings.get(0)), Boolean.parseBoolean(strings.get(1))); } return null; } diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/UsageSerializable.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/UsageSerializable.java index 639133d729a3..53dd0138f492 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/UsageSerializable.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/UsageSerializable.java @@ -26,6 +26,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.usageView.UsageInfo; import com.intellij.usages.UsageInfo2UsageAdapter; +import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; @@ -53,7 +54,7 @@ public class UsageSerializable implements WorkingSetSerializable, D if (hit == null) { hit = ((OptionDescription)value).getOption(); } - hit = StringUtil.unescapeXml(hit); + hit = StringUtil.unescapeXmlEntities(hit); hit = hit.replace(" ", " "); // avoid extra spaces from mnemonics and xml conversion String fullHit = hit; Color fg = UIUtil.getListForeground(isSelected); diff --git a/platform/lang-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java b/platform/lang-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java index ea0721375a6b..1f07f25fa7cd 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java @@ -15,6 +15,7 @@ import com.intellij.refactoring.ui.RefactoringDialog; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.ui.RecentsManager; import com.intellij.util.IncorrectOperationException; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -67,7 +68,7 @@ public abstract class ExtractSuperBaseDialog", "") .replaceAll("", "") .replaceAll("", "") diff --git a/platform/lang-impl/src/com/intellij/refactoring/ui/UsageViewDescriptorAdapter.java b/platform/lang-impl/src/com/intellij/refactoring/ui/UsageViewDescriptorAdapter.java index a7d4f324142b..7758568b53c0 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/ui/UsageViewDescriptorAdapter.java +++ b/platform/lang-impl/src/com/intellij/refactoring/ui/UsageViewDescriptorAdapter.java @@ -19,12 +19,14 @@ package com.intellij.refactoring.ui; import com.intellij.refactoring.RefactoringBundle; import com.intellij.usageView.UsageViewBundle; import com.intellij.usageView.UsageViewDescriptor; +import org.jetbrains.annotations.NotNull; /** * @author dsl */ public abstract class UsageViewDescriptorAdapter implements UsageViewDescriptor { + @NotNull @Override public String getCodeReferencesText(int usagesCount, int filesCount) { return RefactoringBundle.message("references.to.be.changed", UsageViewBundle.getReferencesString(usagesCount, filesCount)); diff --git a/platform/lang-impl/src/com/intellij/slicer/SliceManager.java b/platform/lang-impl/src/com/intellij/slicer/SliceManager.java index 330196975e8e..5debb06da68f 100644 --- a/platform/lang-impl/src/com/intellij/slicer/SliceManager.java +++ b/platform/lang-impl/src/com/intellij/slicer/SliceManager.java @@ -9,13 +9,11 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.openapi.wm.impl.content.BaseLabel; import com.intellij.psi.ElementDescriptionUtil; import com.intellij.psi.PsiElement; import com.intellij.refactoring.util.RefactoringDescriptionLocation; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import java.util.regex.Pattern; @@ -64,7 +62,7 @@ public class SliceManager implements PersistentStateComponent.*)|<[^<>]*>", Pattern.DOTALL).matcher(dialogTitle).replaceAll(""); - SliceAnalysisParams params = handler.askForParams(element, dataFlowToThis, myStoredSettings, StringUtil.unescapeXml(dialogTitle)); + SliceAnalysisParams params = handler.askForParams(element, dataFlowToThis, myStoredSettings, StringUtil.unescapeXmlEntities(dialogTitle)); if (params == null) return; SliceRootNode rootNode = new SliceRootNode(myProject, new DuplicateMap(), diff --git a/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java b/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java index 511a5e4e4128..e432537ac4ef 100644 --- a/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java +++ b/platform/platform-api/src/com/intellij/ui/SimpleColoredComponent.java @@ -633,8 +633,8 @@ public class SimpleColoredComponent extends JComponent implements Accessible, Co } } - private static String convertFragment(String fragment) { - return StringUtil.escapeXml(fragment).replaceAll("\\\\n", "
"); + private static String convertFragment(@NotNull String fragment) { + return StringUtil.escapeXmlEntities(fragment).replaceAll("\\\\n", "
"); } private static void formatStyle(final StringBuilder builder, final SimpleTextAttributes attributes) { diff --git a/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.java b/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.java index 9552dcf79ae1..7762b348d20d 100644 --- a/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.java +++ b/platform/platform-impl/src/com/intellij/help/impl/KeymapGenerator.java @@ -71,7 +71,7 @@ public class KeymapGenerator implements ApplicationStarter { if (action != null) { String text = action.getTemplatePresentation().getText(); if (text != null) { - xml.append(" ").append(StringUtil.escapeXml(text)).append("\n"); + xml.append(" ").append(StringUtil.escapeXmlEntities(text)).append("\n"); } } xml.append(" \n"); diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java index 21532250424a..30603f10d3b7 100644 --- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java +++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java @@ -221,6 +221,6 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis @Contract("!null->!null") private static String ensureHTML(@Nullable String s) { - return s == null ? null : s.startsWith("") ? s : "" + StringUtil.escapeXml(s) + ""; + return s == null ? null : s.startsWith("") ? s : "" + StringUtil.escapeXmlEntities(s) + ""; } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/notification/EventLog.java b/platform/platform-impl/src/com/intellij/notification/EventLog.java index b1e03acebca3..133bbc06c44a 100644 --- a/platform/platform-impl/src/com/intellij/notification/EventLog.java +++ b/platform/platform-impl/src/com/intellij/notification/EventLog.java @@ -406,7 +406,7 @@ public class EventLog { text = StringUtil.replace(text, "»", ">>"); text = StringUtil.replace(text, "«", "<<"); text = StringUtil.replace(text, "…", "..."); - document.insertString(document.getTextLength(), StringUtil.unescapeXml(text)); + document.insertString(document.getTextLength(), StringUtil.unescapeXmlEntities(text)); } public static class LogEntry { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java index df6dc307e285..1cee8c6429cd 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java @@ -1240,7 +1240,7 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark String s = tooltip instanceof HighlightInfo ? ((HighlightInfo)tooltip).getDescription() : String.valueOf(tooltip); if (StringUtil.isEmpty(s)) continue; s = s.replaceAll(" ", " ").replaceAll("\\s+", " "); - s = StringUtil.unescapeXml(s); + s = StringUtil.unescapeXmlEntities(s); LogicalPosition logicalPosition = myEditor.offsetToLogicalPosition(hEndOffset); int endOfLineOffset = myEditor.getDocument().getLineEndOffset(logicalPosition.line); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerComponent.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerComponent.java index b4ee6d835281..099b514739b3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerComponent.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateCheckerComponent.java @@ -197,7 +197,7 @@ public class UpdateCheckerComponent implements Disposable, BaseComponent { } String message = ((blogPost == null) ? IdeBundle.message("update.snap.message") - : IdeBundle.message("update.snap.message.with.blog.post", StringUtil.escapeXml(blogPost))); + : IdeBundle.message("update.snap.message.with.blog.post", StringUtil.escapeXmlEntities(blogPost))); UpdateChecker.NOTIFICATIONS.createNotification(IdeBundle.message("update.notifications.title"), message, diff --git a/platform/platform-impl/src/com/intellij/ui/HoverHyperlinkLabel.java b/platform/platform-impl/src/com/intellij/ui/HoverHyperlinkLabel.java index b4510128a40b..e13feed688da 100644 --- a/platform/platform-impl/src/com/intellij/ui/HoverHyperlinkLabel.java +++ b/platform/platform-impl/src/com/intellij/ui/HoverHyperlinkLabel.java @@ -73,7 +73,7 @@ public class HoverHyperlinkLabel extends JLabel { } @NonNls private static String underlineTextInHtml(final String text) { - return "" + StringUtil.escapeXml(text) + ""; + return "" + StringUtil.escapeXmlEntities(text) + ""; } public String getOriginalText() { diff --git a/platform/projectModel-api/src/com/intellij/openapi/roots/DependencyScope.java b/platform/projectModel-api/src/com/intellij/openapi/roots/DependencyScope.java index 523e51498de0..8e1f6787a96d 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/roots/DependencyScope.java +++ b/platform/projectModel-api/src/com/intellij/openapi/roots/DependencyScope.java @@ -45,6 +45,7 @@ public enum DependencyScope { TEST("Test", false, false, true, true), RUNTIME("Runtime", false, true, false, true), PROVIDED("Provided", true, false, true, true); + @NotNull private final String myDisplayName; private final boolean myForProductionCompile; private final boolean myForProductionRuntime; @@ -53,7 +54,7 @@ public enum DependencyScope { public static final String SCOPE_ATTR = "scope"; - DependencyScope(String displayName, + DependencyScope(@NotNull String displayName, boolean forProductionCompile, boolean forProductionRuntime, boolean forTestCompile, @@ -87,6 +88,7 @@ public enum DependencyScope { } } + @NotNull public String getDisplayName() { return myDisplayName; } diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/ImportedTestContentHandler.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/ImportedTestContentHandler.java index 9bac6210671c..9585dc32b3a2 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/ImportedTestContentHandler.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/ImportedTestContentHandler.java @@ -29,21 +29,26 @@ public class ImportedTestContentHandler extends DefaultHandler { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (TestResultsXmlFormatter.ELEM_SUITE.equals(qName)) { - final String suiteName = StringUtil.unescapeXml(attributes.getValue(TestResultsXmlFormatter.ATTR_NAME)); - myProcessor.onSuiteStarted(new TestSuiteStartedEvent(suiteName, - StringUtil.unescapeXml(attributes.getValue(TestResultsXmlFormatter.ATTR_LOCATION)), - StringUtil.unescapeXml(attributes.getValue(TestResultsXmlFormatter.ATTR_METAINFO)))); + final String suiteName = StringUtil.unescapeXmlEntities(attributes.getValue(TestResultsXmlFormatter.ATTR_NAME)); + String locationValue = attributes.getValue(TestResultsXmlFormatter.ATTR_LOCATION); + String metaValue = attributes.getValue(TestResultsXmlFormatter.ATTR_METAINFO); + TestSuiteStartedEvent startedEvent = new TestSuiteStartedEvent(suiteName, + locationValue == null ? null : StringUtil.unescapeXmlEntities(locationValue), + metaValue == null ? null : StringUtil.unescapeXmlEntities(metaValue)); + myProcessor.onSuiteStarted(startedEvent); mySuites.push(suiteName); } else if (TestResultsXmlFormatter.ELEM_TEST.equals(qName)) { - final String name = StringUtil.unescapeXml(attributes.getValue(TestResultsXmlFormatter.ATTR_NAME)); + final String name = StringUtil.unescapeXmlEntities(attributes.getValue(TestResultsXmlFormatter.ATTR_NAME)); myCurrentTest = name; myDuration = attributes.getValue(TestResultsXmlFormatter.ATTR_DURATION); myStatus = attributes.getValue(TestResultsXmlFormatter.ATTR_STATUS); final String isConfig = attributes.getValue(TestResultsXmlFormatter.ATTR_CONFIG); - final TestStartedEvent startedEvent = new TestStartedEvent(name, - StringUtil.unescapeXml(attributes.getValue(TestResultsXmlFormatter.ATTR_LOCATION)), - StringUtil.unescapeXml(attributes.getValue(TestResultsXmlFormatter.ATTR_METAINFO))); + String locationValue = attributes.getValue(TestResultsXmlFormatter.ATTR_LOCATION); + String metaValue = attributes.getValue(TestResultsXmlFormatter.ATTR_METAINFO); + final TestStartedEvent startedEvent = new TestStartedEvent(name, + locationValue == null ? null : StringUtil.unescapeXmlEntities(locationValue), + metaValue == null ? null : StringUtil.unescapeXmlEntities(metaValue)); if (isConfig != null && Boolean.valueOf(isConfig)) { startedEvent.setConfig(true); } @@ -66,7 +71,7 @@ public class ImportedTestContentHandler extends DefaultHandler { @Override public void endElement(String uri, String localName, String qName) { - final String currentText = StringUtil.unescapeXml(currentValue.toString()); + final String currentText = StringUtil.unescapeXmlEntities(currentValue.toString()); final boolean isTestOutput = myCurrentTest == null || TestResultsXmlFormatter.STATUS_PASSED.equals(myStatus) || !myErrorOutput; if (isTestOutput) { currentValue.setLength(0); diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/ImportTestsFromHistoryAction.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/ImportTestsFromHistoryAction.java index f10fcab9e781..8e6e9629c3b0 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/ImportTestsFromHistoryAction.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/ImportTestsFromHistoryAction.java @@ -45,6 +45,7 @@ public class ImportTestsFromHistoryAction extends AbstractImportTestsAction { return TestHistoryConfiguration.getInstance(project).getIcon(name); } + @NotNull private static String getPresentableText(Project project, String name) { String nameWithoutExtension = FileUtil.getNameWithoutExtension(name); final int lastIndexOf = nameWithoutExtension.lastIndexOf(" - "); diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/MatchOptions.java b/platform/structuralsearch/source/com/intellij/structuralsearch/MatchOptions.java index f7374756f9f3..bb5c9104c196 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/MatchOptions.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/MatchOptions.java @@ -5,6 +5,7 @@ import com.intellij.lang.Language; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.JDOMExternalizable; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.search.SearchScope; import com.intellij.structuralsearch.impl.matcher.compiler.StringToConstraintsTransformer; import gnu.trove.THashSet; @@ -27,6 +28,7 @@ public class MatchOptions implements JDOMExternalizable { private SearchScope scope; private Scopes.Type scopeType; private String scopeDescriptor; + @NotNull private String pattern; private String myPatternContext; @@ -140,6 +142,7 @@ public class MatchOptions implements JDOMExternalizable { pattern = text; } + @NotNull public String getSearchPattern() { return pattern; } @@ -188,7 +191,7 @@ public class MatchOptions implements JDOMExternalizable { @Override public void readExternal(Element element) { - pattern = element.getAttribute(TEXT_ATTRIBUTE_NAME).getValue(); + pattern = StringUtil.notNullize(element.getAttribute(TEXT_ATTRIBUTE_NAME).getValue()); Attribute attr = element.getAttribute(LOOSE_MATCHING_ATTRIBUTE_NAME); if (attr != null) { diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/MatchVariableConstraint.java b/platform/structuralsearch/source/com/intellij/structuralsearch/MatchVariableConstraint.java index 7a8bf1ed43c0..d4c6f4d12df1 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/MatchVariableConstraint.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/MatchVariableConstraint.java @@ -7,11 +7,13 @@ import org.jdom.Attribute; import org.jdom.DataConversionException; import org.jdom.Element; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; /** * @author Maxim.Mossienko */ public class MatchVariableConstraint extends NamedScriptableDefinition { + @NotNull private String regExp = ""; private boolean invertRegExp; private boolean withinHierarchy; @@ -23,12 +25,16 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { private boolean invertReference; private String referenceConstraint = ""; private boolean partOfSearchResults; + @NotNull private String nameOfExprType = ""; + @NotNull private String expressionTypes = ""; private boolean invertExprType; private boolean exprTypeWithinHierarchy; + @NotNull private String nameOfFormalArgType = ""; + @NotNull private String expectedTypes = ""; private boolean invertFormalType; private boolean formalArgTypeWithinHierarchy; @@ -101,7 +107,8 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { return new MatchVariableConstraint(this); } - static String convertRegExpTypeToTypeString(String regexp) { + @NotNull + static String convertRegExpTypeToTypeString(@NotNull String regexp) { StringBuilder result = new StringBuilder(); for (int i = 0, length = regexp.length(); i < length; i++) { int c = regexp.codePointAt(i); @@ -141,7 +148,8 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { return result.toString(); } - static String convertTypeStringToRegExp(String typeString) { + @NotNull + static String convertTypeStringToRegExp(@NotNull String typeString) { StringBuilder result = new StringBuilder(); for (String type : StringUtil.split(typeString, "|")) { if (result.length() > 0) { @@ -160,11 +168,12 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { this.greedy = greedy; } + @NotNull public String getRegExp() { return regExp; } - public void setRegExp(String regExp) { + public void setRegExp(@NotNull String regExp) { this.regExp = regExp; } @@ -232,11 +241,12 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { this.strictlyWithinHierarchy = strictlyWithinHierarchy; } + @NotNull public String getNameOfExprType() { return Registry.is("ssr.use.regexp.to.specify.type") ? nameOfExprType : expressionTypes; } - public void setNameOfExprType(String nameOfExprType) { + public void setNameOfExprType(@NotNull String nameOfExprType) { if (Registry.is("ssr.use.regexp.to.specify.type")) { this.nameOfExprType = nameOfExprType; this.expressionTypes = convertRegExpTypeToTypeString(nameOfExprType); @@ -271,11 +281,12 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { this.wholeWordsOnly = wholeWordsOnly; } + @NotNull public String getNameOfFormalArgType() { return Registry.is("ssr.use.regexp.to.specify.type") ? nameOfFormalArgType : expectedTypes; } - public void setNameOfFormalArgType(String nameOfFormalArgType) { + public void setNameOfFormalArgType(@NotNull String nameOfFormalArgType) { if (Registry.is("ssr.use.regexp.to.specify.type")) { this.nameOfFormalArgType = nameOfFormalArgType; this.expectedTypes = convertRegExpTypeToTypeString(nameOfFormalArgType); @@ -371,7 +382,7 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { Attribute attribute = element.getAttribute(REGEXP); if (attribute != null) { - regExp = attribute.getValue(); + regExp = StringUtil.notNullize(attribute.getValue()); } withinHierarchy = readBoolean(element, WITHIN_HIERARCHY); invertRegExp = readBoolean(element, NEGATE_NAME_CONDITION); @@ -379,12 +390,12 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { attribute = element.getAttribute(EXPRESSION_TYPES); if (attribute != null) { - expressionTypes = attribute.getValue(); + expressionTypes = StringUtil.notNullize(attribute.getValue()); } attribute = element.getAttribute(NAME_OF_EXPRTYPE); if (attribute != null) { - nameOfExprType = attribute.getValue(); + nameOfExprType = StringUtil.notNullize(attribute.getValue()); if (expressionTypes.isEmpty()) { expressionTypes = convertRegExpTypeToTypeString(nameOfExprType); } @@ -395,12 +406,12 @@ public class MatchVariableConstraint extends NamedScriptableDefinition { attribute = element.getAttribute(EXPECTED_TYPES); if (attribute != null) { - expectedTypes = attribute.getValue(); + expectedTypes = StringUtil.notNullize(attribute.getValue()); } attribute = element.getAttribute(NAME_OF_FORMALTYPE); if (attribute != null) { - nameOfFormalArgType = attribute.getValue(); + nameOfFormalArgType = StringUtil.notNullize(attribute.getValue()); if (expectedTypes.isEmpty()) { expectedTypes = convertRegExpTypeToTypeString(nameOfFormalArgType); } diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/Configuration.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/Configuration.java index d934db095587..4df4e875b861 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/Configuration.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/Configuration.java @@ -45,6 +45,7 @@ public abstract class Configuration implements JDOMExternalizable, Comparable 2) { - final String text = "
" + StringUtil.escapeXml(StringUtil.unquoteString(script)) + "
"; + final String text = "
" + StringUtil.escapeXmlEntities(StringUtil.unquoteString(script)) + "
"; append(buf, SSRBundle.message("script.tooltip.message", text)); } diff --git a/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java b/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java index 6e7922448189..d7425d43c500 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java @@ -277,7 +277,7 @@ public class TestResultsXmlFormatter { StringBuilder output = new StringBuilder(); StringTokenizer t = new StringTokenizer(text.toString(), "\n"); while (t.hasMoreTokens()) { - output.append(StringUtil.escapeXml(t.nextToken())).append("\n"); + output.append(StringUtil.escapeXmlEntities(t.nextToken())).append("\n"); } Map a = new HashMap<>(); diff --git a/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java b/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java index 28e79302733e..18244c88df20 100644 --- a/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java +++ b/platform/usageView/src/com/intellij/usages/impl/SearchForUsagesRunnable.java @@ -364,7 +364,7 @@ class SearchForUsagesRunnable implements Runnable { Alarm findUsagesStartedBalloon = new Alarm(); findUsagesStartedBalloon.addRequest(() -> { notifyByFindBalloon(null, MessageType.WARNING, - Collections.singletonList(StringUtil.escapeXml(UsageViewManagerImpl.getProgressTitle(myPresentation)))); + Collections.singletonList(StringUtil.escapeXmlEntities(UsageViewManagerImpl.getProgressTitle(myPresentation)))); findStartedBalloonShown.set(true); }, 300, ModalityState.NON_MODAL); UsageSearcher usageSearcher = mySearcherFactory.create(); @@ -427,13 +427,12 @@ class SearchForUsagesRunnable implements Runnable { } final String message = UsageViewBundle.message("dialog.no.usages.found.in", - StringUtil.decapitalize(myPresentation.getUsagesString()), + StringUtil.decapitalize(StringUtil.notNullize(myPresentation.getUsagesString())), myPresentation.getScopeText(), - myPresentation.getContextText() - ); + myPresentation.getContextText()); List lines = new ArrayList<>(); - lines.add(StringUtil.escapeXml(message)); + lines.add(StringUtil.escapeXmlEntities(message)); if (myOutOfScopeUsages.get() != 0) { lines.add(UsageViewManagerImpl.outOfScopeMessage(myOutOfScopeUsages.get(), mySearchScopeToWarnOfFallingOutOf)); } diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index 384ed9a18e91..476aa953581c 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -29,7 +29,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; //TeamCity inherits StringUtil: do not add private constructors!!! -@SuppressWarnings({"MethodOverridesStaticMethodOfSuperclass"}) +@SuppressWarnings("MethodOverridesStaticMethodOfSuperclass") public class StringUtil extends StringUtilRt { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.util.text.StringUtil"); @@ -56,20 +56,20 @@ public class StringUtil extends StringUtilRt { myIsSkipStyleTag = isSkipStyleTag; } - public void parse(Reader in) throws IOException { + public void parse(@NotNull Reader in) throws IOException { myBuffer.setLength(0); new ParserDelegator().parse(in, this, Boolean.TRUE); } @Override - public void handleText(char[] text, int pos) { + public void handleText(@NotNull char[] text, int pos) { if (!myIsStyleTagOpened) { myBuffer.append(text); } } @Override - public void handleStartTag(HTML.Tag tag, MutableAttributeSet set, int i) { + public void handleStartTag(@NotNull HTML.Tag tag, MutableAttributeSet set, int i) { if (myIsSkipStyleTag && "style".equals(tag.toString())) { myIsStyleTagOpened = true; } @@ -77,7 +77,7 @@ public class StringUtil extends StringUtilRt { } @Override - public void handleEndTag(HTML.Tag tag, int pos) { + public void handleEndTag(@NotNull HTML.Tag tag, int pos) { if (myIsSkipStyleTag && "style".equals(tag.toString())) { myIsStyleTagOpened = false; } @@ -88,12 +88,13 @@ public class StringUtil extends StringUtilRt { handleTag(tag); } - private void handleTag(HTML.Tag tag) { + private void handleTag(@NotNull HTML.Tag tag) { if (tag.breaksFlow() && myBuffer.length() > 0) { myBuffer.append(SystemProperties.getLineSeparator()); } } + @NotNull public String getText() { return myBuffer.toString(); } @@ -842,8 +843,9 @@ public class StringUtil extends StringUtilRt { return out.toString(); } + @NotNull @Contract(pure = true) - public static String decapitalize(String s) { + public static String decapitalize(@NotNull String s) { return Introspector.decapitalize(s); } @@ -1439,20 +1441,14 @@ public class StringUtil extends StringUtilRt { @NotNull @Contract(pure = true) - public static String[] surround(@NotNull String[] strings, @Nullable String prefix, @Nullable String suffix) { + public static String[] surround(@NotNull String[] strings, @NotNull String prefix, @NotNull String suffix) { String[] result = ArrayUtil.newStringArray(strings.length); for (int i = 0; i < result.length; i++) { - result[i] = surround(strings[i], prefix, suffix); + result[i] = prefix + strings[i] + suffix; } return result; } - @NotNull - public static String surround(@NotNull String string, @Nullable String prefix, @Nullable String suffix) { - if (prefix == null && suffix == null) return string; - return notNullize(prefix) + string + notNullize(suffix); - } - @NotNull @Contract(pure = true) public static String join(@NotNull T[] items, @NotNull Function f, @NotNull String separator) { @@ -1498,10 +1494,11 @@ public class StringUtil extends StringUtilRt { boolean isFirst = true; for (T item : items) { String string = f.fun(item); - if (string != null && string.length() > 0) { + if (!isEmpty(string)) { if (isFirst) { isFirst = false; - } else { + } + else { result.append(separator); } result.append(string); @@ -1548,8 +1545,8 @@ public class StringUtil extends StringUtilRt { @NotNull @Contract(pure = true) - public static String join(@Nullable final String... strings) { - if (strings == null || strings.length == 0) return ""; + public static String join(@NotNull final String... strings) { + if (strings.length == 0) return ""; final StringBuilder builder = new StringBuilder(); for (final String string : strings) { @@ -1607,18 +1604,17 @@ public class StringUtil extends StringUtilRt { @Contract(pure = true) public static String formatDuration(long duration, @NotNull String unitSeparator) { String[] units = TIME_UNITS; - long[] multipliers = TIME_MULTIPLIERS; StringBuilder sb = new StringBuilder(); - long count = duration, remainder; + long count = duration; int i = 1; for (; i < units.length && count > 0; i++) { - long multiplier = multipliers[i]; + long multiplier = TIME_MULTIPLIERS[i]; if (count < multiplier) break; - remainder = count % multiplier; + long remainder = count % multiplier; count /= multiplier; if (remainder != 0 || sb.length() > 0) { - if (units[i - 1].length() > 0) { + if (!units[i - 1].isEmpty()) { sb.insert(0, units[i - 1]); sb.insert(0, unitSeparator); } @@ -1629,7 +1625,7 @@ public class StringUtil extends StringUtilRt { count += remainder / 100; } } - if (units[i - 1].length() > 0) { + if (!units[i - 1].isEmpty()) { sb.insert(0, units[i - 1]); sb.insert(0, unitSeparator); } @@ -2183,23 +2179,51 @@ public class StringUtil extends StringUtilRt { private static final List REPLACES_REFS = Arrays.asList("<", ">", "&", "'", """); private static final List REPLACES_DISP = Arrays.asList("<", ">", "&", "'", "\""); + /** + * @deprecated Use {@link #unescapeXmlEntities(String)} instead + */ @Contract(value = "null -> null; !null -> !null",pure = true) + @Deprecated public static String unescapeXml(@Nullable final String text) { - return text == null ? null : replace(text, REPLACES_REFS, REPLACES_DISP); + return text == null ? null : unescapeXmlEntities(text); } + /** + * @deprecated Use {@link #escapeXmlEntities(String)} instead + */ @Contract(value = "null -> null; !null -> !null",pure = true) + @Deprecated public static String escapeXml(@Nullable final String text) { - return text == null ? null : replace(text, REPLACES_DISP, REPLACES_REFS); + return text == null ? null : escapeXmlEntities(text); } - public static String removeHtmlTags (@Nullable String htmlString) { + /** + * @return {@code text} with some standard XML entities replaced with corresponding characters, e.g. '{@code <}' replaced with '<' + */ + @NotNull + @Contract(pure = true) + public static String unescapeXmlEntities(@NotNull String text) { + return replace(text, REPLACES_REFS, REPLACES_DISP); + } + + /** + * @return {@code text} with some characters replaced with standard XML entities, e.g. '<' replaced with '{@code <}' + */ + @NotNull + @Contract(pure = true) + public static String escapeXmlEntities(@NotNull String text) { + return replace(text, REPLACES_DISP, REPLACES_REFS); + } + + @NotNull + public static String removeHtmlTags(@NotNull String htmlString) { return removeHtmlTags(htmlString, false); } - public static String removeHtmlTags (@Nullable String htmlString, boolean isRemoveStyleTag) { + @NotNull + public static String removeHtmlTags(@NotNull String htmlString, boolean isRemoveStyleTag) { if (isEmpty(htmlString)) { - return htmlString; + return ""; } final MyHtml2Text parser = isRemoveStyleTag ? new MyHtml2Text(true) : html2TextParser; @@ -2215,15 +2239,16 @@ public class StringUtil extends StringUtilRt { private static final List MN_QUOTED = Arrays.asList("&&", "__"); private static final List MN_CHARS = Arrays.asList("&", "_"); - @Contract(value = "null -> null; !null -> !null", pure = true) - public static String escapeMnemonics(@Nullable String text) { - return text == null ? null : replace(text, MN_CHARS, MN_QUOTED); + @NotNull + @Contract(pure = true) + public static String escapeMnemonics(@NotNull String text) { + return replace(text, MN_CHARS, MN_QUOTED); } @NotNull @Contract(pure = true) public static String htmlEmphasize(@NotNull String text) { - return "" + escapeXml(text) + ""; + return "" + escapeXmlEntities(text) + ""; } @@ -2366,11 +2391,11 @@ public class StringUtil extends StringUtilRt { @Contract(pure = true) public static int countChars(@NotNull CharSequence text, char c, int start, int end, boolean stopAtOtherChar) { - int count = 0; boolean forward = start <= end; start = forward ? Math.max(0, start) : Math.min(text.length(), start); end = forward ? Math.min(text.length(), end) : Math.max(0, end); - for (int i = forward ? start : start - 1; forward && i < end || !forward && i >= end; i += forward ? 1 : -1) { + int count = 0; + for (int i = forward ? start : start - 1; forward == i < end; i += forward ? 1 : -1) { if (text.charAt(i) == c) { count++; } @@ -2506,8 +2531,9 @@ public class StringUtil extends StringUtilRt { return escaped.toString(); } + @NotNull @Contract(pure = true) - public static String getQualifiedName(@Nullable String packageName, String className) { + public static String getQualifiedName(@Nullable String packageName, @NotNull String className) { if (packageName == null || packageName.isEmpty()) { return className; } @@ -3141,11 +3167,10 @@ public class StringUtil extends StringUtilRt { * @return true if specified short name is a short name of fully-qualified name */ public static boolean isShortNameOf(@NotNull String fqName, @NotNull String shortName) { - final char separator = '.'; if (fqName.length() < shortName.length()) return false; if (fqName.length() == shortName.length()) return fqName.equals(shortName); int diff = fqName.length() - shortName.length(); - if (fqName.charAt(diff - 1) != separator) return false; + if (fqName.charAt(diff - 1) != '.') return false; return fqName.regionMatches(diff, shortName, 0, shortName.length()); } @@ -3334,8 +3359,8 @@ public class StringUtil extends StringUtilRt { } /** - * @return true if the passed string is not null and not empty - * and contains only latin upper- or lower-case characters and digits; false otherwise. + * @return {@code true} if the passed string is not {@code null} and not empty + * and contains only latin upper- or lower-case characters and digits; {@code false} otherwise. */ @Contract(pure = true) public static boolean isLatinAlphanumeric(@Nullable CharSequence str) { @@ -3344,7 +3369,7 @@ public class StringUtil extends StringUtilRt { } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); - if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || Character.isDigit(c)) { + if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || Character.isDigit(c)) { continue; } return false; diff --git a/platform/util/src/com/intellij/util/ui/UIUtil.java b/platform/util/src/com/intellij/util/ui/UIUtil.java index 6dc34c2fc233..5be2c2f0b6cd 100644 --- a/platform/util/src/com/intellij/util/ui/UIUtil.java +++ b/platform/util/src/com/intellij/util/ui/UIUtil.java @@ -2959,7 +2959,7 @@ public class UIUtil { public static T htmlInjectionGuard(T toRender) { if (toRender instanceof String && ((String)toRender).toLowerCase(Locale.US).startsWith("")) { //noinspection unchecked - return (T) ("" + StringUtil.escapeXml((String)toRender)); + return (T) ("" + StringUtil.escapeXmlEntities((String)toRender)); } return toRender; } diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsConfiguration.java b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsConfiguration.java index 862b722032f3..6d42fe26a41e 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsConfiguration.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsConfiguration.java @@ -100,12 +100,14 @@ public final class VcsConfiguration implements PersistentStateComponent"); return escaped; } - public static JPanel infoPanel(final String header, final String text) { - final JLabel label = new JLabel(XmlStringUtil.wrapInHtml("

" + StringUtil.escapeXml(header) + - "

" + escapeXmlAndAddBr(text))); + public static JPanel infoPanel(@NotNull String header, @NotNull String text) { + final JLabel label = new JLabel(XmlStringUtil.wrapInHtml("

" + StringUtil.escapeXmlEntities(header) + + "

" + escapeXmlAndAddBr(text))); final JPanel wrapper = new JPanel(new GridBagLayout()); wrapper.add(label, new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(1,1,1,1), 0,0)); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java index c6a977587db0..4164a3c95d16 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitChangeListDialog.java @@ -59,7 +59,7 @@ import java.util.List; import java.util.*; import static com.intellij.openapi.diagnostic.Logger.getInstance; -import static com.intellij.openapi.util.text.StringUtil.escapeXml; +import static com.intellij.openapi.util.text.StringUtil.escapeXmlEntities; import static com.intellij.openapi.vcs.VcsBundle.message; import static com.intellij.ui.components.JBBox.createHorizontalBox; import static com.intellij.util.ArrayUtil.isEmpty; @@ -534,7 +534,7 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj String[] messages = updateException.getMessages(); if (!isEmpty(messages)) { String message = "Warning: not all local changes may be shown due to an error: " + messages[0]; - String htmlMessage = buildHtml(getCssFontDeclaration(getLabelFont()), getHtmlBody(escapeXml(message))); + String htmlMessage = buildHtml(getCssFontDeclaration(getLabelFont()), getHtmlBody(escapeXmlEntities(message))); myWarningLabel.setText(htmlMessage); myWarningLabel.setVisible(true); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java index 2ae1718f8ddf..9d57d8f0e78e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java @@ -278,7 +278,7 @@ public class VcsDirectoryConfigurationPanel extends JPanel implements Configurab public VcsDirectoryConfigurationPanel(final Project project) { myProject = project; myVcsConfiguration = getInstance(myProject); - myProjectMessage = XmlStringUtil.wrapInHtml(StringUtil.escapeXml(VcsDirectoryMapping.PROJECT_CONSTANT) + " - " + + myProjectMessage = XmlStringUtil.wrapInHtml(StringUtil.escapeXmlEntities(VcsDirectoryMapping.PROJECT_CONSTANT) + " - " + DefaultVcsRootPolicy.getInstance(myProject).getProjectConfigurationMessage(myProject) .replace('\n', ' ')); myIsDisabled = myProject.isDefault(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java index 905f5f816087..33b09fa038e0 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java @@ -31,7 +31,7 @@ import java.util.List; import java.util.Set; import static com.intellij.openapi.util.io.FileUtil.toSystemDependentName; -import static com.intellij.openapi.util.text.StringUtil.escapeXml; +import static com.intellij.openapi.util.text.StringUtil.escapeXmlEntities; import static com.intellij.openapi.util.text.StringUtil.pluralize; import static com.intellij.openapi.vcs.VcsDirectoryMapping.PROJECT_CONSTANT; import static com.intellij.openapi.vcs.VcsRootError.Type.UNREGISTERED_ROOT; @@ -57,7 +57,7 @@ public class VcsRootProblemNotifier { @NotNull private final Object NOTIFICATION_LOCK = new Object(); @NotNull private final Function ROOT_TO_PRESENTABLE = rootError -> { - if (rootError.getMapping().equals(PROJECT_CONSTANT)) return escapeXml(rootError.getMapping()); + if (rootError.getMapping().equals(PROJECT_CONSTANT)) return escapeXmlEntities(rootError.getMapping()); return getPresentableMapping(rootError.getMapping()); }; @@ -301,6 +301,6 @@ public class VcsRootProblemNotifier { if (relativePath == null) { relativePath = FileUtil.getLocationRelativeToUserHome(toSystemDependentName(mapping)); } - return StringUtil.shortenPathWithEllipsis(escapeXml(relativePath), 30, true); + return StringUtil.shortenPathWithEllipsis(escapeXmlEntities(relativePath), 30, true); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java index 860fb337c5b2..7363749a19d7 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java @@ -344,11 +344,11 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { StringBuilder message = new StringBuilder(XDebuggerBundle.message("message.confirm.breakpoint.removal.message")); if (!isEmptyExpression(breakpoint.getConditionExpression())) { message.append(XDebuggerBundle.message("message.confirm.breakpoint.removal.message.condition", - StringUtil.escapeXml(breakpoint.getConditionExpression().getExpression()))); + StringUtil.escapeXmlEntities(breakpoint.getConditionExpression().getExpression()))); } if (!isEmptyExpression(breakpoint.getLogExpressionObject())) { message.append(XDebuggerBundle.message("message.confirm.breakpoint.removal.message.log", - StringUtil.escapeXml(breakpoint.getLogExpressionObject().getExpression()))); + StringUtil.escapeXmlEntities(breakpoint.getLogExpressionObject().getExpression()))); } if (Messages.showOkCancelDialog(message.toString(), XDebuggerBundle.message("message.confirm.breakpoint.removal.title"), diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java index 3c938fb02692..5d3b7610e9de 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/HtmlTagCanBeJavadocTagInspection.java @@ -112,7 +112,7 @@ public class HtmlTagCanBeJavadocTagInspection extends BaseInspection { out.append(' '); } final String s = text.substring(startOffset, endOffset); - out.append(StringUtil.unescapeXml(s)); + out.append(StringUtil.unescapeXmlEntities(s)); } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ReplaceAssertEqualsFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ReplaceAssertEqualsFix.java index 8bcddb6e278e..e003999c9457 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ReplaceAssertEqualsFix.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/junit/ReplaceAssertEqualsFix.java @@ -8,7 +8,6 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; -import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.InspectionGadgetsFix; import com.siyeh.ig.PsiReplacementUtil; import com.siyeh.ig.psiutils.CommentTracker; @@ -16,9 +15,10 @@ import com.siyeh.ig.psiutils.ImportUtils; import org.jetbrains.annotations.NotNull; class ReplaceAssertEqualsFix extends InspectionGadgetsFix { + @NotNull private final String myMethodName; - ReplaceAssertEqualsFix(String methodName) { + ReplaceAssertEqualsFix(@NotNull String methodName) { myMethodName = methodName; } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertHint.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertHint.java index ef7ea2647270..cf274f0f4bbe 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertHint.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/testFrameworks/AssertHint.java @@ -201,8 +201,8 @@ public class AssertHint { final String comparedTypeText = type1.getPresentableText(); final String comparisonTypeText = type2.getPresentableText(); return InspectionGadgetsBundle.message("assertequals.between.inconvertible.types.problem.descriptor", - StringUtil.escapeXml(comparedTypeText), - StringUtil.escapeXml(comparisonTypeText)); + StringUtil.escapeXmlEntities(comparedTypeText), + StringUtil.escapeXmlEntities(comparisonTypeText)); } public static class JUnitCommonAssertNames { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/ui/ExternalizableStringSet.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/ui/ExternalizableStringSet.java index f03003f2c5d3..d404dd53df0b 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/ui/ExternalizableStringSet.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/ui/ExternalizableStringSet.java @@ -72,7 +72,8 @@ public class ExternalizableStringSet extends OrderedSet clear(); // remove default values dataFound = true; } - add(StringUtil.unescapeXml(item.getAttributeValue(VALUE))); + String value = item.getAttributeValue(VALUE); + add(value == null ? null : StringUtil.unescapeXmlEntities(value)); } } @@ -85,7 +86,7 @@ public class ExternalizableStringSet extends OrderedSet for (String value : this) { if (value != null) { final Element item = new Element(ITEM); - item.setAttribute(VALUE, StringUtil.escapeXml(value)); + item.setAttribute(VALUE, StringUtil.escapeXmlEntities(value)); element.addContent(item); } } diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java index 2e0167df9d69..3705190d00fe 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectLanguageAction.java @@ -170,7 +170,7 @@ public class InjectLanguageAction implements IntentionAction, LowPriorityAction } if (TemporaryPlacesRegistry.getInstance(project).getLanguageInjectionSupport().addInjectionInPlace(language, host)) { Processor fixer = host.getUserData(FIX_KEY); - String text = StringUtil.escapeXml(language.getDisplayName()) + " was temporarily injected."; + String text = StringUtil.escapeXmlEntities(language.getDisplayName()) + " was temporarily injected."; if (fixer != null) { SmartPsiElementPointer pointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(host); diff --git a/plugins/coverage-common/src/com/intellij/coverage/CoverageExecutor.java b/plugins/coverage-common/src/com/intellij/coverage/CoverageExecutor.java index 6712b58b11ba..d6781ab417af 100644 --- a/plugins/coverage-common/src/com/intellij/coverage/CoverageExecutor.java +++ b/plugins/coverage-common/src/com/intellij/coverage/CoverageExecutor.java @@ -18,8 +18,9 @@ public class CoverageExecutor extends Executor { return "Run with Co_verage"; } + @NotNull @Override - public String getStartActionText(String configurationName) { + public String getStartActionText(@NotNull String configurationName) { final String name = configurationName != null ? escapeMnemonicsInConfigurationName(shortenNameIfNeed(configurationName)) : null; return "Run" + (StringUtil.isEmpty(name) ? "" : " '" + name + "'") + " with Co_verage"; } diff --git a/plugins/devkit/devkit-core/src/actions/NewActionAction.java b/plugins/devkit/devkit-core/src/actions/NewActionAction.java index 043867034525..53866848795a 100644 --- a/plugins/devkit/devkit-core/src/actions/NewActionAction.java +++ b/plugins/devkit/devkit-core/src/actions/NewActionAction.java @@ -96,7 +96,7 @@ public class NewActionAction extends CreateElementActionBase implements Descript @NotNull @Override - protected PsiElement[] create(String newName, PsiDirectory directory) throws Exception { + protected PsiElement[] create(@NotNull String newName, PsiDirectory directory) throws Exception { PsiClass createdClass = DevkitActionsUtil.createSingleClass(newName, "Action.java", directory); DescriptorUtil.patchPluginXml(this, createdClass, pluginDescriptorToPatch); return new PsiElement[]{createdClass}; diff --git a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java index 560189729321..58c6f30e599c 100644 --- a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java +++ b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java @@ -685,7 +685,7 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection"; + String name = StringUtil.notNullize(DomUtil.hasXml(withElement.getAttribute()) + ? withElement.getAttribute().getStringValue() + : "<" + withElement.getTag().getStringValue() + ">"); StringBuilder classLinkSb = new StringBuilder(); generateClassLink(classLinkSb, withElement.getImplements().getValue()); diff --git a/plugins/devkit/devkit-core/src/util/ActionType.java b/plugins/devkit/devkit-core/src/util/ActionType.java index c56fcf93c506..a4cc95415a99 100644 --- a/plugins/devkit/devkit-core/src/util/ActionType.java +++ b/plugins/devkit/devkit-core/src/util/ActionType.java @@ -88,10 +88,10 @@ public enum ActionType { XmlTag actionTag = (XmlTag)actions.add(actions.createChildTag(myName, actions.getNamespace(), null, false)); actionTag.setAttribute("id", dialog.getActionId()); actionTag.setAttribute("class", klass.getQualifiedName()); - actionTag.setAttribute("text", StringUtil.escapeXml(dialog.getActionText())); + actionTag.setAttribute("text", StringUtil.escapeXmlEntities(dialog.getActionText())); String description = dialog.getActionDescription(); if (description != null && description.length() > 0) { - actionTag.setAttribute("description", StringUtil.escapeXml(description)); + actionTag.setAttribute("description", StringUtil.escapeXmlEntities(description)); } String groupId = dialog.getSelectedGroupId(); diff --git a/plugins/git4idea/src/git4idea/GitApplyChangesProcess.kt b/plugins/git4idea/src/git4idea/GitApplyChangesProcess.kt index 4e92bf121e34..c571e2a78a61 100644 --- a/plugins/git4idea/src/git4idea/GitApplyChangesProcess.kt +++ b/plugins/git4idea/src/git4idea/GitApplyChangesProcess.kt @@ -351,7 +351,7 @@ class GitApplyChangesProcess(private val project: Project, } private fun commitDetails(commit: VcsFullCommitDetails): String { - return commit.id.toShortString() + " " + StringUtil.escapeXml(commit.subject) + return commit.id.toShortString() + " " + StringUtil.escapeXmlEntities(commit.subject) } private fun toString(commitsInRoots: Map>): String { diff --git a/plugins/git4idea/src/git4idea/actions/GitInit.java b/plugins/git4idea/src/git4idea/actions/GitInit.java index 9c4fd4e2c886..6575b819140a 100644 --- a/plugins/git4idea/src/git4idea/actions/GitInit.java +++ b/plugins/git4idea/src/git4idea/actions/GitInit.java @@ -50,7 +50,7 @@ public class GitInit extends DumbAwareAction { FileChooser.chooseFile(fcd, project, baseDir, root -> { if (GitUtil.isUnderGit(root) && Messages.showYesNoDialog(project, GitBundle.message("init.warning.already.under.git", - StringUtil.escapeXml(root.getPresentableUrl())), + StringUtil.escapeXmlEntities(root.getPresentableUrl())), GitBundle.getString("init.warning.title"), Messages.getWarningIcon()) != Messages.YES) { return; diff --git a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java index d58a1cb24b9d..bbd76f5f1856 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java +++ b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java @@ -87,7 +87,7 @@ import java.util.*; import java.util.concurrent.ExecutionException; import static com.intellij.dvcs.DvcsUtil.getShortRepositoryName; -import static com.intellij.openapi.util.text.StringUtil.escapeXml; +import static com.intellij.openapi.util.text.StringUtil.escapeXmlEntities; import static com.intellij.openapi.vcs.changes.ChangesUtil.*; import static com.intellij.util.ObjectUtils.assertNotNull; import static com.intellij.util.containers.ContainerUtil.*; @@ -1202,7 +1202,7 @@ public class GitCheckinEnvironment implements CheckinEnvironment { @NotNull private String getToolTip(@NotNull Project project, @NotNull CheckinProjectPanel panel) { VcsUser user = getFirstItem(mapNotNull(panel.getRoots(), it -> GitUserRegistry.getInstance(project).getUser(it))); - String signature = user != null ? escapeXml(VcsUserUtil.toExactString(user)) : ""; + String signature = user != null ? escapeXmlEntities(VcsUserUtil.toExactString(user)) : ""; return "Adds the following line at the end of the commit message:
" + "Signed-off by: " + signature + ""; } diff --git a/plugins/git4idea/src/git4idea/reset/GitNewResetDialog.java b/plugins/git4idea/src/git4idea/reset/GitNewResetDialog.java index 25a634b73cde..4c66ccbd79d5 100644 --- a/plugins/git4idea/src/git4idea/reset/GitNewResetDialog.java +++ b/plugins/git4idea/src/git4idea/reset/GitNewResetDialog.java @@ -118,7 +118,7 @@ public class GitNewResetDialog extends DialogWrapper { @NotNull private static String getTargetText(@NotNull VcsFullCommitDetails commit) { - String commitMessage = StringUtil.escapeXml(StringUtil.shortenTextWithEllipsis(commit.getSubject(), 20, 0)); + String commitMessage = StringUtil.escapeXmlEntities(StringUtil.shortenTextWithEllipsis(commit.getSubject(), 20, 0)); return String.format("%s \"%s\" by %s", commit.getId().toShortString(), commitMessage, VcsUserUtil.getShortPresentation(commit.getAuthor())); } diff --git a/plugins/git4idea/src/git4idea/ui/StashInfo.java b/plugins/git4idea/src/git4idea/ui/StashInfo.java index 4628b647c463..98eb5762a13e 100644 --- a/plugins/git4idea/src/git4idea/ui/StashInfo.java +++ b/plugins/git4idea/src/git4idea/ui/StashInfo.java @@ -17,22 +17,24 @@ package git4idea.ui; import com.intellij.openapi.util.text.StringUtil; import git4idea.i18n.GitBundle; +import org.jetbrains.annotations.NotNull; /** * Information about one stash. */ public class StashInfo { + @NotNull private final String myStash; // stash codename (stash@{1}) private final String myBranch; private final String myMessage; private final String myText; // The formatted text representation - public StashInfo(final String stash, final String branch, final String message) { + public StashInfo(@NotNull String stash, final String branch, final String message) { myStash = stash; myBranch = branch; myMessage = message; myText = - GitBundle.message("unstash.stashes.item", StringUtil.escapeXml(stash), StringUtil.escapeXml(branch), StringUtil.escapeXml(message)); + GitBundle.message("unstash.stashes.item", StringUtil.escapeXmlEntities(stash), StringUtil.escapeXmlEntities(branch), StringUtil.escapeXmlEntities(message)); } @Override @@ -40,6 +42,7 @@ public class StashInfo { return myText; } + @NotNull public String getStash() { return myStash; } diff --git a/plugins/git4idea/src/git4idea/util/StringScanner.java b/plugins/git4idea/src/git4idea/util/StringScanner.java index 699d9db3b8f4..ae7f0a91fa21 100644 --- a/plugins/git4idea/src/git4idea/util/StringScanner.java +++ b/plugins/git4idea/src/git4idea/util/StringScanner.java @@ -103,6 +103,7 @@ public class StringScanner { * @param boundaryChar a boundary character * @return a token */ + @NotNull public String boundedToken(final char boundaryChar) { return boundedToken(boundaryChar, false); } @@ -115,6 +116,7 @@ public class StringScanner { * @param ignoreEol if true, the end of line is considered as normal character and consumed * @return a token */ + @NotNull public String boundedToken(char boundaryChar, boolean ignoreEol) { int start = myPosition; for (; myPosition < myText.length(); myPosition++) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyActionBase.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyActionBase.java index 4cb9638827a9..bc82ddba8a40 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyActionBase.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyActionBase.java @@ -66,7 +66,7 @@ public abstract class NewGroovyActionBase extends CreateElementActionBase { @Override @NotNull - protected PsiElement[] create(String newName, PsiDirectory directory) throws Exception { + protected PsiElement[] create(@NotNull String newName, PsiDirectory directory) throws Exception { return doCreate(newName, directory); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java index 786aa7c54222..940534041072 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/NewGroovyClassAction.java @@ -97,7 +97,7 @@ public class NewGroovyClassAction extends JavaCreateTemplateInPackageAction" : type.getPresentableText()); + return StringUtil.escapeXmlEntities(type == null ? "" : type.getPresentableText()); } @NotNull diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java index d864959ce4c6..71b062d0467b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java @@ -354,7 +354,7 @@ public class GroovyPositionManager implements PositionManager { return StringUtil.getQualifiedName(packageName, fileName); } - @Nullable + @NotNull private static String getRuntimeScriptName(@NotNull GroovyFile groovyFile) { if (groovyFile.isScript()) { for (ScriptPositionManagerHelper helper : ScriptPositionManagerHelper.EP_NAME.getExtensions()) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceObjectClassDescriptor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceObjectClassDescriptor.java index 0f0759ba0dfc..7e161004bdae 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceObjectClassDescriptor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceObjectClassDescriptor.java @@ -23,7 +23,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMe import org.jetbrains.plugins.groovy.refactoring.changeSignature.GrParameterInfo; public class GroovyIntroduceObjectClassDescriptor extends IntroduceParameterObjectClassDescriptor { - public GroovyIntroduceObjectClassDescriptor(String className, + public GroovyIntroduceObjectClassDescriptor(@NotNull String className, String packageName, boolean useExistingClass, boolean createInnerClass, diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyFileHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyFileHandler.java index a1b5edf944e9..49a9e45588e7 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyFileHandler.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyFileHandler.java @@ -58,7 +58,8 @@ public class MoveGroovyFileHandler extends MoveFileHandler { final String qualifiedName = newParentPackage == null ? "" : newParentPackage.getQualifiedName(); for (PsiClass aClass : ((GroovyFile)psiFile).getClasses()) { Collections.addAll(result, MoveClassesOrPackagesUtil - .findUsages(aClass, searchInComments, searchInNonJavaFiles, StringUtil.getQualifiedName(qualifiedName, aClass.getName()))); + .findUsages(aClass, searchInComments, searchInNonJavaFiles, StringUtil.getQualifiedName(qualifiedName, + StringUtil.notNullize(aClass.getName())))); } return result.isEmpty() ? null : result; } diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyTagDescriptor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyTagDescriptor.java index 6278c54f4057..966a8967ad5a 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyTagDescriptor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/descriptors/JavaFxPropertyTagDescriptor.java @@ -183,7 +183,7 @@ public class JavaFxPropertyTagDescriptor implements XmlElementDescriptor { @Override public String getName() { if (myPsiClass != null && myStatic) { - return StringUtil.getQualifiedName(myPsiClass.getName(), myName); + return StringUtil.getQualifiedName(myPsiClass.getName(), StringUtil.notNullize(myName)); } return myName; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPomXmlDocumentationProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPomXmlDocumentationProvider.java index f6e6f8a21563..a1e73cc90aee 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPomXmlDocumentationProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenPomXmlDocumentationProvider.java @@ -34,7 +34,7 @@ public class MavenPomXmlDocumentationProvider implements DocumentationProvider { @Override protected String generateDoc(String str, String name, String typeName, String version) { if (str != null) { - str = StringUtil.unescapeXml(str); + str = StringUtil.unescapeXmlEntities(str); } return super.generateDoc(str, name, typeName, version); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java index aefee718bb5a..88464db9eff9 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/annotator/MavenDomGutterAnnotator.java @@ -217,7 +217,7 @@ public class MavenDomGutterAnnotator implements Annotator { res.append(""); - return StringUtil.escapeXml(res.toString()).replace(" ", " "); + return StringUtil.escapeXmlEntities(res.toString()).replace(" ", " "); } private static class MyListCellRenderer extends PsiElementListCellRenderer { diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesDocumentationProvider.java b/plugins/properties/src/com/intellij/lang/properties/PropertiesDocumentationProvider.java index 73ad268a739e..0200ab49252e 100644 --- a/plugins/properties/src/com/intellij/lang/properties/PropertiesDocumentationProvider.java +++ b/plugins/properties/src/com/intellij/lang/properties/PropertiesDocumentationProvider.java @@ -54,7 +54,7 @@ public class PropertiesDocumentationProvider extends AbstractDocumentationProvid if (raw == null) { return "empty"; } - return StringUtil.escapeXml(raw); + return StringUtil.escapeXmlEntities(raw); } @Override diff --git a/plugins/properties/src/com/intellij/lang/properties/create/CreateResourceBundleAction.java b/plugins/properties/src/com/intellij/lang/properties/create/CreateResourceBundleAction.java index 37aa166855ac..bf0bcbce0486 100644 --- a/plugins/properties/src/com/intellij/lang/properties/create/CreateResourceBundleAction.java +++ b/plugins/properties/src/com/intellij/lang/properties/create/CreateResourceBundleAction.java @@ -35,7 +35,7 @@ public class CreateResourceBundleAction extends CreateElementActionBase { @NotNull @Override - protected PsiElement[] create(String newName, PsiDirectory directory) throws Exception { + protected PsiElement[] create(@NotNull String newName, PsiDirectory directory) throws Exception { return PsiElement.EMPTY_ARRAY; } diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java index c6b40ed7635f..f2383663cf77 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java @@ -14,6 +14,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiPackage; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.serialization.PathMacroUtil; @@ -68,6 +69,7 @@ public class TestData implements Cloneable return GROUP_NAME == null ? "" : GROUP_NAME; } + @NotNull public String getMethodName() { return METHOD_NAME == null ? "" : METHOD_NAME; } diff --git a/plugins/ui-designer-core/src/com/intellij/designer/model/VariationPaletteItem.java b/plugins/ui-designer-core/src/com/intellij/designer/model/VariationPaletteItem.java index 782fd8589b6b..bdd8c82e3224 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/model/VariationPaletteItem.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/model/VariationPaletteItem.java @@ -4,6 +4,7 @@ import com.intellij.designer.palette.PaletteItem; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; import org.jdom.Element; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -14,6 +15,7 @@ import javax.swing.*; */ public class VariationPaletteItem implements PaletteItem { private final PaletteItem myDefaultItem; + @NotNull private final String myTitle; private final String myIconPath; private final String myTooltip; @@ -52,6 +54,7 @@ public class VariationPaletteItem implements PaletteItem { } } + @NotNull @Override public String getTitle() { return myTitle; diff --git a/plugins/ui-designer-core/src/com/intellij/designer/palette/DefaultPaletteItem.java b/plugins/ui-designer-core/src/com/intellij/designer/palette/DefaultPaletteItem.java index 0824f5a4ac80..dc7f01e4213d 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/palette/DefaultPaletteItem.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/palette/DefaultPaletteItem.java @@ -18,6 +18,7 @@ package com.intellij.designer.palette; import com.intellij.designer.model.MetaModel; import com.intellij.openapi.util.IconLoader; import org.jdom.Element; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -26,6 +27,7 @@ import javax.swing.*; * @author Alexander Lobas */ public class DefaultPaletteItem implements PaletteItem { + @NotNull private final String myTitle; protected final String myIconPath; protected Icon myIcon; @@ -46,7 +48,7 @@ public class DefaultPaletteItem implements PaletteItem { palette.getAttributeValue("deprecatedHint")); } - public DefaultPaletteItem(String title, + public DefaultPaletteItem(@NotNull String title, String iconPath, String tooltip, String version, @@ -60,6 +62,7 @@ public class DefaultPaletteItem implements PaletteItem { myDeprecatedHint = deprecatedHint; } + @NotNull @Override public String getTitle() { return myTitle; diff --git a/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItem.java b/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItem.java index 54347f5d7f48..cf1a58c6cf35 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItem.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItem.java @@ -16,6 +16,7 @@ package com.intellij.designer.palette; import com.intellij.designer.model.MetaModel; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -24,6 +25,7 @@ import javax.swing.*; * @author Alexander Lobas */ public interface PaletteItem { + @NotNull String getTitle(); Icon getIcon(); diff --git a/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItemsComponent.java b/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItemsComponent.java index 544c7f3f7e3a..def0756fa24f 100644 --- a/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItemsComponent.java +++ b/plugins/ui-designer-core/src/com/intellij/designer/palette/PaletteItemsComponent.java @@ -94,7 +94,7 @@ public class PaletteItemsComponent extends JBList { } tooltip = "
" + - StringUtil.escapeXml(title) + + StringUtil.escapeXmlEntities(title) + "" + version + "

" + diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateDialogAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateDialogAction.java index 97215b3ded2c..d05dcb11f87b 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateDialogAction.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateDialogAction.java @@ -173,7 +173,7 @@ public final class CreateDialogAction extends AbstractCreateFormAction { @Override @NotNull - protected PsiElement[] create(final String newName, final PsiDirectory directory) throws IncorrectOperationException { + protected PsiElement[] create(@NotNull final String newName, final PsiDirectory directory) throws IncorrectOperationException { PsiFile sourceFile = PsiFileFactory.getInstance(directory.getProject()) .createFileFromText(newName + ".java", createClassBody(newName, myRecentGenerateOK, myRecentGenerateCancel, myRecentGenerateMain)); sourceFile = (PsiFile)directory.add(sourceFile); diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateFormAction.java b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateFormAction.java index 842a6a827ef6..b9d3a424150a 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateFormAction.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/actions/CreateFormAction.java @@ -49,7 +49,7 @@ public class CreateFormAction extends AbstractCreateFormAction { @Override @NotNull - protected PsiElement[] create(String newName, PsiDirectory directory) throws Exception { + protected PsiElement[] create(@NotNull String newName, PsiDirectory directory) throws Exception { PsiElement createdFile; PsiClass newClass = null; try { diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCreateFileAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCreateFileAction.java index a5b2be20174f..dbb4ea26ff52 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCreateFileAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCreateFileAction.java @@ -20,6 +20,7 @@ import com.intellij.ide.actions.CreateFileFromTemplateDialog; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; +import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ipnb.IpnbFileType; public class IpnbCreateFileAction extends CreateFileFromTemplateAction implements DumbAware { @@ -35,7 +36,7 @@ public class IpnbCreateFileAction extends CreateFileFromTemplateAction implement } @Override - protected String getActionName(PsiDirectory directory, String newName, String templateName) { + protected String getActionName(PsiDirectory directory, @NotNull String newName, String templateName) { return "Create Jupyter Notebook " + newName; } } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java index 80fc50998c15..efaa2b49a075 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java @@ -426,7 +426,7 @@ public class IpnbParser { Integer prompt = execution_count != null ? execution_count : prompt_number; final IpnbOutputCell outputCell; if (png != null || (data != null && data.png != null)) { - outputCell = new IpnbPngOutputCell(png == null ? StringUtil.join(data.png) : png, text, prompt, metadata); + outputCell = new IpnbPngOutputCell(png == null ? data.png : png, text, prompt, metadata); } else if (jpeg != null || (data != null && data.jpeg != null)) { outputCell = new IpnbJpegOutputCell(jpeg == null ? StringUtil.join(data.jpeg, "") : jpeg, text, prompt, metadata); diff --git a/python/pluginJava/com/jetbrains/python/psi/impl/PyConstructorArgumentCompletionContributor.java b/python/pluginJava/com/jetbrains/python/psi/impl/PyConstructorArgumentCompletionContributor.java index 5b3ebdd93384..db1a07e11783 100644 --- a/python/pluginJava/com/jetbrains/python/psi/impl/PyConstructorArgumentCompletionContributor.java +++ b/python/pluginJava/com/jetbrains/python/psi/impl/PyConstructorArgumentCompletionContributor.java @@ -73,7 +73,7 @@ public class PyConstructorArgumentCompletionContributor extends CompletionContri if (type instanceof PsiClassType) { final PsiClass parameterClass = ((PsiClassType)type).resolve(); if (parameterClass != null) { - result.addElement(PyUtil.createNamedParameterLookup(StringUtil.decapitalize(parameterClass.getName()), origin)); + result.addElement(PyUtil.createNamedParameterLookup(StringUtil.decapitalize(StringUtil.notNullize(parameterClass.getName())), origin)); for (PsiMethod parameterMethod : parameterClass.getMethods()) { result.addElement(PyUtil.createNamedParameterLookup(parameterMethod.getName(), origin)); } diff --git a/python/src/com/jetbrains/python/actions/CreatePythonFileAction.java b/python/src/com/jetbrains/python/actions/CreatePythonFileAction.java index d458bbcd5490..910d9686371a 100644 --- a/python/src/com/jetbrains/python/actions/CreatePythonFileAction.java +++ b/python/src/com/jetbrains/python/actions/CreatePythonFileAction.java @@ -8,6 +8,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; import com.jetbrains.python.PythonFileType; import com.jetbrains.python.pyi.PyiFileType; +import org.jetbrains.annotations.NotNull; /** * @author yole @@ -27,7 +28,7 @@ public class CreatePythonFileAction extends CreateFileFromTemplateAction impleme } @Override - protected String getActionName(PsiDirectory directory, String newName, String templateName) { + protected String getActionName(PsiDirectory directory, @NotNull String newName, String templateName) { return "Create Python script " + newName; } } diff --git a/python/src/com/jetbrains/python/documentation/DocumentationBuilderKit.java b/python/src/com/jetbrains/python/documentation/DocumentationBuilderKit.java index 23969a77e5b2..931f23d03dee 100644 --- a/python/src/com/jetbrains/python/documentation/DocumentationBuilderKit.java +++ b/python/src/com/jetbrains/python/documentation/DocumentationBuilderKit.java @@ -23,7 +23,7 @@ class DocumentationBuilderKit { public final static @NonNls String BR = "
"; @NotNull - static final Function ESCAPE_ONLY = StringUtil::escapeXml; + static final Function ESCAPE_ONLY = StringUtil::escapeXmlEntities; @NotNull static final Function TO_ONE_LINE_AND_ESCAPE = s -> ESCAPE_ONLY.apply(s.replace('\n', ' ')); diff --git a/python/src/com/jetbrains/python/documentation/PyDocumentationBuilder.java b/python/src/com/jetbrains/python/documentation/PyDocumentationBuilder.java index 951cd61ca4e9..980521bee31e 100644 --- a/python/src/com/jetbrains/python/documentation/PyDocumentationBuilder.java +++ b/python/src/com/jetbrains/python/documentation/PyDocumentationBuilder.java @@ -177,7 +177,7 @@ public class PyDocumentationBuilder { private void buildFromParameter(@NotNull PyNamedParameter parameter) { final PyFunction func = PsiTreeUtil.getParentOfType(parameter, PyFunction.class, true, PyLambdaExpression.class); - final String link = func != null ? getLinkToFunction(func, true) : StringUtil.escapeXml(PyNames.UNNAMED_ELEMENT); + final String link = func != null ? getLinkToFunction(func, true) : StringUtil.escapeXmlEntities(PyNames.UNNAMED_ELEMENT); if (link != null) { myProlog .addItem("Parameter ") diff --git a/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java b/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java index 802b027ada32..0eb2f1f47021 100644 --- a/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java +++ b/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java @@ -182,7 +182,7 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i @NotNull static ChainIterable describeTarget(@NotNull PyTargetExpression target, @NotNull TypeEvalContext context) { final ChainIterable result = new ChainIterable<>(); - result.addItem(StringUtil.escapeXml(StringUtil.notNullize(target.getName()))); + result.addItem(StringUtil.escapeXmlEntities(StringUtil.notNullize(target.getName()))); result.addItem(": "); describeTypeWithLinks(context.getType(target), context, target, result); // Can return not physical elements such as foo()[0] for assignments like x, _ = foo() @@ -192,10 +192,10 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i final String initializerText = value.getText(); final int index = initializerText.indexOf("\n"); if (index < 0) { - result.addItem(StringUtil.escapeXml(initializerText)); + result.addItem(StringUtil.escapeXmlEntities(initializerText)); } else { - result.addItem(StringUtil.escapeXml(initializerText.substring(0, index))).addItem("..."); + result.addItem(StringUtil.escapeXmlEntities(initializerText.substring(0, index))).addItem("..."); } } return result; @@ -204,7 +204,7 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i @NotNull static ChainIterable describeParameter(@NotNull PyNamedParameter parameter, @NotNull TypeEvalContext context) { final ChainIterable result = new ChainIterable<>(); - result.addItem(StringUtil.escapeXml(StringUtil.notNullize(parameter.getName()))); + result.addItem(StringUtil.escapeXmlEntities(StringUtil.notNullize(parameter.getName()))); result.addItem(": "); describeTypeWithLinks(context.getType(parameter), context, parameter, result); return result; @@ -746,7 +746,7 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i @NotNull private static String escaped(@NotNull String unescaped) { - return StringUtil.escapeXml(unescaped); + return StringUtil.escapeXmlEntities(unescaped); } @NotNull diff --git a/python/src/com/jetbrains/python/documentation/docstrings/EpydocString.java b/python/src/com/jetbrains/python/documentation/docstrings/EpydocString.java index 8d0f013e64a5..8559f6dc1e60 100644 --- a/python/src/com/jetbrains/python/documentation/docstrings/EpydocString.java +++ b/python/src/com/jetbrains/python/documentation/docstrings/EpydocString.java @@ -168,7 +168,7 @@ public class EpydocString extends TagBasedDocString { myResult.append(text); } - protected void appendMarkup(char markupChar, String markupContent) { + protected void appendMarkup(char markupChar, @NotNull String markupContent) { appendWithMarkup(markupContent); } @@ -184,7 +184,7 @@ public class EpydocString extends TagBasedDocString { } @Override - protected void appendMarkup(char markupChar, String markupContent) { + protected void appendMarkup(char markupChar, @NotNull String markupContent) { if (markupChar == 'U') { appendLink(markupContent); return; @@ -200,7 +200,7 @@ public class EpydocString extends TagBasedDocString { appendTagPair(markupContent, "code"); break; default: - myResult.append(StringUtil.escapeXml(markupContent)); + myResult.append(StringUtil.escapeXmlEntities(markupContent)); break; } } @@ -211,13 +211,13 @@ public class EpydocString extends TagBasedDocString { myResult.append(""); } - private void appendLink(String markupContent) { - String linkText = StringUtil.escapeXml(markupContent); + private void appendLink(@NotNull String markupContent) { + String linkText = StringUtil.escapeXmlEntities(markupContent); String linkUrl = linkText; int pos = markupContent.indexOf('<'); if (pos >= 0 && markupContent.endsWith(">")) { - linkText = StringUtil.escapeXml(markupContent.substring(0, pos).trim()); - linkUrl = joinLines(StringUtil.escapeXml(markupContent.substring(pos + 1, markupContent.length() - 1)), false); + linkText = StringUtil.escapeXmlEntities(markupContent.substring(0, pos).trim()); + linkUrl = joinLines(StringUtil.escapeXmlEntities(markupContent.substring(pos + 1, markupContent.length() - 1)), false); } myResult.append("
{ myAllPossibleRootTagNamespaces = allPossibleRootTagNamespaces.length == 0 ? ArrayUtil.EMPTY_STRING_ARRAY : allPossibleRootTagNamespaces; } + @NotNull public String[] getAllPossibleRootTagNamespaces() { return myAllPossibleRootTagNamespaces; } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/DomNameStrategy.java b/xml/dom-openapi/src/com/intellij/util/xml/DomNameStrategy.java index 9f12c192dd57..b92da9e6f77a 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/DomNameStrategy.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/DomNameStrategy.java @@ -15,6 +15,8 @@ */ package com.intellij.util.xml; +import org.jetbrains.annotations.NotNull; + /** * Specifies how method names are converted into XML element names * @@ -28,7 +30,8 @@ public abstract class DomNameStrategy { * @param propertyName property name, i.e. method name without first 'get', 'set' or 'is' * @return XML element name */ - public abstract String convertName(String propertyName); + @NotNull + public abstract String convertName(@NotNull String propertyName); /** * Is used to get presentable DOM elements in UI diff --git a/xml/dom-openapi/src/com/intellij/util/xml/HyphenNameStrategy.java b/xml/dom-openapi/src/com/intellij/util/xml/HyphenNameStrategy.java index dd1c111ecbee..0aff0deb0628 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/HyphenNameStrategy.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/HyphenNameStrategy.java @@ -17,6 +17,7 @@ package com.intellij.util.xml; import com.intellij.psi.codeStyle.NameUtil; import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NotNull; /** * This strategy splits property name into words, decapitalizes them and joins using hyphen as separator, @@ -25,8 +26,9 @@ import com.intellij.openapi.util.text.StringUtil; * @author peter */ public class HyphenNameStrategy extends DomNameStrategy { + @NotNull @Override - public String convertName(String propertyName) { + public String convertName(@NotNull String propertyName) { final String[] words = NameUtil.nameToWords(propertyName); for (int i = 0; i < words.length; i++) { words[i] = StringUtil.decapitalize(words[i]); diff --git a/xml/dom-openapi/src/com/intellij/util/xml/JavaNameStrategy.java b/xml/dom-openapi/src/com/intellij/util/xml/JavaNameStrategy.java index 6125d149685b..98c4088e144e 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/JavaNameStrategy.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/JavaNameStrategy.java @@ -18,6 +18,7 @@ package com.intellij.util.xml; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.codeStyle.NameUtil; import com.intellij.util.Function; +import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -29,8 +30,9 @@ import java.util.Arrays; public class JavaNameStrategy extends DomNameStrategy { public static final Function DECAPITALIZE_FUNCTION = s -> StringUtil.decapitalize(s); + @NotNull @Override - public final String convertName(String propertyName) { + public final String convertName(@NotNull String propertyName) { return StringUtil.decapitalize(propertyName); } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ui/BasicDomElementComponent.java b/xml/dom-openapi/src/com/intellij/util/xml/ui/BasicDomElementComponent.java index 3245ffa2cb3b..7df601cdf39a 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ui/BasicDomElementComponent.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ui/BasicDomElementComponent.java @@ -20,7 +20,6 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Factory; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomFileElement; @@ -116,7 +115,8 @@ public abstract class BasicDomElementComponent extends Abs return null; } - private String convertFieldName(String propertyName, final DomChildrenDescription description) { + @NotNull + private String convertFieldName(@NotNull String propertyName, final DomChildrenDescription description) { propertyName = StringUtil.trimStart(propertyName, "my"); String convertedName = description.getDomNameStrategy(getDomElement()).convertName(propertyName); diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CDataToTextIntention.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CDataToTextIntention.java index 156b249941da..0aed8f1c6bc5 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CDataToTextIntention.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CDataToTextIntention.java @@ -58,7 +58,7 @@ public class CDataToTextIntention implements IntentionAction { StringBuilder text = new StringBuilder(); for (ASTNode astNode : cdatas) { ASTNode textNode = astNode.getFirstChildNode().getTreeNext(); - if (textNode != null && textNode.getElementType() != XmlTokenType.XML_CDATA_END) text.append(StringUtil.escapeXml(textNode.getText())); + if (textNode != null && textNode.getElementType() != XmlTokenType.XML_CDATA_END) text.append(StringUtil.escapeXmlEntities(textNode.getText())); } editor.getDocument().replaceString(cdatas.get(0).getStartOffset(), diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/TextToCDataIntention.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/TextToCDataIntention.java index 13b086680726..4a537a3f53d6 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/TextToCDataIntention.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/TextToCDataIntention.java @@ -61,7 +61,7 @@ public class TextToCDataIntention implements IntentionAction { StringBuilder text = new StringBuilder(); for (PsiElement element : texts) { - text.append(StringUtil.unescapeXml(element.getText())); + text.append(StringUtil.unescapeXmlEntities(element.getText())); } int start = 0; while (true) { diff --git a/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java b/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java index 3a167cf5cd6c..a8bd96bdd6e4 100644 --- a/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java +++ b/xml/impl/src/com/intellij/ide/actions/CreateHtmlFileAction.java @@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; import com.intellij.xml.XmlBundle; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; /** * @author Eugene.Kudelevsky @@ -49,7 +50,7 @@ public class CreateHtmlFileAction extends CreateFileFromTemplateAction implement } @Override - protected String getActionName(PsiDirectory directory, String newName, String templateName) { + protected String getActionName(PsiDirectory directory, @NotNull String newName, String templateName) { return XmlBundle.message("new.html.file.action"); } diff --git a/xml/impl/src/com/intellij/xml/util/documentation/XmlDocumentationProvider.java b/xml/impl/src/com/intellij/xml/util/documentation/XmlDocumentationProvider.java index 66d9880f5cb1..80566d9ba549 100644 --- a/xml/impl/src/com/intellij/xml/util/documentation/XmlDocumentationProvider.java +++ b/xml/impl/src/com/intellij/xml/util/documentation/XmlDocumentationProvider.java @@ -510,7 +510,7 @@ public class XmlDocumentationProvider implements DocumentationProvider { } } - private static String escapeDocumentationTextText(final String result) { - return StringUtil.escapeXml(result).replaceAll("'","'").replaceAll("\n","
\n"); + private static String escapeDocumentationTextText(@NotNull String result) { + return StringUtil.escapeXmlEntities(result).replaceAll("'", "'").replaceAll("\n", "
\n"); } } diff --git a/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java b/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java index 4a0fc2471fb0..a529370fdcbb 100644 --- a/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java +++ b/xml/xml-psi-impl/src/com/intellij/lang/XmlCodeFoldingBuilder.java @@ -240,7 +240,7 @@ public abstract class XmlCodeFoldingBuilder extends CustomFoldingBuilder impleme @Nullable public static String getEntityPlaceholder(@NotNull PsiElement psi) { String text = psi.getText(); - String fastPath = StringUtil.unescapeXml(text); + String fastPath = StringUtil.unescapeXmlEntities(text); if (!StringUtil.equals(fastPath, text)) return fastPath; if (psi.isValid()) { final XmlEntityDecl resolve = XmlEntityRefImpl.resolveEntity((XmlElement)psi, text, psi.getContainingFile()); 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 9ae04de768ea..6ab636e4d87b 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 @@ -1140,12 +1140,14 @@ public class XmlUtil { return (XmlFile)element; } - public static String unescape(String text) { - return StringUtil.unescapeXml(text); + @NotNull + public static String unescape(@NotNull String text) { + return StringUtil.unescapeXmlEntities(text); } - public static String escape(String text) { - return StringUtil.escapeXml(text); + @NotNull + public static String escape(@NotNull String text) { + return StringUtil.escapeXmlEntities(text); } public static boolean isValidTagNameChar(char c) {