mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,92 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.intellij.lang.regexp.intention.CheckRegExpForm">
|
||||
<grid id="a29f0" binding="myRootPanel" custom-create="true" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<grid id="38faf" binding="myRootPanel" custom-create="true" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="376" height="134"/>
|
||||
<xy x="20" y="20" width="376" height="163"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="empty">
|
||||
<size top="0" left="1" bottom="0" right="1"/>
|
||||
</border>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="c2a42" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints border-constraint="Center"/>
|
||||
<component id="5de69" class="com.intellij.ui.components.JBLabel" binding="myMessage">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<componentStyle value="SMALL"/>
|
||||
<text value="Red means I can't hear you!"/>
|
||||
</properties>
|
||||
</component>
|
||||
<vspacer id="dd293">
|
||||
<constraints>
|
||||
<grid row="3" column="0" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<component id="b01c9" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<preferredSize width="55" height="16"/>
|
||||
<text value="RegExp:"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="ec7ec" class="javax.swing.JLabel">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<preferredSize width="55" height="16"/>
|
||||
<text value="Sample:"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="d8697" class="com.intellij.ui.EditorTextField" binding="myRegExp" custom-create="true">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="a052" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
<border type="empty">
|
||||
<size top="5" left="5" bottom="10" right="5"/>
|
||||
</border>
|
||||
<children>
|
||||
<grid id="b7b2b" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints border-constraint="North"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="d8697" class="com.intellij.ui.EditorTextField" binding="myRegExp" custom-create="true">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="b01c9" class="javax.swing.JLabel">
|
||||
<constraints border-constraint="West"/>
|
||||
<properties>
|
||||
<alignmentX value="1.0"/>
|
||||
<preferredSize width="55" height="16"/>
|
||||
<text value="RegExp:"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="aab68" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="47807" class="com.intellij.ui.EditorTextField" binding="mySampleText" custom-create="true">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="ec7ec" class="javax.swing.JLabel">
|
||||
<constraints border-constraint="West"/>
|
||||
<properties>
|
||||
<alignmentX value="1.0"/>
|
||||
<alignmentY value="0.0"/>
|
||||
<preferredSize width="55" height="16"/>
|
||||
<text value="Sample:"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="fff6d" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints border-constraint="South"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="5de69" class="com.intellij.ui.components.JBLabel" binding="myMessage">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<alignmentX value="0.5"/>
|
||||
<componentStyle value="SMALL"/>
|
||||
<text value="Red means I can't hear you!"/>
|
||||
</properties>
|
||||
</component>
|
||||
<hspacer id="c8c90">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
</component>
|
||||
<component id="47807" class="com.intellij.ui.EditorTextField" binding="mySampleText" custom-create="true">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="7" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
|
||||
@@ -21,14 +21,17 @@ import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CustomShortcutSet;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.event.DocumentAdapter;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.fileTypes.PlainTextFileType;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.popup.Balloon;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
@@ -37,7 +40,6 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiLanguageInjectionHost;
|
||||
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
|
||||
import com.intellij.ui.EditorTextField;
|
||||
import com.intellij.ui.Gray;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.ui.components.JBLabel;
|
||||
import com.intellij.util.Alarm;
|
||||
@@ -49,8 +51,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
import java.awt.*;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@@ -82,12 +82,17 @@ public class CheckRegExpForm {
|
||||
Document document = PsiDocumentManager.getInstance(myProject).getDocument(myRegexpFile);
|
||||
|
||||
myRegExp = new EditorTextField(document, myProject, RegExpLanguage.INSTANCE.getAssociatedFileType());
|
||||
myRegExp.setPreferredWidth(Math.max(JBUI.scale(300), myRegExp.getPreferredSize().width));
|
||||
final String sampleText = PropertiesComponent.getInstance(myProject).getValue(LAST_EDITED_REGEXP, "Sample Text");
|
||||
mySampleText = new EditorTextField(sampleText, myProject, PlainTextFileType.INSTANCE);
|
||||
mySampleText.setBorder(
|
||||
new CompoundBorder(JBUI.Borders.empty(2, 2, 2, 4), new LineBorder(UIUtil.isUnderDarcula() ? Gray._100 : JBColor.border())));
|
||||
mySampleText = new EditorTextField(sampleText, myProject, PlainTextFileType.INSTANCE) {
|
||||
@Override
|
||||
protected void updateBorder(@NotNull EditorEx editor) {
|
||||
setupBorder(editor);
|
||||
}
|
||||
};
|
||||
mySampleText.setOneLineMode(false);
|
||||
int preferredWidth = Math.max(JBUI.scale(250), myRegExp.getPreferredSize().width);
|
||||
myRegExp.setPreferredWidth(preferredWidth);
|
||||
mySampleText.setPreferredWidth(preferredWidth);
|
||||
|
||||
myRootPanel = new JPanel(new BorderLayout()) {
|
||||
Disposable disposable;
|
||||
@@ -112,7 +117,7 @@ public class CheckRegExpForm {
|
||||
public void documentChanged(DocumentEvent e) {
|
||||
updater.cancelAllRequests();
|
||||
if (!updater.isDisposed()) {
|
||||
updater.addRequest(() -> updateBalloon(), 200);
|
||||
updater.addRequest(CheckRegExpForm.this::updateBalloon, 200);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -130,6 +135,7 @@ public class CheckRegExpForm {
|
||||
PropertiesComponent.getInstance(myProject).setValue(LAST_EDITED_REGEXP, mySampleText.getText());
|
||||
}
|
||||
};
|
||||
myRootPanel.setBorder(JBUI.Borders.empty(UIUtil.DEFAULT_VGAP, UIUtil.DEFAULT_HGAP));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -149,7 +155,9 @@ public class CheckRegExpForm {
|
||||
mySampleText.setBackground(correct != null && correct ? BACKGROUND_COLOR_MATCH : BACKGROUND_COLOR_NOMATCH);
|
||||
myMessage.setText(correct == null ? "Pattern is too complex" : correct ? "Matches!" : "No match");
|
||||
myRootPanel.revalidate();
|
||||
}, o -> false);
|
||||
Balloon balloon = JBPopupFactory.getInstance().getParentBalloonFor(myRootPanel);
|
||||
if (balloon != null) balloon.revalidate();
|
||||
}, ModalityState.current());
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
|
||||
+16
-1
@@ -16,7 +16,9 @@
|
||||
package org.intellij.lang.regexp.intention;
|
||||
|
||||
import com.intellij.codeInsight.intention.impl.QuickEditAction;
|
||||
import com.intellij.codeInsight.intention.impl.QuickEditHandler;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -26,6 +28,7 @@ import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.intellij.lang.regexp.RegExpLanguage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -44,7 +47,19 @@ public class CheckRegExpIntentionAction extends QuickEditAction implements Icona
|
||||
Language language = pair.first.getLanguage();
|
||||
return language.isKindOf(RegExpLanguage.INSTANCE);
|
||||
}
|
||||
return false;
|
||||
PsiFile baseFile = InjectedLanguageManager.getInstance(project).getTopLevelFile(file);
|
||||
return baseFile != null && baseFile.getLanguage().isKindOf(RegExpLanguage.INSTANCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
PsiFile baseFile = InjectedLanguageManager.getInstance(project).getTopLevelFile(file);
|
||||
if (baseFile == null || !baseFile.getLanguage().isKindOf(RegExpLanguage.INSTANCE)) {
|
||||
super.invoke(project, editor, file);
|
||||
return;
|
||||
}
|
||||
JComponent component = createBalloonComponent(file);
|
||||
if (component != null) QuickEditHandler.showBalloon(editor, file, component);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -162,7 +162,7 @@ libraryLicense(name: "ANTLR 4 Runtime", libraryName: "antlr-runtime-4.1.jar", ve
|
||||
libraryLicense(name: "Antlr", libraryName: "antlr.jar", version: "3.4", license: "BSD", url: "http://www.antlr.org", licenseUrl: "http://www.antlr.org/license.html")
|
||||
libraryLicense(name: "Apache Commons BeanUtils", libraryName: "commons-beanutils.jar", version: "1.6", license: "Apache 2.0", url: "http://commons.apache.org/beanutils/")
|
||||
libraryLicense(name: "Apache Commons Codec", libraryName: "commons-codec", version: "1.8", license: "Apache 2.0", url: "http://commons.apache.org/codec/", licenseUrl: "http://www.apache.org/licenses/")
|
||||
libraryLicense(name: "Apache Commons Compress", libraryName: "commons-compress-android", version: "1.0", license: "Apache 2.0", url: "http://commons.apache.org/proper/commons-compress/", licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0")
|
||||
libraryLicense(name: "Apache Commons Compress", libraryName: "commons-compress", version: "1.10", license: "Apache 2.0", url: "http://commons.apache.org/proper/commons-compress/", licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0")
|
||||
libraryLicense(name: "Apache Commons Discovery", libraryName: "commons-discovery-0.4.jar", version: "0.4", license: "Apache 2.0", url: "http://jakarta.apache.org/commons/discovery/", licenseUrl: "http://www.apache.org/licenses/")
|
||||
libraryLicense(name: "Apache Commons HTTPClient", libraryName: "http-client-3.1", version: "3.1 (with patch by JetBrains)", license: "Apache 2.0", url: "http://hc.apache.org/httpclient-3.x")
|
||||
libraryLicense(name: "Apache Commons IO", libraryName: "commons-io-1.4.jar", version: "1.4", license: "Apache 2.0", url: "http://commons.apache.org/io/", licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0.txt")
|
||||
|
||||
@@ -44,7 +44,6 @@ import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Getter;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -136,7 +135,6 @@ public abstract class JavaTestFrameworkRunnableState<T extends
|
||||
Disposer.register(getConfiguration().getProject(), consoleView);
|
||||
|
||||
final OSProcessHandler handler = createHandler(executor);
|
||||
handler.putUserData(TestStateStorage.RUN_CONFIGURATION_NAME_KEY, getConfiguration().getName());
|
||||
|
||||
consoleView.attachToProcess(handler);
|
||||
final AbstractTestProxy root = viewer.getRoot();
|
||||
|
||||
+1
-4
@@ -209,10 +209,7 @@ public class ExtractMethodObjectDialog extends DialogWrapper implements Abstract
|
||||
if (myProtectedRadioButton.isSelected()) {
|
||||
return PsiModifier.PROTECTED;
|
||||
}
|
||||
if (myPrivateRadioButton.isSelected()) {
|
||||
return PsiModifier.PRIVATE;
|
||||
}
|
||||
return null;
|
||||
return PsiModifier.PRIVATE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+7
-1
@@ -499,6 +499,13 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (PsiElement element : myElementsToMove) {
|
||||
if (element instanceof PsiClass) {
|
||||
MoveClassesOrPackagesUtil.prepareMoveClass((PsiClass)element);
|
||||
}
|
||||
}
|
||||
|
||||
final Map<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<PsiElement, PsiElement>();
|
||||
for (int idx = 0; idx < myElementsToMove.length; idx++) {
|
||||
PsiElement element = myElementsToMove[idx];
|
||||
@@ -528,7 +535,6 @@ public class MoveClassesOrPackagesProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
else if (element instanceof PsiClass) {
|
||||
final PsiClass psiClass = (PsiClass)element;
|
||||
MoveClassesOrPackagesUtil.prepareMoveClass(psiClass);
|
||||
final PsiClass newElement = MoveClassesOrPackagesUtil.doMoveClass(psiClass, myMoveDestination.getTargetDirectory(element.getContainingFile()), allClasses.get(psiClass));
|
||||
oldToNewElementsMapping.put(element, newElement);
|
||||
element = newElement;
|
||||
|
||||
@@ -42,7 +42,7 @@ public abstract class ForkedSplitter extends ForkedByModuleSplitter {
|
||||
sendTree(myRootDescription);
|
||||
if (myWorkingDirsPath == null || new File(myWorkingDirsPath).length() == 0) {
|
||||
final String classpath = System.getProperty("java.class.path");
|
||||
if (RepeatCount.getCount(repeatCount) != 0 && myForkMode.equals("repeat")) {
|
||||
if (repeatCount != null && RepeatCount.getCount(repeatCount) != 0 && myForkMode.equals("repeat")) {
|
||||
return startChildFork(createChildArgs(myRootDescription), null, classpath, repeatCount);
|
||||
}
|
||||
final List children = getChildren(myRootDescription);
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
package p2;
|
||||
public class First {}
|
||||
@@ -0,0 +1,4 @@
|
||||
package p2;
|
||||
public class Test {
|
||||
public static void f() {}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
package p3;
|
||||
public class First extends p2.First {}
|
||||
@@ -0,0 +1,10 @@
|
||||
package p3;
|
||||
|
||||
import p2.*;
|
||||
|
||||
class Second {
|
||||
{
|
||||
new First();
|
||||
Test.f();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
package p1;
|
||||
public class First extends p2.First {}
|
||||
@@ -0,0 +1,10 @@
|
||||
package p1;
|
||||
|
||||
import p2.*;
|
||||
|
||||
class Second {
|
||||
{
|
||||
new First();
|
||||
Test.f();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
package p2;
|
||||
public class First {}
|
||||
@@ -0,0 +1,4 @@
|
||||
package p2;
|
||||
public class Test {
|
||||
public static void f() {}
|
||||
}
|
||||
@@ -94,6 +94,10 @@ public class MoveClassTest extends RefactoringTestCase {
|
||||
doTest("qualifiedRef", new String[]{"p1.Test"}, "p2");
|
||||
}
|
||||
|
||||
public void testConflictingClassNames() throws Exception {
|
||||
doTest("conflictingNames", new String[] {"p1.First", "p1.Second"}, "p3");
|
||||
}
|
||||
|
||||
private void doTest(@NonNls String testName, @NonNls String[] classNames, @NonNls String newPackageName) throws Exception{
|
||||
String root = JavaTestUtil.getJavaTestDataPath() + "/refactoring/moveClass/" + testName;
|
||||
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@
|
||||
package com.intellij.codeInsight.daemon.impl;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.picocontainer.PicoContainer;
|
||||
@@ -55,7 +55,7 @@ abstract class ThreadLocalAnnotatorMap<K, V> {
|
||||
PicoContainer container = ApplicationManager.getApplication().getPicoContainer();
|
||||
for (V template : templates) {
|
||||
Class<? extends V> aClass = (Class<? extends V>)template.getClass();
|
||||
V clone = (V)new ConstructorInjectionComponentAdapter(aClass.getName(), aClass).getComponentInstance(container);
|
||||
V clone = (V)new CachingConstructorInjectionComponentAdapter(aClass.getName(), aClass).getComponentInstance(container);
|
||||
result.add(clone);
|
||||
}
|
||||
return result;
|
||||
|
||||
+2
-2
@@ -37,7 +37,7 @@ import com.intellij.util.ReflectionUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.messages.MessageBus;
|
||||
import com.intellij.util.messages.MessageBusFactory;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.DefaultPicoContainer;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -461,7 +461,7 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
|
||||
return myNameToComponent.get(name);
|
||||
}
|
||||
|
||||
private final class ComponentConfigComponentAdapter extends ConstructorInjectionComponentAdapter {
|
||||
private final class ComponentConfigComponentAdapter extends CachingConstructorInjectionComponentAdapter {
|
||||
private final PluginId myPluginId;
|
||||
private volatile Object myInitializedComponentInstance;
|
||||
private boolean myInitializing;
|
||||
|
||||
@@ -259,8 +259,8 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF
|
||||
}
|
||||
|
||||
private void switchFromStubToAst(List<Pair<StubBasedPsiElementBase, AstPath>> bindings) {
|
||||
if (!bindings.isEmpty()) {
|
||||
LOG.assertTrue(!myUseStrongRefs, this + " of " + getClass() + "; " + bindings);
|
||||
if (!bindings.isEmpty() && myUseStrongRefs) {
|
||||
LOG.error(this + " of " + getClass() + "; " + bindings);
|
||||
}
|
||||
|
||||
for (Pair<StubBasedPsiElementBase, AstPath> pair : bindings) {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.diff.tools.util;
|
||||
|
||||
import com.intellij.diff.tools.util.base.TextDiffViewerUtil;
|
||||
import com.intellij.diff.util.DiffDividerDrawUtil;
|
||||
import com.intellij.diff.util.DiffDrawUtil;
|
||||
import com.intellij.diff.util.DiffUtil;
|
||||
@@ -22,6 +23,7 @@ import com.intellij.diff.util.LineRange;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.FoldRegion;
|
||||
import com.intellij.openapi.editor.event.DocumentAdapter;
|
||||
@@ -75,12 +77,14 @@ public class FoldingModelSupport {
|
||||
myShouldUpdateLineNumbers = new boolean[myCount];
|
||||
|
||||
MyDocumentListener documentListener = new MyDocumentListener();
|
||||
List<Document> documents = ContainerUtil.map(myEditors, EditorEx::getDocument);
|
||||
TextDiffViewerUtil.installDocumentListeners(documentListener, documents, disposable);
|
||||
|
||||
for (int i = 0; i < myCount; i++) {
|
||||
if (myCount > 1) {
|
||||
myEditors[i].getFoldingModel().addListener(new MyFoldingListener(i), disposable);
|
||||
}
|
||||
myEditors[i].getGutterComponentEx().setLineNumberConvertor(getLineConvertor(i));
|
||||
myEditors[i].getDocument().addDocumentListener(documentListener, disposable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-35
@@ -25,43 +25,31 @@ import com.intellij.openapi.editor.event.DocumentAdapter;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.editor.event.DocumentListener;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.CalledInAwt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class ListenerDiffViewerBase extends DiffViewerBase {
|
||||
@NotNull private final DocumentListener myDocumentListener;
|
||||
@Nullable private final VirtualFileListener myFileListener;
|
||||
|
||||
public ListenerDiffViewerBase(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
|
||||
super(context, request);
|
||||
myDocumentListener = createDocumentListener();
|
||||
myFileListener = createFileListener(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onInit() {
|
||||
super.onInit();
|
||||
if (myFileListener != null) VirtualFileManager.getInstance().addVirtualFileListener(myFileListener);
|
||||
|
||||
for (Document document : getDocuments()) {
|
||||
document.addDocumentListener(myDocumentListener);
|
||||
}
|
||||
}
|
||||
VirtualFileListener fileListener = createFileListener(myRequest);
|
||||
if (fileListener != null) VirtualFileManager.getInstance().addVirtualFileListener(fileListener, this);
|
||||
|
||||
@Override
|
||||
protected void onDispose() {
|
||||
if (myFileListener != null) VirtualFileManager.getInstance().removeVirtualFileListener(myFileListener);
|
||||
|
||||
for (Document document : getDocuments()) {
|
||||
document.removeDocumentListener(myDocumentListener);
|
||||
}
|
||||
super.onDispose();
|
||||
DocumentListener documentListener = createDocumentListener();
|
||||
List<Document> documents = ContainerUtil.mapNotNull(myRequest.getContents(), (content) -> {
|
||||
return content instanceof DocumentContent ? ((DocumentContent)content).getDocument() : null;
|
||||
});
|
||||
TextDiffViewerUtil.installDocumentListeners(documentListener, documents, this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -124,19 +112,4 @@ public abstract class ListenerDiffViewerBase extends DiffViewerBase {
|
||||
protected void onFileChange(@NotNull VirtualFileEvent event) {
|
||||
scheduleRediff();
|
||||
}
|
||||
|
||||
//
|
||||
// Helpers
|
||||
//
|
||||
|
||||
@NotNull
|
||||
private Set<Document> getDocuments() {
|
||||
Set<Document> documents = new HashSet<>();
|
||||
for (DiffContent content : myRequest.getContents()) {
|
||||
if (content instanceof DocumentContent) {
|
||||
documents.add(((DocumentContent)content).getDocument());
|
||||
}
|
||||
}
|
||||
return documents;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,9 @@ import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.ex.ComboBoxAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.actions.EditorActionUtil;
|
||||
import com.intellij.openapi.editor.event.DocumentListener;
|
||||
import com.intellij.openapi.editor.event.EditorMouseEvent;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
@@ -100,6 +102,14 @@ public class TextDiffViewerUtil {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void installDocumentListeners(@NotNull DocumentListener listener,
|
||||
@NotNull List<Document> documents,
|
||||
@NotNull Disposable disposable) {
|
||||
for (Document document : ContainerUtil.newHashSet(documents)) {
|
||||
document.addDocumentListener(listener, disposable);
|
||||
}
|
||||
}
|
||||
|
||||
public static void checkDifferentDocuments(@NotNull ContentDiffRequest request) {
|
||||
// Actually, this should be a valid case. But it has little practical sense and will require explicit checks everywhere.
|
||||
// Some listeners will be processed once instead of 2 times, some listeners will cause illegal document modifications.
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@
|
||||
package com.intellij.openapi.extensions;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.picocontainer.PicoContainer;
|
||||
@@ -72,7 +72,7 @@ public abstract class AbstractExtensionPointBean implements PluginAware {
|
||||
public static <T> T instantiate(@NotNull final Class<T> aClass,
|
||||
@NotNull final PicoContainer container,
|
||||
final boolean allowNonPublicClasses) {
|
||||
return (T)new ConstructorInjectionComponentAdapter(aClass.getName(), aClass, null, allowNonPublicClasses).getComponentInstance(container);
|
||||
return (T)new CachingConstructorInjectionComponentAdapter(aClass.getName(), aClass, null, allowNonPublicClasses).getComponentInstance(container);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ import com.intellij.openapi.extensions.PluginDescriptor;
|
||||
import com.intellij.openapi.extensions.PluginId;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.util.pico.AssignableToComponentAdapter;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -166,7 +166,7 @@ public class ExtensionComponentAdapter implements LoadingOrder.Orderable, Assign
|
||||
private synchronized ComponentAdapter getDelegate() {
|
||||
if (myDelegate == null) {
|
||||
Class impl = loadImplementationClass();
|
||||
myDelegate = new ConstructorInjectionComponentAdapter(getComponentKey(), impl, null, true);
|
||||
myDelegate = new CachingConstructorInjectionComponentAdapter(getComponentKey(), impl, null, true);
|
||||
}
|
||||
|
||||
return myDelegate;
|
||||
|
||||
+3
-3
@@ -18,7 +18,7 @@ package com.intellij.openapi.extensions.impl;
|
||||
import com.intellij.openapi.extensions.*;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.DefaultPicoContainer;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jdom.Attribute;
|
||||
@@ -234,8 +234,8 @@ public class ExtensionsAreaImpl implements ExtensionsArea {
|
||||
}
|
||||
|
||||
private Object instantiate(Class clazz) {
|
||||
ConstructorInjectionComponentAdapter adapter =
|
||||
new ConstructorInjectionComponentAdapter(Integer.toString(System.identityHashCode(new Object())), clazz);
|
||||
CachingConstructorInjectionComponentAdapter adapter =
|
||||
new CachingConstructorInjectionComponentAdapter(Integer.toString(System.identityHashCode(new Object())), clazz);
|
||||
|
||||
return adapter.getComponentInstance(getPicoContainer());
|
||||
}
|
||||
|
||||
+6
-7
@@ -27,27 +27,26 @@ import java.security.PrivilegedAction;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A drop-in replacement of {@link org.picocontainer.defaults.ConstructorInjectionComponentAdapter}
|
||||
* A drop-in replacement of {@link ConstructorInjectionComponentAdapter}
|
||||
* The same code (generified and cleaned up) but without constructor caching (hence taking up less memory).
|
||||
* This class also inlines instance caching (e.g. it doesn't need to be wrapped in a CachingComponentAdapter).
|
||||
*/
|
||||
@SuppressWarnings("ClassNameSameAsAncestorName")
|
||||
public class ConstructorInjectionComponentAdapter extends org.picocontainer.defaults.ConstructorInjectionComponentAdapter {
|
||||
public class CachingConstructorInjectionComponentAdapter extends ConstructorInjectionComponentAdapter {
|
||||
private Object myInstance;
|
||||
|
||||
public ConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation, Parameter[] parameters, boolean allowNonPublicClasses, ComponentMonitor monitor, LifecycleStrategy lifecycleStrategy) throws AssignabilityRegistrationException, NotConcreteRegistrationException {
|
||||
public CachingConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation, Parameter[] parameters, boolean allowNonPublicClasses, ComponentMonitor monitor, LifecycleStrategy lifecycleStrategy) throws AssignabilityRegistrationException, NotConcreteRegistrationException {
|
||||
super(componentKey, componentImplementation, parameters, allowNonPublicClasses, monitor, lifecycleStrategy);
|
||||
}
|
||||
|
||||
public ConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation, Parameter[] parameters, boolean allowNonPublicClasses) throws AssignabilityRegistrationException, NotConcreteRegistrationException {
|
||||
public CachingConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation, Parameter[] parameters, boolean allowNonPublicClasses) throws AssignabilityRegistrationException, NotConcreteRegistrationException {
|
||||
super(componentKey, componentImplementation, parameters, allowNonPublicClasses);
|
||||
}
|
||||
|
||||
public ConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation, Parameter[] parameters) {
|
||||
public CachingConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation, Parameter[] parameters) {
|
||||
this(componentKey, componentImplementation, parameters, false);
|
||||
}
|
||||
|
||||
public ConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation) throws AssignabilityRegistrationException, NotConcreteRegistrationException {
|
||||
public CachingConstructorInjectionComponentAdapter(@NotNull Object componentKey, @NotNull Class componentImplementation) throws AssignabilityRegistrationException, NotConcreteRegistrationException {
|
||||
this(componentKey, componentImplementation, null);
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@ public class DefaultPicoContainer implements AreaPicoContainer, Serializable {
|
||||
|
||||
@Override
|
||||
public ComponentAdapter registerComponentImplementation(@NotNull Object componentKey, @NotNull Class componentImplementation, Parameter[] parameters) {
|
||||
ComponentAdapter componentAdapter = new ConstructorInjectionComponentAdapter(componentKey, componentImplementation, parameters, true);
|
||||
ComponentAdapter componentAdapter = new CachingConstructorInjectionComponentAdapter(componentKey, componentImplementation, parameters, true);
|
||||
return registerComponent(componentAdapter);
|
||||
}
|
||||
|
||||
|
||||
+14
-1
@@ -9,6 +9,7 @@ import com.intellij.execution.configurations.LocatableConfigurationBase;
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.execution.configurations.RunProfileState;
|
||||
import com.intellij.execution.executors.DefaultDebugExecutor;
|
||||
import com.intellij.execution.process.AnsiEscapeDecoder;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.process.ProcessOutputTypes;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
@@ -30,6 +31,7 @@ import com.intellij.openapi.options.SettingsEditor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.util.ExceptionUtil;
|
||||
import com.intellij.util.containers.ContainerUtilRt;
|
||||
@@ -236,13 +238,19 @@ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase {
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyProcessHandler extends ProcessHandler {
|
||||
private static class MyProcessHandler extends ProcessHandler implements AnsiEscapeDecoder.ColoredTextAcceptor {
|
||||
private final ExternalSystemExecuteTaskTask myTask;
|
||||
private final AnsiEscapeDecoder myAnsiEscapeDecoder = new AnsiEscapeDecoder();
|
||||
|
||||
public MyProcessHandler(ExternalSystemExecuteTaskTask task) {
|
||||
myTask = task;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyTextAvailable(final String text, final Key outputType) {
|
||||
myAnsiEscapeDecoder.escapeText(text, outputType, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void destroyProcessImpl() {
|
||||
}
|
||||
@@ -268,6 +276,11 @@ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase {
|
||||
public void notifyProcessTerminated(int exitCode) {
|
||||
super.notifyProcessTerminated(exitCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void coloredTextAvailable(String text, Key attributes) {
|
||||
super.notifyTextAvailable(text, attributes);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+26
-24
@@ -194,30 +194,7 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
|
||||
public void navigate(int injectedOffset) {
|
||||
if (myAction.isShowInBalloon()) {
|
||||
final JComponent component = myAction.createBalloonComponent(myNewFile);
|
||||
if (component != null) {
|
||||
final Balloon balloon = JBPopupFactory.getInstance().createBalloonBuilder(component)
|
||||
.setShadow(true)
|
||||
.setAnimationCycle(0)
|
||||
.setHideOnClickOutside(true)
|
||||
.setHideOnKeyOutside(true)
|
||||
.setHideOnAction(false)
|
||||
.setFillColor(UIUtil.getControlColor())
|
||||
.createBalloon();
|
||||
new AnAction() {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
balloon.hide();
|
||||
}
|
||||
}.registerCustomShortcutSet(CommonShortcuts.ESCAPE, component);
|
||||
Disposer.register(myNewFile.getProject(), balloon);
|
||||
final Balloon.Position position = QuickEditAction.getBalloonPosition(myEditor);
|
||||
RelativePoint point = JBPopupFactory.getInstance().guessBestPopupLocation(myEditor);
|
||||
if (position == Balloon.Position.above) {
|
||||
final Point p = point.getPoint();
|
||||
point = new RelativePoint(point.getComponent(), new Point(p.x, p.y - myEditor.getLineHeight()));
|
||||
}
|
||||
balloon.show(point, position);
|
||||
}
|
||||
if (component != null) showBalloon(myEditor, myNewFile, component);
|
||||
}
|
||||
else {
|
||||
final FileEditorManagerEx fileEditorManager = FileEditorManagerEx.getInstanceEx(myProject);
|
||||
@@ -245,6 +222,31 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
public static void showBalloon(Editor editor, PsiFile newFile, JComponent component) {
|
||||
final Balloon balloon = JBPopupFactory.getInstance().createBalloonBuilder(component)
|
||||
.setShadow(true)
|
||||
.setAnimationCycle(0)
|
||||
.setHideOnClickOutside(true)
|
||||
.setHideOnKeyOutside(true)
|
||||
.setHideOnAction(false)
|
||||
.setFillColor(UIUtil.getControlColor())
|
||||
.createBalloon();
|
||||
new AnAction() {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
balloon.hide();
|
||||
}
|
||||
}.registerCustomShortcutSet(CommonShortcuts.ESCAPE, component);
|
||||
Disposer.register(newFile.getProject(), balloon);
|
||||
final Balloon.Position position = QuickEditAction.getBalloonPosition(editor);
|
||||
RelativePoint point = JBPopupFactory.getInstance().guessBestPopupLocation(editor);
|
||||
if (position == Balloon.Position.above) {
|
||||
final Point p = point.getPoint();
|
||||
point = new RelativePoint(point.getComponent(), new Point(p.x, p.y - editor.getLineHeight()));
|
||||
}
|
||||
balloon.show(point, position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void documentChanged(DocumentEvent e) {
|
||||
UndoManager undoManager = UndoManager.getInstance(myProject);
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.ThrowableComputable;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.vfs.newvfs.persistent.FlushingDaemon;
|
||||
@@ -44,8 +43,6 @@ import java.util.concurrent.ScheduledFuture;
|
||||
* @author Dmitry Avdeev
|
||||
*/
|
||||
public class TestStateStorage implements Disposable {
|
||||
|
||||
public static Key<String> RUN_CONFIGURATION_NAME_KEY = Key.create("run.configuration.name");
|
||||
|
||||
private static final File TEST_HISTORY_PATH = new File(PathManager.getSystemPath(), "testHistory");
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ import com.intellij.usages.*;
|
||||
import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -189,7 +189,7 @@ public class FindUsagesManager {
|
||||
for (FindUsagesHandlerFactory factory : Extensions.getExtensions(FindUsagesHandlerFactory.EP_NAME, myProject)) {
|
||||
if (factory.canFindUsages(element)) {
|
||||
Class<? extends FindUsagesHandlerFactory> aClass = factory.getClass();
|
||||
FindUsagesHandlerFactory copy = (FindUsagesHandlerFactory)new ConstructorInjectionComponentAdapter(aClass.getName(), aClass)
|
||||
FindUsagesHandlerFactory copy = (FindUsagesHandlerFactory)new CachingConstructorInjectionComponentAdapter(aClass.getName(), aClass)
|
||||
.getComponentInstance(myProject.getPicoContainer());
|
||||
final FindUsagesHandler handler = copy.createFindUsagesHandler(element, forHighlightUsages);
|
||||
if (handler == FindUsagesHandler.NULL_HANDLER) return null;
|
||||
|
||||
+107
-27
@@ -22,14 +22,19 @@ import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.ide.util.projectWizard.*;
|
||||
import com.intellij.openapi.application.AccessToken;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.diagnostic.Attachment;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.module.*;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ex.ProjectManagerEx;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
@@ -38,6 +43,7 @@ import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.util.text.StringUtilRt;
|
||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||
@@ -54,6 +60,7 @@ import org.apache.velocity.exception.VelocityException;
|
||||
import org.jdom.JDOMException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jps.model.serialization.PathMacroUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.File;
|
||||
@@ -157,7 +164,7 @@ public class TemplateModuleBuilder extends ModuleBuilder {
|
||||
throws InvalidDataException, IOException, ModuleWithNameAlreadyExists, JDOMException, ConfigurationException {
|
||||
final String path = getContentEntryPath();
|
||||
final ExistingModuleLoader loader = ExistingModuleLoader.setUpLoader(getModuleFilePath());
|
||||
unzip(loader.getName(), path, true);
|
||||
unzip(loader.getName(), path, true, null, true);
|
||||
Module module = loader.createModule(moduleModel);
|
||||
if (myProjectMode) {
|
||||
moduleModel.renameModule(module, module.getProject().getName());
|
||||
@@ -190,7 +197,11 @@ public class TemplateModuleBuilder extends ModuleBuilder {
|
||||
return null;
|
||||
}
|
||||
|
||||
private void unzip(final @Nullable String projectName, String path, final boolean moduleMode) {
|
||||
private void unzip(final @Nullable String projectName,
|
||||
String path,
|
||||
final boolean moduleMode,
|
||||
@Nullable ProgressIndicator pI,
|
||||
boolean reportFailuresWithDialog) {
|
||||
final WizardInputField basePackage = getBasePackageField();
|
||||
try {
|
||||
final NullableFunction<String, String> pathConvertor = path1 -> {
|
||||
@@ -224,20 +235,21 @@ public class TemplateModuleBuilder extends ModuleBuilder {
|
||||
return;
|
||||
}
|
||||
|
||||
String dialogMessage;
|
||||
if (myFailures.size() == 1) {
|
||||
dialogMessage = "Failed to decode file \'" + myFailures.get(0).getFirst() + "\'";
|
||||
}
|
||||
else {
|
||||
StringBuilder dialogMessageBuilder = new StringBuilder();
|
||||
dialogMessageBuilder.append("Failed to decode files: \n");
|
||||
for (Trinity<String, String, VelocityException> failure : myFailures) {
|
||||
dialogMessageBuilder.append(failure.getFirst()).append("\n");
|
||||
if(reportFailuresWithDialog) {
|
||||
String dialogMessage;
|
||||
if (myFailures.size() == 1) {
|
||||
dialogMessage = "Failed to decode file \'" + myFailures.get(0).getFirst() + "\'";
|
||||
}
|
||||
dialogMessage = dialogMessageBuilder.toString();
|
||||
else {
|
||||
StringBuilder dialogMessageBuilder = new StringBuilder();
|
||||
dialogMessageBuilder.append("Failed to decode files: \n");
|
||||
for (Trinity<String, String, VelocityException> failure : myFailures) {
|
||||
dialogMessageBuilder.append(failure.getFirst()).append("\n");
|
||||
}
|
||||
dialogMessage = dialogMessageBuilder.toString();
|
||||
}
|
||||
Messages.showErrorDialog(dialogMessage, "Decoding Template");
|
||||
}
|
||||
Messages.showErrorDialog(dialogMessage, "Decoding Template");
|
||||
|
||||
|
||||
StringBuilder reportBuilder = new StringBuilder();
|
||||
for (Trinity<String, String, VelocityException> failure : myFailures) {
|
||||
@@ -259,6 +271,9 @@ public class TemplateModuleBuilder extends ModuleBuilder {
|
||||
ZipUtil.unzip(ProgressManager.getInstance().getProgressIndicator(), dir, stream, pathConvertor, new ZipUtil.ContentProcessor() {
|
||||
@Override
|
||||
public byte[] processContent(byte[] content, File file) throws IOException {
|
||||
if(pI != null){
|
||||
pI.checkCanceled();
|
||||
}
|
||||
FileType fileType = FileTypeManager.getInstance().getFileTypeByExtension(FileUtilRt.getExtension(file.getName()));
|
||||
String text = new String(content, CharsetToolkit.UTF8_CHARSET);
|
||||
consumer.setCurrentFile(file.getName(), text);
|
||||
@@ -269,6 +284,10 @@ public class TemplateModuleBuilder extends ModuleBuilder {
|
||||
}
|
||||
});
|
||||
|
||||
if(pI != null) {
|
||||
pI.setText("Refreshing...");
|
||||
}
|
||||
|
||||
String iml = ContainerUtil.find(dir.list(), s -> s.endsWith(".iml"));
|
||||
if (moduleMode) {
|
||||
File from = new File(path, iml);
|
||||
@@ -318,21 +337,82 @@ public class TemplateModuleBuilder extends ModuleBuilder {
|
||||
@Nullable
|
||||
@Override
|
||||
public Project createProject(String name, final String path) {
|
||||
myProjectMode = true;
|
||||
unzip(name, path, false);
|
||||
return ApplicationManager.getApplication().runWriteAction(new NullableComputable<Project>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public Project compute() {
|
||||
try {
|
||||
return ProjectManagerEx.getInstanceEx().convertAndLoadProject(path);
|
||||
}
|
||||
catch (IOException e) {
|
||||
LOG.error(e);
|
||||
return null;
|
||||
}
|
||||
final File location = new File(FileUtil.toSystemDependentName(path));
|
||||
LOG.assertTrue(location.exists());
|
||||
|
||||
final VirtualFile baseDir = ApplicationManager.getApplication().runWriteAction(new Computable<VirtualFile>() {
|
||||
public VirtualFile compute() {
|
||||
return LocalFileSystem.getInstance().refreshAndFindFileByIoFile(location);
|
||||
}
|
||||
});
|
||||
if (baseDir == null) {
|
||||
LOG.error("Couldn't find path '" + path + "' in VFS");
|
||||
return null;
|
||||
}
|
||||
|
||||
VirtualFile[] children = baseDir.getChildren();
|
||||
boolean isSomehowOverwriting = children.length > 1 ||
|
||||
(children.length == 1 && !PathMacroUtil.DIRECTORY_STORE_NAME.equals(children[0].getName()));
|
||||
|
||||
Ref<Boolean> canceledRef = new Ref<>();
|
||||
Ref<Project> projectRef = new Ref<>();
|
||||
Task.Modal task = new Task.Modal(null, "Applying Template", true) {
|
||||
@Override
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
try {
|
||||
projectRef.set(createProject(name, path, indicator));
|
||||
}
|
||||
finally {
|
||||
cleanup();
|
||||
if(indicator.isCanceled()){
|
||||
canceledRef.set(true);
|
||||
if (!isSomehowOverwriting) {
|
||||
ApplicationManager.getApplication().invokeLater(() -> {
|
||||
AccessToken token = ApplicationManager.getApplication().acquireWriteActionLock(TemplateProjectDirectoryGenerator.class);
|
||||
try {
|
||||
baseDir.delete(TemplateProjectDirectoryGenerator.class);
|
||||
}
|
||||
catch (IOException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
finally {
|
||||
token.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
ProgressManager.getInstance().run(task);
|
||||
if(canceledRef.get() == Boolean.TRUE){
|
||||
throw new ProcessCanceledException();
|
||||
}
|
||||
return projectRef.get();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Project createProject(String name, final String path, @Nullable ProgressIndicator progressIndicator) {
|
||||
myProjectMode = true;
|
||||
unzip(name, path, false, progressIndicator, false);
|
||||
Ref<Project> projectRef = new Ref<>();
|
||||
ApplicationManager.getApplication().invokeAndWait(()->{
|
||||
projectRef.set(
|
||||
ApplicationManager.getApplication().runWriteAction(new NullableComputable<Project>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public Project compute() {
|
||||
try {
|
||||
return ProjectManagerEx.getInstanceEx().convertAndLoadProject(path);
|
||||
}
|
||||
catch (IOException e) {
|
||||
LOG.error(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}));
|
||||
}, ModalityState.any());
|
||||
return projectRef.get();
|
||||
}
|
||||
|
||||
private final static Logger LOG = Logger.getInstance(TemplateModuleBuilder.class);
|
||||
|
||||
+2
-2
@@ -53,7 +53,7 @@ import com.intellij.util.ReflectionUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
@@ -666,7 +666,7 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab
|
||||
group = new DefaultCompactActionGroup();
|
||||
} else {
|
||||
Class aClass = Class.forName(className, true, loader);
|
||||
Object obj = new ConstructorInjectionComponentAdapter(className, aClass).getComponentInstance(ApplicationManager.getApplication().getPicoContainer());
|
||||
Object obj = new CachingConstructorInjectionComponentAdapter(className, aClass).getComponentInstance(ApplicationManager.getApplication().getPicoContainer());
|
||||
|
||||
if (!(obj instanceof ActionGroup)) {
|
||||
reportActionError(pluginId, "class with name \"" + className + "\" should be instance of " + ActionGroup.class.getName());
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ import com.intellij.util.PairProcessor;
|
||||
import com.intellij.util.PlatformUtils;
|
||||
import com.intellij.util.io.storage.HeavyProcessLatch;
|
||||
import com.intellij.util.pico.AssignableToComponentAdapter;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.picocontainer.*;
|
||||
@@ -263,7 +263,7 @@ public class ServiceManagerImpl implements BaseComponent {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
myDelegate = new ConstructorInjectionComponentAdapter(getComponentKey(), implClass, null, true);
|
||||
myDelegate = new CachingConstructorInjectionComponentAdapter(getComponentKey(), implClass, null, true);
|
||||
}
|
||||
return myDelegate;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ import com.intellij.openapi.wm.impl.FrameTitleBuilder;
|
||||
import com.intellij.psi.impl.DebugUtil;
|
||||
import com.intellij.util.TimedReference;
|
||||
import com.intellij.util.io.storage.HeavyProcessLatch;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -161,7 +161,7 @@ public class ProjectImpl extends PlatformComponentManagerImpl implements Project
|
||||
private ComponentAdapter getDelegate() {
|
||||
if (myDelegate == null) {
|
||||
Class storeClass = projectStoreClassProvider.getProjectStoreClass(isDefault());
|
||||
myDelegate = new ConstructorInjectionComponentAdapter(storeClass, storeClass, null, true);
|
||||
myDelegate = new CachingConstructorInjectionComponentAdapter(storeClass, storeClass, null, true);
|
||||
}
|
||||
return myDelegate;
|
||||
}
|
||||
|
||||
@@ -531,26 +531,30 @@ public class EditorTextField extends NonOpaquePanel implements DocumentListener,
|
||||
final Container parent = getParent();
|
||||
if (parent instanceof JTable || parent instanceof CellRendererPane) return;
|
||||
|
||||
if (UIUtil.isUnderAquaLookAndFeel() || UIUtil.isUnderDarcula() || UIUtil.isUnderIntelliJLaF()) {
|
||||
editor.setBorder(UIUtil.isUnderDarcula() || UIUtil.isUnderIntelliJLaF() ? new DarculaEditorTextFieldBorder() : new MacUIUtil.EditorTextFieldBorder(this));
|
||||
editor.addFocusListener(new FocusChangeListener() {
|
||||
@Override
|
||||
public void focusGained(Editor editor) {
|
||||
repaint();
|
||||
}
|
||||
setupBorder(editor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void focusLost(Editor editor) {
|
||||
repaint();
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (UIUtil.isUnderAlloyLookAndFeel() || UIUtil.isUnderJGoodiesLookAndFeel()) {
|
||||
editor.setBorder(BorderFactory.createCompoundBorder(UIUtil.getTextFieldBorder(), BorderFactory.createEmptyBorder(1, 1, 1, 1)));
|
||||
}
|
||||
else {
|
||||
editor.setBorder(BorderFactory.createCompoundBorder(UIUtil.getTextFieldBorder(), BorderFactory.createEmptyBorder(2, 2, 2, 2)));
|
||||
}
|
||||
protected void setupBorder(@NotNull EditorEx editor) {
|
||||
if (UIUtil.isUnderAquaLookAndFeel() || UIUtil.isUnderDarcula() || UIUtil.isUnderIntelliJLaF()) {
|
||||
editor.setBorder(UIUtil.isUnderDarcula() || UIUtil.isUnderIntelliJLaF() ? new DarculaEditorTextFieldBorder() : new MacUIUtil.EditorTextFieldBorder(this));
|
||||
editor.addFocusListener(new FocusChangeListener() {
|
||||
@Override
|
||||
public void focusGained(Editor editor) {
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void focusLost(Editor editor) {
|
||||
repaint();
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (UIUtil.isUnderAlloyLookAndFeel() || UIUtil.isUnderJGoodiesLookAndFeel()) {
|
||||
editor.setBorder(BorderFactory.createCompoundBorder(UIUtil.getTextFieldBorder(), BorderFactory.createEmptyBorder(1, 1, 1, 1)));
|
||||
}
|
||||
else {
|
||||
editor.setBorder(BorderFactory.createCompoundBorder(UIUtil.getTextFieldBorder(), BorderFactory.createEmptyBorder(2, 2, 2, 2)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -675,7 +675,13 @@ public class PopupFactoryImpl extends JBPopupFactory {
|
||||
Point p = editor.visualPositionToXY(new VisualPosition(visualPosition.line + 1, visualPosition.column));
|
||||
|
||||
final Rectangle visibleArea = editor.getScrollingModel().getVisibleArea();
|
||||
return visibleArea.contains(p) ? p : null;
|
||||
if (!visibleArea.contains(p)) {
|
||||
int h = editor.getLineHeight();
|
||||
p.y -= h;
|
||||
if (!visibleArea.contains(p)) return null;
|
||||
p.y += h;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-9
@@ -19,7 +19,6 @@ import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
|
||||
import com.intellij.execution.TestStateStorage;
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.testframework.*;
|
||||
import com.intellij.execution.testframework.actions.ScrollToTestSourceAction;
|
||||
import com.intellij.execution.testframework.export.TestResultsXmlFormatter;
|
||||
@@ -46,7 +45,6 @@ import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Pass;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.pom.Navigatable;
|
||||
@@ -70,8 +68,6 @@ import javax.xml.transform.sax.SAXTransformerFactory;
|
||||
import javax.xml.transform.sax.TransformerHandler;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import java.awt.*;
|
||||
import java.awt.event.InputEvent;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
@@ -801,11 +797,7 @@ public class SMTestRunnerResultsForm extends TestResultsPanel
|
||||
for (SMTestProxy proxy : tests) {
|
||||
String url = proxy instanceof SMTestProxy.SMRootTestProxy ? ((SMTestProxy.SMRootTestProxy)proxy).getRootLocation() : proxy.getLocationUrl();
|
||||
if (url != null) {
|
||||
ProcessHandler handler = myRoot.getHandler();
|
||||
String configurationName = null;
|
||||
if (handler != null) {
|
||||
configurationName = handler.getUserData(TestStateStorage.RUN_CONFIGURATION_NAME_KEY);
|
||||
}
|
||||
String configurationName = myConfiguration != null ? myConfiguration.getName() : null;
|
||||
storage.writeState(url, new TestStateStorage.Record(proxy.getMagnitude(), new Date(),
|
||||
configurationName == null ? 0 : configurationName.hashCode()));
|
||||
}
|
||||
|
||||
+3
-2
@@ -20,7 +20,7 @@ import com.intellij.testFramework.builders.ModuleFixtureBuilder;
|
||||
import com.intellij.testFramework.fixtures.HeavyIdeaTestFixture;
|
||||
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture;
|
||||
import com.intellij.testFramework.fixtures.TestFixtureBuilder;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.DefaultPicoContainer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
@@ -48,7 +48,8 @@ class HeavyTestFixtureBuilderImpl implements TestFixtureBuilder<IdeaProjectTestF
|
||||
private <M extends ModuleFixtureBuilder> M createModuleBuilder(Class<M> key) {
|
||||
Class<? extends ModuleFixtureBuilder> implClass = myProviders.get(key);
|
||||
Assert.assertNotNull(key.toString(), implClass);
|
||||
final ConstructorInjectionComponentAdapter adapter = new ConstructorInjectionComponentAdapter(implClass, implClass, null, true);
|
||||
final CachingConstructorInjectionComponentAdapter
|
||||
adapter = new CachingConstructorInjectionComponentAdapter(implClass, implClass, null, true);
|
||||
return (M)adapter.getComponentInstance(myContainer);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import com.intellij.openapi.extensions.PluginAware;
|
||||
import com.intellij.openapi.extensions.PluginDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.util.NotNullFunction;
|
||||
import com.intellij.util.pico.ConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.pico.CachingConstructorInjectionComponentAdapter;
|
||||
import com.intellij.util.xmlb.annotations.Attribute;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -90,7 +90,7 @@ public class ChangesViewContentEP implements PluginAware {
|
||||
try {
|
||||
final Class<?> aClass = Class.forName(className, true,
|
||||
myPluginDescriptor == null ? getClass().getClassLoader() : myPluginDescriptor.getPluginClassLoader());
|
||||
return new ConstructorInjectionComponentAdapter(className, aClass).getComponentInstance(project.getPicoContainer());
|
||||
return new CachingConstructorInjectionComponentAdapter(className, aClass).getComponentInstance(project.getPicoContainer());
|
||||
}
|
||||
catch(Exception e) {
|
||||
LOG.error(e);
|
||||
|
||||
+5
-4
@@ -101,6 +101,7 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj
|
||||
@Nullable private final AbstractVcs myVcs;
|
||||
private final boolean myIsAlien;
|
||||
private boolean myDisposed = false;
|
||||
private boolean myUpdateDisabled = false;
|
||||
@NotNull private final JLabel myWarningLabel;
|
||||
|
||||
@NotNull private final Map<String, CheckinChangeListSpecificComponent> myCheckinChangeListSpecificComponents;
|
||||
@@ -855,12 +856,12 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj
|
||||
}
|
||||
|
||||
private void stopUpdate() {
|
||||
myDisposed = true;
|
||||
myUpdateDisabled = true;
|
||||
myUpdateButtonsRunnable.cancel();
|
||||
}
|
||||
|
||||
private void restartUpdate() {
|
||||
myDisposed = false;
|
||||
myUpdateDisabled = false;
|
||||
myUpdateButtonsRunnable.restart(this);
|
||||
}
|
||||
|
||||
@@ -1213,7 +1214,7 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj
|
||||
}
|
||||
|
||||
private void updateButtons() {
|
||||
if (myDisposed) return;
|
||||
if (myDisposed || myUpdateDisabled) return;
|
||||
final boolean enabled = hasDiffs();
|
||||
setOKActionEnabled(enabled);
|
||||
if (myCommitAction != null) {
|
||||
@@ -1229,7 +1230,7 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj
|
||||
}
|
||||
|
||||
private void updateLegend() {
|
||||
if (myDisposed) return;
|
||||
if (myDisposed || myUpdateDisabled) return;
|
||||
myChangesInfoCalculator.update(myBrowser.getCurrentDisplayedChanges(), getIncludedChanges(), myBrowser.getUnversionedFilesCount(),
|
||||
myBrowser.getIncludedUnversionedFiles().size());
|
||||
myLegend.update();
|
||||
|
||||
+13
@@ -17,9 +17,13 @@ package org.jetbrains.plugins.gradle.execution.test.runner;
|
||||
|
||||
import com.intellij.execution.Location;
|
||||
import com.intellij.execution.stacktrace.StackTraceLine;
|
||||
import com.intellij.execution.testframework.Printable;
|
||||
import com.intellij.execution.testframework.Printer;
|
||||
import com.intellij.execution.testframework.sm.runner.SMTestProxy;
|
||||
import com.intellij.execution.ui.ConsoleViewContentType;
|
||||
import com.intellij.openapi.diff.LineTokenizer;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -40,6 +44,15 @@ public class GradleSMTestProxy extends SMTestProxy {
|
||||
myClassName = className;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addStdOutput(String output, Key outputType) {
|
||||
addLast(new Printable() {
|
||||
public void printOn(final Printer printer) {
|
||||
printer.printWithAnsiColoring(output, ConsoleViewContentType.getConsoleViewType(outputType));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTestFailed(@NotNull String localizedMessage, @Nullable String stackTrace, boolean testError) {
|
||||
setStacktraceIfNotSet(stackTrace);
|
||||
|
||||
+2
-1
@@ -19,6 +19,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.MultiLineLabelUI;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ui.JBDimension;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.svn.SvnBundle;
|
||||
import org.tmatesoft.svn.core.SVNException;
|
||||
@@ -75,7 +76,7 @@ public class AddRepositoryLocationDialog extends DialogWrapper {
|
||||
|
||||
myCombo = new JComboBox(ArrayUtil.toObjectArray(myPreviousLocations));
|
||||
myCombo.setEditable(true);
|
||||
myCombo.setMinimumSize(new Dimension(250, 20));
|
||||
myCombo.setMinimumSize(new JBDimension(250, 20));
|
||||
gb.fill = GridBagConstraints.HORIZONTAL;
|
||||
mainPanel.add(myCombo, gb);
|
||||
gb.fill = GridBagConstraints.NONE;
|
||||
|
||||
@@ -36,14 +36,14 @@ public abstract class LibraryContributingFacet<T extends FacetConfiguration> ext
|
||||
connection.subscribe(FacetManager.FACETS_TOPIC, new FacetManagerAdapter() {
|
||||
@Override
|
||||
public void beforeFacetRemoved(@NotNull Facet facet) {
|
||||
if (facet instanceof LibraryContributingFacet) {
|
||||
if (facet == LibraryContributingFacet.this) {
|
||||
((LibraryContributingFacet) facet).removeLibrary();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void facetConfigurationChanged(@NotNull Facet facet) {
|
||||
if (facet instanceof LibraryContributingFacet) {
|
||||
if (facet == LibraryContributingFacet.this) {
|
||||
((LibraryContributingFacet) facet).updateLibrary();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user