diff --git a/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/NameMapper.kt b/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/NameMapper.kt index 29e0d8efe864..31c4f8e6415a 100644 --- a/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/NameMapper.kt +++ b/platform/script-debugger/debugger-ui/src/com/jetbrains/javascript/debugger/NameMapper.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package com.jetbrains.javascript.debugger import com.google.common.base.CharMatcher import com.intellij.openapi.editor.Document import com.intellij.openapi.util.registry.Registry +import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiElement import com.intellij.psi.PsiNamedElement import gnu.trove.THashMap @@ -26,14 +27,14 @@ import org.jetbrains.debugger.sourcemap.MappingList import org.jetbrains.debugger.sourcemap.SourceMap import org.jetbrains.rpc.LOG - private val S1 = ",()[]{}=" // don't trim trailing .&: - could be part of expression private val OPERATOR_TRIMMER = CharMatcher.INVISIBLE.or(CharMatcher.anyOf(S1)) val NAME_TRIMMER = CharMatcher.INVISIBLE.or(CharMatcher.anyOf(S1 + ".&:")) -open class NameMapper(private val document: Document, private val generatedDocument: Document, private val sourceMappings: MappingList, private val sourceMap: SourceMap) { +// generateVirtualFile only for debug purposes +open class NameMapper(private val document: Document, private val transpiledDocument: Document, private val sourceMappings: MappingList, private val sourceMap: SourceMap, private val transpiledFile: VirtualFile? = null) { var rawNameToSource: MutableMap? = null private set @@ -55,7 +56,12 @@ open class NameMapper(private val document: Document, private val generatedDocum return null } - val generatedName = extractName(getGeneratedName(generatedDocument, sourceMap, sourceEntry)) + if (sourceEntry.generatedLine > document.lineCount) { + LOG.warn("Cannot get generated name: source entry line ${sourceEntry.generatedLine} > ${document.lineCount}. Transpiled File: " + transpiledFile?.path) + return null + } + + val generatedName = extractName(getGeneratedName(transpiledDocument, sourceMap, sourceEntry)) if (generatedName.isEmpty()) { return null } diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 5e7eda0a1f22..20827b259ea1 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -546,6 +546,7 @@ nodejs.debugger.use.jb.support=true js.debugger.name.mappings.by.source.code=false js.debugger.v8.log= js.debugger.wip.log= +js.debugger.member.filter.prefer.vm.source=false js.index.node.submodules=false diff --git a/platform/util/src/com/intellij/util/containers/ContainerUtil.java b/platform/util/src/com/intellij/util/containers/ContainerUtil.java index 4c0a8fd7d828..9ac798932f25 100644 --- a/platform/util/src/com/intellij/util/containers/ContainerUtil.java +++ b/platform/util/src/com/intellij/util/containers/ContainerUtil.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.*; +import com.intellij.util.Function; import gnu.trove.*; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -1212,6 +1213,36 @@ public class ContainerUtil extends ContainerUtilRt { }; } + @NotNull + @Contract(pure=true) + public static Iterable> zip(@NotNull final Iterable iterable1, @NotNull final Iterable iterable2) { + return new Iterable>() { + @Override + public Iterator> iterator() { + return new Iterator>() { + private final Iterator i1 = iterable1.iterator(); + private final Iterator i2 = iterable2.iterator(); + + @Override + public boolean hasNext() { + return i1.hasNext() && i2.hasNext(); + } + + @Override + public Pair next() { + return Pair.create(i1.next(), i2.next()); + } + + @Override + public void remove() { + i1.remove(); + i2.remove(); + } + }; + } + }; + } + public static void swapElements(@NotNull List list, int index1, int index2) { E e1 = list.get(index1); E e2 = list.get(index2); 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 71d3d926b40d..57688b4b5919 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsConfiguration.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsConfiguration.java @@ -166,7 +166,7 @@ public final class VcsConfiguration implements PersistentStateComponent{ } }; - VcsRevisionNumber LOCAL = new VcsRevisionNumber() { - @Override - public String asString() { - return "Local Changes"; - } - - @Override - public int compareTo(@NotNull VcsRevisionNumber vcsRevisionNumber) { - return 0; - } - - @Override - public String toString() { - return asString(); - } - }; - class Int implements VcsRevisionNumber, LongRevisionNumber { private final int myValue; diff --git a/platform/vcs-impl/src/com/intellij/diff/Block.java b/platform/vcs-impl/src/com/intellij/diff/Block.java index 1045f5105679..42c8ab528784 100644 --- a/platform/vcs-impl/src/com/intellij/diff/Block.java +++ b/platform/vcs-impl/src/com/intellij/diff/Block.java @@ -15,7 +15,9 @@ */ package com.intellij.diff; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.text.LineTokenizer; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.diff.Diff; import org.jetbrains.annotations.NotNull; @@ -26,7 +28,9 @@ import java.util.List; * author: lesya */ public class Block { - private final String[] mySource; + private static final Logger LOG = Logger.getInstance(Block.class); + + @NotNull private final String[] mySource; private final int myStart; private final int myEnd; @@ -35,6 +39,10 @@ public class Block { } public Block(@NotNull String[] source, int start, int end) { + if (start < 0 || end > source.length || end < start) { + LOG.error("Invalid block range: [" + start + ", " + end + "); length - " + source.length); + } + mySource = source; myStart = start; myEnd = end; @@ -77,14 +85,7 @@ public class Block { @NotNull public String getBlockContent() { - StringBuilder result = new StringBuilder(); - - for (int i = 0; i < myEnd - myStart; i++) { - if (i != 0) result.append("\n"); - result.append(mySource[i + myStart]); - } - - return result.toString(); + return StringUtil.join(getLines(), "\n"); } @NotNull @@ -112,6 +113,7 @@ public class Block { return myEnd; } + @NotNull public String[] getSource() { return mySource; } @@ -132,7 +134,7 @@ public class Block { return result.toString(); } - private void appendLines(StringBuilder result, int from, int to) { + private void appendLines(@NotNull StringBuilder result, int from, int to) { for (int i = from; i < to; i++) { result.append(mySource[i]); result.append("\n"); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/impl/VcsHistoryDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/impl/VcsHistoryDialog.java index 645b6282dfa4..febe489ad974 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/impl/VcsHistoryDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/impl/VcsHistoryDialog.java @@ -34,7 +34,6 @@ import com.intellij.openapi.ui.FrameWrapper; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.ui.popup.util.PopupUtil; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.history.*; import com.intellij.openapi.vfs.VirtualFile; @@ -66,6 +65,23 @@ import static com.intellij.util.ObjectUtils.notNull; public class VcsHistoryDialog extends FrameWrapper implements DataProvider { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.history.impl.VcsHistoryDialog"); + private static final VcsRevisionNumber LOCAL_REVISION_NUMBER = new VcsRevisionNumber() { + @Override + public String asString() { + return "Local Changes"; + } + + @Override + public int compareTo(@NotNull VcsRevisionNumber vcsRevisionNumber) { + return 0; + } + + @Override + public String toString() { + return asString(); + } + }; + private static final ColumnInfo REVISION = new ColumnInfo(VcsBundle.message("column.name.revision.version")) { @Override public Object valueOf(Object object) { @@ -104,11 +120,11 @@ public class VcsHistoryDialog extends FrameWrapper implements DataProvider { private static final Block EMPTY_BLOCK = new Block("", 0, 0); - private final Project myProject; - private final VirtualFile myFile; - private final Editor myEditor; - private final AbstractVcs myActiveVcs; - private final CachedRevisionsContents myCachedContents; + @NotNull private final Project myProject; + @NotNull private final VirtualFile myFile; + @NotNull private final Editor myEditor; + @NotNull private final AbstractVcs myActiveVcs; + @NotNull private final CachedRevisionsContents myCachedContents; private final int mySelectionStart; private final int mySelectionEnd; @NonNls private final String myHelpId; @@ -127,16 +143,16 @@ public class VcsHistoryDialog extends FrameWrapper implements DataProvider { private boolean myIsDuringUpdate = false; private boolean myIsDisposed = false; - public VcsHistoryDialog(Project project, - VirtualFile file, - Editor editor, - VcsHistoryProvider vcsHistoryProvider, - VcsHistorySession session, - AbstractVcs vcs, + public VcsHistoryDialog(@NotNull Project project, + @NotNull VirtualFile file, + @NotNull Editor editor, + @NotNull VcsHistoryProvider vcsHistoryProvider, + @NotNull VcsHistorySession session, + @NotNull AbstractVcs vcs, int selectionStart, int selectionEnd, - String title, - CachedRevisionsContents cachedContents) { + @NotNull String title, + @NotNull CachedRevisionsContents cachedContents) { super(project); myProject = project; myFile = file; @@ -159,7 +175,7 @@ public class VcsHistoryDialog extends FrameWrapper implements DataProvider { myDiffPanel = DiffManager.getInstance().createRequestPanel(myProject, this, getFrame()); - myRevisions.add(new CurrentRevision(file, VcsRevisionNumber.LOCAL)); + myRevisions.add(new CurrentRevision(file, LOCAL_REVISION_NUMBER)); myRevisions.addAll(session.getRevisionList()); myBlocks.addAll(Collections.nCopies(myRevisions.size(), null)); @@ -308,7 +324,7 @@ public class VcsHistoryDialog extends FrameWrapper implements DataProvider { for (int i = firstRevision - 1; i >= 0; i--) { Block block1 = getBlock(i + 1); Block block2 = getBlock(i); - if (orderedEquals(block1.getLines(), block2.getLines())) continue; + if (block1.getLines().equals(block2.getLines())) continue; result.add(myRevisions.get(i)); } @@ -452,12 +468,4 @@ public class VcsHistoryDialog extends FrameWrapper implements DataProvider { } return myBlocks.get(index); } - - private static boolean orderedEquals(@NotNull List data1, @NotNull List data2) { - if (data1.size() != data2.size()) return false; - for (int i = 0; i < data1.size(); i++) { - if (!Comparing.equal(data1.get(i), data2.get(i))) return false; - } - return true; - } } diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index 2f63276b7674..6051655dedf6 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -1700,7 +1700,8 @@ description="Refresh IntelliJ IDEA project structure so that it matches Griffon build settings"> - +