diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java b/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java index af2087fcadc6..ffe9eed89af7 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/cache/TypeInfo.java @@ -34,7 +34,6 @@ import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; import com.intellij.psi.tree.IElementType; import com.intellij.util.SmartList; -import com.intellij.util.io.StringRef; import gnu.trove.TObjectIntHashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -210,7 +209,7 @@ public class TypeInfo { boolean hasEllipsis = isSet(flags, HAS_ELLIPSIS); int frequentIndex = FREQUENT_INDEX_MASK & flags; - String text = frequentIndex == 0 ? StringRef.toString(record.readName()) : ourIndexFrequentType[frequentIndex]; + String text = frequentIndex == 0 ? record.readNameString() : ourIndexFrequentType[frequentIndex]; return new TypeInfo(text, arrayCount, hasEllipsis, PsiAnnotationStub.EMPTY_ARRAY); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/FunctionalExpressionElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/FunctionalExpressionElementType.java index 63786b19e237..68551865d553 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/FunctionalExpressionElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/FunctionalExpressionElementType.java @@ -40,7 +40,7 @@ public abstract class FunctionalExpressionElementType deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException { - return new FunctionalExpressionStub<>(parentStub, this, StringRef.toString(dataStream.readName())); + return new FunctionalExpressionStub<>(parentStub, this, dataStream.readNameString()); } @Override diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java index a88ae4d23bfd..fee5f8f593a8 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java @@ -167,16 +167,16 @@ public abstract class JavaClassElementType extends JavaStubElementType targets = StringUtil.split(dataStream.readUTFFast(), "/"); return new PsiPackageAccessibilityStatementStubImpl(parentStub, this, packageName, targets); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaParameterElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaParameterElementType.java index cfb776a2cac8..4357a7f3fddf 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaParameterElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaParameterElementType.java @@ -78,11 +78,11 @@ public class JavaParameterElementType extends JavaStubElementType= 0 ? LanguageLevel.values()[level] : null, compiled); + String packageName = dataStream.readNameString(); + return new PsiJavaFileStubImpl(null, packageName, level >= 0 ? LanguageLevel.values()[level] : null, compiled); } @Override diff --git a/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java b/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java index b351575d015e..d569d441e46f 100644 --- a/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java +++ b/platform/core-api/src/com/intellij/psi/stubs/StubInputStream.java @@ -43,14 +43,16 @@ public class StubInputStream extends DataInputStream { @Nullable public StringRef readName() throws IOException { - return DataInputOutputUtil.readNAME(this, myNameStorage); + return StringRef.fromStream(this, myNameStorage); + } + + @Nullable + public String readNameString() throws IOException { + return StringRef.stringFromStream(this, myNameStorage); } public int readVarInt() throws IOException { return DataInputOutputUtil.readINT(this); } - public String stringFromId(int id) throws IOException { - return myNameStorage.valueOf(id); - } } diff --git a/platform/core-api/src/com/intellij/psi/stubs/StubOutputStream.java b/platform/core-api/src/com/intellij/psi/stubs/StubOutputStream.java index 79fca29c3be6..3657120fdc29 100644 --- a/platform/core-api/src/com/intellij/psi/stubs/StubOutputStream.java +++ b/platform/core-api/src/com/intellij/psi/stubs/StubOutputStream.java @@ -42,14 +42,12 @@ public class StubOutputStream extends DataOutputStream { } public void writeName(@Nullable final String arg) throws IOException { - DataInputOutputUtil.writeNAME(this, arg, myNameStorage); + final int nameId = arg != null ? myNameStorage.enumerate(arg) : 0; + DataInputOutputUtil.writeINT(this, nameId); } public void writeVarInt(final int value) throws IOException { DataInputOutputUtil.writeINT(this, value); } - public int getStringId(final String value) throws IOException { - return myNameStorage.enumerate(value); - } } diff --git a/platform/core-api/src/com/intellij/psi/util/QualifiedName.java b/platform/core-api/src/com/intellij/psi/util/QualifiedName.java index f951ee5b93ab..0119919cd682 100644 --- a/platform/core-api/src/com/intellij/psi/util/QualifiedName.java +++ b/platform/core-api/src/com/intellij/psi/util/QualifiedName.java @@ -18,7 +18,6 @@ package com.intellij.psi.util; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; -import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -158,8 +157,7 @@ public class QualifiedName implements Comparable { else { qName = new QualifiedName(size); for (int i = 0; i < size; i++) { - final StringRef name = dataStream.readName(); - qName.myComponents.add(name == null ? null : name.getString()); + qName.myComponents.add(dataStream.readNameString()); } } return qName; diff --git a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java index d3b4c8f83196..4179b7757205 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java @@ -241,7 +241,6 @@ public class GotoActionAction extends GotoActionBase implements DumbAware { if (aw.isAvailable()) { String id = ActionManager.getInstance().getId(aw.getAction()); KeymapPanel.addKeyboardShortcut(id, ActionShortcutRestrictions.getInstance().getForActionId(id), activeKeymap, component); - popup.repaintListImmediate(); } } } diff --git a/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java b/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java index d302cffefde2..f21b0521f2e5 100644 --- a/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java +++ b/platform/util/src/com/intellij/util/io/DataInputOutputUtil.java @@ -42,16 +42,6 @@ public class DataInputOutputUtil extends DataInputOutputUtilRt { DataInputOutputUtilRt.writeINT(record, val); } - @Nullable - public static StringRef readNAME(@NotNull DataInput record, @NotNull AbstractStringEnumerator nameStore) throws IOException { - return StringRef.fromStream(record, nameStore); - } - - public static void writeNAME(@NotNull DataOutput record, @Nullable String name, @NotNull AbstractStringEnumerator nameStore) throws IOException { - final int nameId = name != null ? nameStore.enumerate(name) : 0; - writeINT(record, nameId); - } - public static long readLONG(@NotNull DataInput record) throws IOException { final int val = record.readUnsignedByte(); if (val < 192) { diff --git a/platform/util/src/com/intellij/util/io/StringRef.java b/platform/util/src/com/intellij/util/io/StringRef.java index 7cbfbecb0dbd..045aa16a2230 100644 --- a/platform/util/src/com/intellij/util/io/StringRef.java +++ b/platform/util/src/com/intellij/util/io/StringRef.java @@ -115,6 +115,12 @@ public class StringRef { return nameId != 0 ? new StringRef(nameId, store) : null; } + @Nullable + public static String stringFromStream(@NotNull DataInput in, @NotNull AbstractStringEnumerator store) throws IOException { + final int nameId = DataInputOutputUtil.readINT(in); + return nameId != 0 ? store.valueOf(nameId) : null; + } + @NotNull public static StringRef[] createArray(int count) { return count == 0 ? EMPTY_ARRAY : new StringRef[count]; diff --git a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestUtil.java b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestUtil.java index 64247073b53d..d6d265665176 100644 --- a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestUtil.java +++ b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestUtil.java @@ -7,7 +7,6 @@ import com.intellij.execution.impl.ConsoleViewImpl; import com.intellij.icons.AllIcons; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadAction; -import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; @@ -31,15 +30,16 @@ import com.intellij.xdebugger.impl.frame.XStackFrameContainerEx; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.concurrency.Promise; import java.awt.*; import java.io.File; import java.io.IOException; import java.util.*; import java.util.List; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import static org.junit.Assert.*; @@ -65,15 +65,13 @@ public class XDebuggerTestUtil { @Nullable public static XLineBreakpoint toggleBreakpoint(Project project, VirtualFile file, int line) { - return new WriteAction() { - @Override - protected void run(@NotNull Result result) { - Promise promise = - ((XDebuggerUtilImpl)XDebuggerUtil.getInstance()).toggleAndReturnLineBreakpoint(project, file, line, false); - - promise.done(result::setResult); - } - }.execute().getResultObject(); + try { + return WriteAction.computeAndWait(() -> ((XDebuggerUtilImpl)XDebuggerUtil.getInstance()) + .toggleAndReturnLineBreakpoint(project, file, line, false)).blockingGet(TIMEOUT_MS); + } + catch (TimeoutException | ExecutionException e) { + return null; + } } public static

XBreakpoint

insertBreakpoint(final Project project, diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java index ec2abc411ca2..1e986f00c3ab 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java @@ -12,7 +12,6 @@ import com.intellij.psi.util.CachedValuesManager; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.io.DataInputOutputUtil; -import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; @@ -42,7 +41,7 @@ public class GrStubUtils { @NotNull public static String[] readStringArray(@NotNull StubInputStream dataStream) throws IOException { - return ArrayUtil.toStringArray(readSeq(dataStream, () -> StringRef.toString(dataStream.readName()))); + return ArrayUtil.toStringArray(readSeq(dataStream, () -> dataStream.readNameString())); } public static void writeNullableString(StubOutputStream dataStream, @Nullable String typeText) throws IOException { diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrNameValuePairElementType.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrNameValuePairElementType.java index 8727dcd20ea8..fe43b17a34b7 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrNameValuePairElementType.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrNameValuePairElementType.java @@ -50,7 +50,7 @@ public class GrNameValuePairElementType extends GrStubElementType filterAccessorMethods(@NotNull List candidates) { - return filter(candidates, it -> !(it.getElement() instanceof GrAccessorMethod)); - } - - @NotNull - public static List collapseReflectedMethodsSimple(@NotNull List candidates) { - if (count(candidates, it -> it.getElement() instanceof GrReflectedMethod) < 2) return candidates; - final Set visited = ContainerUtil.newHashSet(); - return ContainerUtil.mapNotNull(candidates, result -> { - final PsiElement element = result.getElement(); - if (!(element instanceof GrReflectedMethod)) return result; - - final GrMethod baseMethod = ((GrReflectedMethod)element).getBaseMethod(); - if (!visited.add(baseMethod)) return null; - return new ElementGroovyResult<>(baseMethod); - }); - } - @NotNull public static List collapseReflectedMethods(Collection candidates) { Set visited = ContainerUtil.newHashSet(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java index 5b6e73d1de18..fb8bdb4ddaf9 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessorImpl.java @@ -18,11 +18,8 @@ import static org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil.collapseRefl class GroovyResolverProcessorImpl extends GroovyResolverProcessor implements GrMethodComparator.Context { - private final boolean myIsPartOfFqn; - GroovyResolverProcessorImpl(@NotNull final GrReferenceExpression ref, @NotNull EnumSet kinds, boolean forceRValue) { super(ref, kinds, null, forceRValue); - myIsPartOfFqn = ResolveUtil.isPartOfFQN(ref); } @NotNull @@ -45,13 +42,6 @@ class GroovyResolverProcessorImpl extends GroovyResolverProcessor implements GrM return candidates; } - if (myIsPartOfFqn) { - candidates = getCandidates(GroovyResolveKind.PACKAGE, GroovyResolveKind.CLASS); - if (!candidates.isEmpty()) { - return candidates; - } - } - candidates = getCandidates(GroovyResolveKind.PROPERTY); if (!candidates.isEmpty()) { return candidates.size() <= 1 ? candidates : ContainerUtil.newSmartList(candidates.get(0)); diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertyStubElementType.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertyStubElementType.java index 752779787346..7192288ec742 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertyStubElementType.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertyStubElementType.java @@ -30,7 +30,6 @@ import com.intellij.lang.properties.psi.impl.PropertyStubImpl; import com.intellij.psi.impl.source.tree.LightTreeUtil; import com.intellij.psi.stubs.*; import com.intellij.util.CharTable; -import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -60,8 +59,7 @@ public class PropertyStubElementType extends ILightStubElementType { int size = dataStream.readVarInt(); names = new ArrayList<>(size); for (int i = 0; i < size; i++) { - names.add(dataStream.readName().getString()); + names.add(dataStream.readNameString()); } } return names; diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyClassElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyClassElementType.java index 48dcd73167bd..7d7cac3d55a8 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyClassElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyClassElementType.java @@ -20,7 +20,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.stubs.*; import com.intellij.psi.util.QualifiedName; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.io.StringRef; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyClassImpl; @@ -165,7 +164,7 @@ public class PyClassElementType extends PyStubElementType @NotNull public PyClassStub deserialize(@NotNull final StubInputStream dataStream, final StubElement parentStub) throws IOException { - final String name = StringRef.toString(dataStream.readName()); + final String name = dataStream.readNameString(); final int superClassCount = dataStream.readByte(); final Map superClasses = new LinkedHashMap<>(); @@ -178,10 +177,10 @@ public class PyClassElementType extends PyStubElementType final ArrayList baseClassesText = new ArrayList<>(); for (int i = 0; i < baseClassesCount; i++) { final boolean isParametrized = dataStream.readBoolean(); - final StringRef ref = dataStream.readName(); - baseClassesText.add(ref != null ? ref.getString() : null); + String ref = dataStream.readNameString(); + baseClassesText.add(ref); if (ref != null && isParametrized) { - parametrizedBaseClasses.add(ref.getString()); + parametrizedBaseClasses.add(ref); } } diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyDataclassFieldStubImpl.kt b/python/src/com/jetbrains/python/psi/impl/stubs/PyDataclassFieldStubImpl.kt index dd4ec9d7d681..327009ced15a 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyDataclassFieldStubImpl.kt +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyDataclassFieldStubImpl.kt @@ -29,12 +29,12 @@ class PyDataclassFieldStubImpl private constructor(private val calleeName: Quali @Throws(IOException::class) fun deserialize(stream: StubInputStream): PyDataclassFieldStub? { - val calleeName = stream.readName() ?: return null + val calleeName = stream.readNameString() ?: return null val hasDefault = stream.readBoolean() val hasDefaultFactory = stream.readBoolean() val initValue = stream.readBoolean() - return PyDataclassFieldStubImpl(QualifiedName.fromDottedString(calleeName.string), hasDefault, hasDefaultFactory, initValue) + return PyDataclassFieldStubImpl(QualifiedName.fromDottedString(calleeName), hasDefault, hasDefaultFactory, initValue) } private fun calculateFullyQCalleeName(callee: PyReferenceExpression): QualifiedName? { diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java index 576b7e952de0..fd231845daff 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyFunctionElementType.java @@ -91,22 +91,22 @@ public class PyFunctionElementType extends PyStubElementType> fields = deserializeFields(stream, stream.readVarInt()); if (calleeName == null || name == null) { @@ -107,8 +106,8 @@ public class PyNamedTupleStubImpl implements PyNamedTupleStub { } return new PyNamedTupleStubImpl( - QualifiedName.fromDottedString(calleeName.getString()), - name.getString(), + QualifiedName.fromDottedString(calleeName), + name, fields ); } @@ -177,8 +176,8 @@ public class PyNamedTupleStubImpl implements PyNamedTupleStub { final LinkedHashMap> fields = new LinkedHashMap<>(fieldsSize); for (int i = 0; i < fieldsSize; i++) { - final String name = StringRef.toString(stream.readName()); - final String type = StringRef.toString(stream.readName()); + final String name = stream.readNameString(); + final String type = stream.readNameString(); if (name != null) { fields.put(name, Optional.ofNullable(type)); diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java index 8a96bb310a37..93d8e7ca84af 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyTargetExpressionElementType.java @@ -25,7 +25,6 @@ import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.QualifiedName; -import com.intellij.util.io.StringRef; import com.jetbrains.python.PyElementTypes; import com.jetbrains.python.PyNames; import com.jetbrains.python.PythonDialectsTokenSetProvider; @@ -127,19 +126,17 @@ public class PyTargetExpressionElementType extends PyStubElementType implements Custom me.mySetter = readOne(stream); me.myDeleter = readOne(stream); // - StringRef ref = stream.readName(); - me.myDoc = ref != null? ref.getString() : null; + me.myDoc = stream.readNameString(); return me; } @@ -92,10 +90,9 @@ public class PropertyStubStorage extends PropertyBunch implements Custom @Nullable private static Maybe readOne(StubInputStream stream) throws IOException { - StringRef ref = stream.readName(); - if (ref == null) return none; + String s = stream.readNameString(); + if (s == null) return none; else { - String s = ref.getString(); if (IMPOSSIBLE_NAME.equals(s)) return unknown; else return new Maybe<>(s); }