Switch to 193 platform

This commit is contained in:
Nikolay Krasko
2020-01-19 12:01:53 +03:00
parent 388797618a
commit f01b4706d1
172 changed files with 763 additions and 763 deletions
+5 -5
View File
@@ -1,6 +1,6 @@
192
193 193
191 192
as35_191 191_192
as36 as35_191_192
as40_193 as36_192
as40
@@ -5,39 +5,76 @@
package org.jetbrains.kotlin.cli.jvm.compiler; package org.jetbrains.kotlin.cli.jvm.compiler;
import com.intellij.codeInsight.ContainerProvider; import com.intellij.codeInsight.ContainerProvider;
import com.intellij.codeInsight.JavaContainerProvider;
import com.intellij.codeInsight.folding.JavaCodeFoldingSettings;
import com.intellij.codeInsight.folding.impl.JavaCodeFoldingSettingsBase;
import com.intellij.codeInsight.folding.impl.JavaFoldingBuilderBase;
import com.intellij.codeInsight.runner.JavaMainMethodProvider; import com.intellij.codeInsight.runner.JavaMainMethodProvider;
import com.intellij.core.CoreApplicationEnvironment; import com.intellij.core.CoreApplicationEnvironment;
import com.intellij.core.JavaCoreApplicationEnvironment; import com.intellij.core.CoreJavaDirectoryService;
import com.intellij.core.CorePsiPackageImplementationHelper;
import com.intellij.ide.highlighter.ArchiveFileType;
import com.intellij.ide.highlighter.JavaClassFileType;
import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.lang.LanguageASTFactory;
import com.intellij.lang.MetaLanguage; import com.intellij.lang.MetaLanguage;
import com.intellij.lang.folding.LanguageFolding;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.lang.java.JavaParserDefinition;
import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.openapi.Disposable; import com.intellij.openapi.Disposable;
import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.extensions.ExtensionsArea; import com.intellij.openapi.extensions.ExtensionsArea;
import com.intellij.openapi.fileTypes.FileTypeExtensionPoint; import com.intellij.openapi.fileTypes.FileTypeExtensionPoint;
import com.intellij.openapi.fileTypes.PlainTextFileType;
import com.intellij.openapi.fileTypes.PlainTextLanguage;
import com.intellij.openapi.fileTypes.PlainTextParserDefinition;
import com.intellij.openapi.projectRoots.JavaVersionService;
import com.intellij.openapi.util.KeyWithDefaultValue;
import com.intellij.openapi.vfs.VirtualFileSystem; import com.intellij.openapi.vfs.VirtualFileSystem;
import com.intellij.psi.FileContextProvider; import com.intellij.psi.*;
import com.intellij.psi.augment.PsiAugmentProvider; import com.intellij.psi.augment.PsiAugmentProvider;
import com.intellij.psi.augment.TypeAnnotationModifier; import com.intellij.psi.augment.TypeAnnotationModifier;
import com.intellij.psi.compiled.ClassFileDecompilers; import com.intellij.psi.compiled.ClassFileDecompilers;
import com.intellij.psi.impl.EmptySubstitutorImpl;
import com.intellij.psi.impl.LanguageConstantExpressionEvaluator;
import com.intellij.psi.impl.PsiExpressionEvaluator;
import com.intellij.psi.impl.compiled.ClassFileStubBuilder;
import com.intellij.psi.impl.file.PsiPackageImplementationHelper;
import com.intellij.psi.impl.search.MethodSuperSearcher;
import com.intellij.psi.impl.source.tree.JavaASTFactory;
import com.intellij.psi.impl.source.tree.PlainTextASTFactory;
import com.intellij.psi.meta.MetaDataContributor; import com.intellij.psi.meta.MetaDataContributor;
import com.intellij.psi.presentation.java.*;
import com.intellij.psi.search.searches.SuperMethodsSearch;
import com.intellij.psi.stubs.BinaryFileStubBuilders; import com.intellij.psi.stubs.BinaryFileStubBuilders;
import com.intellij.util.QueryExecutor;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem; import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem;
// Mostly a placeholder for the functionality added to the bunch 193 import java.lang.reflect.Field;
public class KotlinCoreApplicationEnvironment extends JavaCoreApplicationEnvironment { import java.lang.reflect.Modifier;
/**
* adapted from com.intellij.core.JavaCoreApplicationEnvironment
* TODO: initiate removal original from com.intellij.core since it seems that there are no usages left
*/
public class KotlinCoreApplicationEnvironment extends CoreApplicationEnvironment {
public static KotlinCoreApplicationEnvironment create(@NotNull Disposable parentDisposable, boolean unitTestMode) { public static KotlinCoreApplicationEnvironment create(@NotNull Disposable parentDisposable, boolean unitTestMode) {
Extensions.cleanRootArea(parentDisposable);
registerExtensionPoints();
return new KotlinCoreApplicationEnvironment(parentDisposable, unitTestMode); return new KotlinCoreApplicationEnvironment(parentDisposable, unitTestMode);
} }
private KotlinCoreApplicationEnvironment(@NotNull Disposable parentDisposable, boolean unitTestMode) { private KotlinCoreApplicationEnvironment(@NotNull Disposable parentDisposable, boolean unitTestMode) {
super(parentDisposable, unitTestMode); super(parentDisposable, unitTestMode);
registerExtensionPoints();
registerExtensions();
} }
private static void registerExtensionPoints() { private void registerExtensionPoints() {
ExtensionsArea area = Extensions.getRootArea(); ExtensionsArea area = Extensions.getRootArea();
CoreApplicationEnvironment.registerExtensionPoint(area, BinaryFileStubBuilders.EP_NAME, FileTypeExtensionPoint.class); CoreApplicationEnvironment.registerExtensionPoint(area, BinaryFileStubBuilders.EP_NAME, FileTypeExtensionPoint.class);
@@ -56,9 +93,105 @@ public class KotlinCoreApplicationEnvironment extends JavaCoreApplicationEnviron
IdeaExtensionPoints.INSTANCE.registerVersionSpecificAppExtensionPoints(area); IdeaExtensionPoints.INSTANCE.registerVersionSpecificAppExtensionPoints(area);
} }
private void registerExtensions() {
registerFileType(JavaClassFileType.INSTANCE, "class");
registerFileType(JavaFileType.INSTANCE, "java");
registerFileType(ArchiveFileType.INSTANCE, "jar;zip");
registerFileType(PlainTextFileType.INSTANCE, "txt;sh;bat;cmd;policy;log;cgi;MF;jad;jam;htaccess");
addExplicitExtension(LanguageASTFactory.INSTANCE, PlainTextLanguage.INSTANCE, new PlainTextASTFactory());
registerParserDefinition(new PlainTextParserDefinition());
addExplicitExtension(FileTypeFileViewProviders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileViewProviderFactory());
addExplicitExtension(BinaryFileStubBuilders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileStubBuilder());
addExplicitExtension(LanguageASTFactory.INSTANCE, JavaLanguage.INSTANCE, new JavaASTFactory());
registerParserDefinition(new JavaParserDefinition());
addExplicitExtension(LanguageConstantExpressionEvaluator.INSTANCE, JavaLanguage.INSTANCE, new PsiExpressionEvaluator());
addExtension(ContainerProvider.EP_NAME, new JavaContainerProvider());
myApplication.registerService(PsiPackageImplementationHelper.class, new CorePsiPackageImplementationHelper());
EmptySubstitutorImpl emptySubstitutor = new EmptySubstitutorImpl();
myApplication.registerService(EmptySubstitutor.class, emptySubstitutor);
// Patch null values obtained because of cyclic dependency during initialization
updateInterfaceField(PsiSubstitutor.class, "EMPTY", emptySubstitutor);
updateInterfaceField(PsiSubstitutor.class, "UNKNOWN", PsiSubstitutor.EMPTY);
myApplication.registerService(JavaDirectoryService.class, createJavaDirectoryService());
myApplication.registerService(JavaVersionService.class, new JavaVersionService());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiPackage.class, new PackagePresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiClass.class, new ClassPresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiMethod.class, new MethodPresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiField.class, new FieldPresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiLocalVariable.class, new VariablePresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiParameter.class, new VariablePresentationProvider());
registerApplicationService(JavaCodeFoldingSettings.class, new JavaCodeFoldingSettingsBase());
addExplicitExtension(LanguageFolding.INSTANCE, JavaLanguage.INSTANCE, new JavaFoldingBuilderBase() {
@Override
protected boolean shouldShowExplicitLambdaType(@NotNull PsiAnonymousClass anonymousClass, @NotNull PsiNewExpression expression) {
return false;
}
@Override
protected boolean isBelowRightMargin(@NotNull PsiFile file, int lineLength) {
return false;
}
});
registerApplicationExtensionPoint(SuperMethodsSearch.EP_NAME, QueryExecutor.class);
addExtension(SuperMethodsSearch.EP_NAME, new MethodSuperSearcher());
}
// overridden in upsource
protected CoreJavaDirectoryService createJavaDirectoryService() {
return new CoreJavaDirectoryService();
}
@Nullable @Nullable
@Override @Override
protected VirtualFileSystem createJrtFileSystem() { protected VirtualFileSystem createJrtFileSystem() {
return new CoreJrtFileSystem(); return new CoreJrtFileSystem();
} }
private static void updateInterfaceField(Class<?> klass, String name, Object value) {
try {
Field field = klass.getDeclaredField(name);
boolean wasAccessible = field.isAccessible();
try {
if (!wasAccessible) {
field.setAccessible(true);
}
Field modifiersField = Field.class.getDeclaredField("modifiers");
int modifiers = field.getModifiers();
try {
modifiersField.setAccessible(true);
modifiersField.setInt(field, modifiers & ~Modifier.FINAL);
field.set(null, value);
}
finally {
modifiersField.setInt(field, modifiers);
modifiersField.setAccessible(false);
}
}
finally {
if (!wasAccessible) {
field.setAccessible(false);
}
}
}
catch (NoSuchFieldException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
} }
@@ -0,0 +1,64 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.cli.jvm.compiler;
import com.intellij.codeInsight.ContainerProvider;
import com.intellij.codeInsight.runner.JavaMainMethodProvider;
import com.intellij.core.CoreApplicationEnvironment;
import com.intellij.core.JavaCoreApplicationEnvironment;
import com.intellij.lang.MetaLanguage;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.extensions.ExtensionsArea;
import com.intellij.openapi.fileTypes.FileTypeExtensionPoint;
import com.intellij.openapi.vfs.VirtualFileSystem;
import com.intellij.psi.FileContextProvider;
import com.intellij.psi.augment.PsiAugmentProvider;
import com.intellij.psi.augment.TypeAnnotationModifier;
import com.intellij.psi.compiled.ClassFileDecompilers;
import com.intellij.psi.meta.MetaDataContributor;
import com.intellij.psi.stubs.BinaryFileStubBuilders;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem;
// Mostly a placeholder for the functionality added to the bunch 193
public class KotlinCoreApplicationEnvironment extends JavaCoreApplicationEnvironment {
public static KotlinCoreApplicationEnvironment create(@NotNull Disposable parentDisposable, boolean unitTestMode) {
Extensions.cleanRootArea(parentDisposable);
registerExtensionPoints();
return new KotlinCoreApplicationEnvironment(parentDisposable, unitTestMode);
}
private KotlinCoreApplicationEnvironment(@NotNull Disposable parentDisposable, boolean unitTestMode) {
super(parentDisposable, unitTestMode);
}
private static void registerExtensionPoints() {
ExtensionsArea area = Extensions.getRootArea();
CoreApplicationEnvironment.registerExtensionPoint(area, BinaryFileStubBuilders.EP_NAME, FileTypeExtensionPoint.class);
CoreApplicationEnvironment.registerExtensionPoint(area, FileContextProvider.EP_NAME, FileContextProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, MetaDataContributor.EP_NAME, MetaDataContributor.class);
CoreApplicationEnvironment.registerExtensionPoint(area, PsiAugmentProvider.EP_NAME, PsiAugmentProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, JavaMainMethodProvider.EP_NAME, JavaMainMethodProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, ContainerProvider.EP_NAME, ContainerProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, ClassFileDecompilers.EP_NAME, ClassFileDecompilers.Decompiler.class);
CoreApplicationEnvironment.registerExtensionPoint(area, TypeAnnotationModifier.EP_NAME, TypeAnnotationModifier.class);
CoreApplicationEnvironment.registerExtensionPoint(area, MetaLanguage.EP_NAME, MetaLanguage.class);
IdeaExtensionPoints.INSTANCE.registerVersionSpecificAppExtensionPoints(area);
}
@Nullable
@Override
protected VirtualFileSystem createJrtFileSystem() {
return new CoreJrtFileSystem();
}
}
@@ -1,197 +0,0 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.cli.jvm.compiler;
import com.intellij.codeInsight.ContainerProvider;
import com.intellij.codeInsight.JavaContainerProvider;
import com.intellij.codeInsight.folding.JavaCodeFoldingSettings;
import com.intellij.codeInsight.folding.impl.JavaCodeFoldingSettingsBase;
import com.intellij.codeInsight.folding.impl.JavaFoldingBuilderBase;
import com.intellij.codeInsight.runner.JavaMainMethodProvider;
import com.intellij.core.CoreApplicationEnvironment;
import com.intellij.core.CoreJavaDirectoryService;
import com.intellij.core.CorePsiPackageImplementationHelper;
import com.intellij.ide.highlighter.ArchiveFileType;
import com.intellij.ide.highlighter.JavaClassFileType;
import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.lang.LanguageASTFactory;
import com.intellij.lang.MetaLanguage;
import com.intellij.lang.folding.LanguageFolding;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.lang.java.JavaParserDefinition;
import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.extensions.ExtensionsArea;
import com.intellij.openapi.fileTypes.FileTypeExtensionPoint;
import com.intellij.openapi.fileTypes.PlainTextFileType;
import com.intellij.openapi.fileTypes.PlainTextLanguage;
import com.intellij.openapi.fileTypes.PlainTextParserDefinition;
import com.intellij.openapi.projectRoots.JavaVersionService;
import com.intellij.openapi.util.KeyWithDefaultValue;
import com.intellij.openapi.vfs.VirtualFileSystem;
import com.intellij.psi.*;
import com.intellij.psi.augment.PsiAugmentProvider;
import com.intellij.psi.augment.TypeAnnotationModifier;
import com.intellij.psi.compiled.ClassFileDecompilers;
import com.intellij.psi.impl.EmptySubstitutorImpl;
import com.intellij.psi.impl.LanguageConstantExpressionEvaluator;
import com.intellij.psi.impl.PsiExpressionEvaluator;
import com.intellij.psi.impl.compiled.ClassFileStubBuilder;
import com.intellij.psi.impl.file.PsiPackageImplementationHelper;
import com.intellij.psi.impl.search.MethodSuperSearcher;
import com.intellij.psi.impl.source.tree.JavaASTFactory;
import com.intellij.psi.impl.source.tree.PlainTextASTFactory;
import com.intellij.psi.meta.MetaDataContributor;
import com.intellij.psi.presentation.java.*;
import com.intellij.psi.search.searches.SuperMethodsSearch;
import com.intellij.psi.stubs.BinaryFileStubBuilders;
import com.intellij.util.QueryExecutor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.cli.jvm.modules.CoreJrtFileSystem;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/**
* adapted from com.intellij.core.JavaCoreApplicationEnvironment
* TODO: initiate removal original from com.intellij.core since it seems that there are no usages left
*/
public class KotlinCoreApplicationEnvironment extends CoreApplicationEnvironment {
public static KotlinCoreApplicationEnvironment create(@NotNull Disposable parentDisposable, boolean unitTestMode) {
return new KotlinCoreApplicationEnvironment(parentDisposable, unitTestMode);
}
private KotlinCoreApplicationEnvironment(@NotNull Disposable parentDisposable, boolean unitTestMode) {
super(parentDisposable, unitTestMode);
registerExtensionPoints();
registerExtensions();
}
private void registerExtensionPoints() {
ExtensionsArea area = Extensions.getRootArea();
CoreApplicationEnvironment.registerExtensionPoint(area, BinaryFileStubBuilders.EP_NAME, FileTypeExtensionPoint.class);
CoreApplicationEnvironment.registerExtensionPoint(area, FileContextProvider.EP_NAME, FileContextProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, MetaDataContributor.EP_NAME, MetaDataContributor.class);
CoreApplicationEnvironment.registerExtensionPoint(area, PsiAugmentProvider.EP_NAME, PsiAugmentProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, JavaMainMethodProvider.EP_NAME, JavaMainMethodProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, ContainerProvider.EP_NAME, ContainerProvider.class);
CoreApplicationEnvironment.registerExtensionPoint(area, ClassFileDecompilers.EP_NAME, ClassFileDecompilers.Decompiler.class);
CoreApplicationEnvironment.registerExtensionPoint(area, TypeAnnotationModifier.EP_NAME, TypeAnnotationModifier.class);
CoreApplicationEnvironment.registerExtensionPoint(area, MetaLanguage.EP_NAME, MetaLanguage.class);
IdeaExtensionPoints.INSTANCE.registerVersionSpecificAppExtensionPoints(area);
}
private void registerExtensions() {
registerFileType(JavaClassFileType.INSTANCE, "class");
registerFileType(JavaFileType.INSTANCE, "java");
registerFileType(ArchiveFileType.INSTANCE, "jar;zip");
registerFileType(PlainTextFileType.INSTANCE, "txt;sh;bat;cmd;policy;log;cgi;MF;jad;jam;htaccess");
addExplicitExtension(LanguageASTFactory.INSTANCE, PlainTextLanguage.INSTANCE, new PlainTextASTFactory());
registerParserDefinition(new PlainTextParserDefinition());
addExplicitExtension(FileTypeFileViewProviders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileViewProviderFactory());
addExplicitExtension(BinaryFileStubBuilders.INSTANCE, JavaClassFileType.INSTANCE, new ClassFileStubBuilder());
addExplicitExtension(LanguageASTFactory.INSTANCE, JavaLanguage.INSTANCE, new JavaASTFactory());
registerParserDefinition(new JavaParserDefinition());
addExplicitExtension(LanguageConstantExpressionEvaluator.INSTANCE, JavaLanguage.INSTANCE, new PsiExpressionEvaluator());
addExtension(ContainerProvider.EP_NAME, new JavaContainerProvider());
myApplication.registerService(PsiPackageImplementationHelper.class, new CorePsiPackageImplementationHelper());
EmptySubstitutorImpl emptySubstitutor = new EmptySubstitutorImpl();
myApplication.registerService(EmptySubstitutor.class, emptySubstitutor);
// Patch null values obtained because of cyclic dependency during initialization
updateInterfaceField(PsiSubstitutor.class, "EMPTY", emptySubstitutor);
updateInterfaceField(PsiSubstitutor.class, "UNKNOWN", PsiSubstitutor.EMPTY);
myApplication.registerService(JavaDirectoryService.class, createJavaDirectoryService());
myApplication.registerService(JavaVersionService.class, new JavaVersionService());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiPackage.class, new PackagePresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiClass.class, new ClassPresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiMethod.class, new MethodPresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiField.class, new FieldPresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiLocalVariable.class, new VariablePresentationProvider());
addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiParameter.class, new VariablePresentationProvider());
registerApplicationService(JavaCodeFoldingSettings.class, new JavaCodeFoldingSettingsBase());
addExplicitExtension(LanguageFolding.INSTANCE, JavaLanguage.INSTANCE, new JavaFoldingBuilderBase() {
@Override
protected boolean shouldShowExplicitLambdaType(@NotNull PsiAnonymousClass anonymousClass, @NotNull PsiNewExpression expression) {
return false;
}
@Override
protected boolean isBelowRightMargin(@NotNull PsiFile file, int lineLength) {
return false;
}
});
registerApplicationExtensionPoint(SuperMethodsSearch.EP_NAME, QueryExecutor.class);
addExtension(SuperMethodsSearch.EP_NAME, new MethodSuperSearcher());
}
// overridden in upsource
protected CoreJavaDirectoryService createJavaDirectoryService() {
return new CoreJavaDirectoryService();
}
@Nullable
@Override
protected VirtualFileSystem createJrtFileSystem() {
return new CoreJrtFileSystem();
}
private static void updateInterfaceField(Class<?> klass, String name, Object value) {
try {
Field field = klass.getDeclaredField(name);
boolean wasAccessible = field.isAccessible();
try {
if (!wasAccessible) {
field.setAccessible(true);
}
Field modifiersField = Field.class.getDeclaredField("modifiers");
int modifiers = field.getModifiers();
try {
modifiersField.setAccessible(true);
modifiersField.setInt(field, modifiers & ~Modifier.FINAL);
field.set(null, value);
}
finally {
modifiersField.setInt(field, modifiers);
modifiersField.setAccessible(false);
}
}
finally {
if (!wasAccessible) {
field.setAccessible(false);
}
}
}
catch (NoSuchFieldException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
}
@@ -17,6 +17,8 @@
package org.jetbrains.kotlin.test.testFramework; package org.jetbrains.kotlin.test.testFramework;
import com.intellij.core.CoreASTFactory; import com.intellij.core.CoreASTFactory;
import com.intellij.ide.util.AppPropertiesComponentImpl;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.lang.*; import com.intellij.lang.*;
import com.intellij.lang.impl.PsiBuilderFactoryImpl; import com.intellij.lang.impl.PsiBuilderFactoryImpl;
import com.intellij.mock.*; import com.intellij.mock.*;
@@ -30,6 +32,8 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.fileTypes.FileTypeFactory; import com.intellij.openapi.fileTypes.FileTypeFactory;
import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.options.SchemeManagerFactory;
import com.intellij.openapi.progress.EmptyProgressIndicator; import com.intellij.openapi.progress.EmptyProgressIndicator;
import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.impl.CoreProgressManager; import com.intellij.openapi.progress.impl.CoreProgressManager;
@@ -45,14 +49,14 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.*; import com.intellij.psi.impl.*;
import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.CachedValuesManager;
import com.intellij.testFramework.LightVirtualFile; import com.intellij.testFramework.LightVirtualFile;
import com.intellij.testFramework.MockSchemeManagerFactory;
import com.intellij.testFramework.TestDataFile; import com.intellij.testFramework.TestDataFile;
import com.intellij.util.CachedValuesManagerImpl; import com.intellij.util.CachedValuesManagerImpl;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.messages.MessageBus;
import com.intellij.util.messages.MessageBusFactory;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.KotlinFileType;
import org.picocontainer.ComponentAdapter; import org.picocontainer.ComponentAdapter;
import org.picocontainer.MutablePicoContainer; import org.picocontainer.MutablePicoContainer;
@@ -95,21 +99,31 @@ public abstract class KtParsingTestCase extends KtPlatformLiteFixture {
myPsiManager = new MockPsiManager(myProject); myPsiManager = new MockPsiManager(myProject);
myFileFactory = new PsiFileFactoryImpl(myPsiManager); myFileFactory = new PsiFileFactoryImpl(myPsiManager);
MutablePicoContainer appContainer = getApplication().getPicoContainer(); MutablePicoContainer appContainer = getApplication().getPicoContainer();
registerComponentInstance(appContainer, MessageBus.class, MessageBusFactory.newMessageBus(getApplication()));
final MockEditorFactory editorFactory = new MockEditorFactory(); final MockEditorFactory editorFactory = new MockEditorFactory();
registerComponentInstance(appContainer, EditorFactory.class, editorFactory); MockFileTypeManager mockFileTypeManager = new MockFileTypeManager(KotlinFileType.INSTANCE);
registerComponentInstance(appContainer, FileDocumentManager.class, new MockFileDocumentManagerImpl(new Function<CharSequence, Document>() { MockFileDocumentManagerImpl mockFileDocumentManager = new MockFileDocumentManagerImpl(new Function<CharSequence, Document>() {
@Override @Override
public Document fun(CharSequence charSequence) { public Document fun(CharSequence charSequence) {
return editorFactory.createDocument(charSequence); return editorFactory.createDocument(charSequence);
} }
}, HARD_REF_TO_DOCUMENT_KEY)); }, HARD_REF_TO_DOCUMENT_KEY);
registerComponentInstance(appContainer, PsiDocumentManager.class, new MockPsiDocumentManager());
registerApplicationService(PropertiesComponent.class, new AppPropertiesComponentImpl());
registerApplicationService(PsiBuilderFactory.class, new PsiBuilderFactoryImpl()); registerApplicationService(PsiBuilderFactory.class, new PsiBuilderFactoryImpl());
registerApplicationService(DefaultASTFactory.class, new CoreASTFactory()); registerApplicationService(DefaultASTFactory.class, new CoreASTFactory());
registerApplicationService(SchemeManagerFactory.class, new MockSchemeManagerFactory());
registerApplicationService(FileTypeManager.class, mockFileTypeManager);
registerApplicationService(FileDocumentManager.class, mockFileDocumentManager);
registerApplicationService(ProgressManager.class, new CoreProgressManager()); registerApplicationService(ProgressManager.class, new CoreProgressManager());
registerComponentInstance(appContainer, FileTypeRegistry.class, mockFileTypeManager);
registerComponentInstance(appContainer, FileTypeManager.class, mockFileTypeManager);
registerComponentInstance(appContainer, EditorFactory.class, editorFactory);
registerComponentInstance(appContainer, FileDocumentManager.class, mockFileDocumentManager);
registerComponentInstance(appContainer, PsiDocumentManager.class, new MockPsiDocumentManager());
myProject.registerService(CachedValuesManager.class, new CachedValuesManagerImpl(myProject, new PsiCachedValuesFactory(myPsiManager))); myProject.registerService(CachedValuesManager.class, new CachedValuesManagerImpl(myProject, new PsiCachedValuesFactory(myPsiManager)));
myProject.registerService(PsiManager.class, myPsiManager); myProject.registerService(PsiManager.class, myPsiManager);
@@ -323,7 +337,7 @@ public abstract class KtParsingTestCase extends KtPlatformLiteFixture {
public static void ensureCorrectReparse(@NotNull PsiFile file) { public static void ensureCorrectReparse(@NotNull PsiFile file) {
String psiToStringDefault = DebugUtil.psiToString(file, false, false); String psiToStringDefault = DebugUtil.psiToString(file, false, false);
String fileText = file.getText(); String fileText = file.getText();
DiffLog diffLog = (new BlockSupportImpl(file.getProject())).reparseRange( DiffLog diffLog = (new BlockSupportImpl()).reparseRange(
file, file.getNode(), TextRange.allOf(fileText), fileText, new EmptyProgressIndicator(), fileText); file, file.getNode(), TextRange.allOf(fileText), fileText, new EmptyProgressIndicator(), fileText);
diffLog.performActualPsiChange(file); diffLog.performActualPsiChange(file);
@@ -17,8 +17,6 @@
package org.jetbrains.kotlin.test.testFramework; package org.jetbrains.kotlin.test.testFramework;
import com.intellij.core.CoreASTFactory; import com.intellij.core.CoreASTFactory;
import com.intellij.ide.util.AppPropertiesComponentImpl;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.lang.*; import com.intellij.lang.*;
import com.intellij.lang.impl.PsiBuilderFactoryImpl; import com.intellij.lang.impl.PsiBuilderFactoryImpl;
import com.intellij.mock.*; import com.intellij.mock.*;
@@ -32,8 +30,6 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.fileTypes.FileTypeFactory; import com.intellij.openapi.fileTypes.FileTypeFactory;
import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.options.SchemeManagerFactory;
import com.intellij.openapi.progress.EmptyProgressIndicator; import com.intellij.openapi.progress.EmptyProgressIndicator;
import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.impl.CoreProgressManager; import com.intellij.openapi.progress.impl.CoreProgressManager;
@@ -49,14 +45,14 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.*; import com.intellij.psi.impl.*;
import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.CachedValuesManager;
import com.intellij.testFramework.LightVirtualFile; import com.intellij.testFramework.LightVirtualFile;
import com.intellij.testFramework.MockSchemeManagerFactory;
import com.intellij.testFramework.TestDataFile; import com.intellij.testFramework.TestDataFile;
import com.intellij.util.CachedValuesManagerImpl; import com.intellij.util.CachedValuesManagerImpl;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.messages.MessageBus;
import com.intellij.util.messages.MessageBusFactory;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.KotlinFileType;
import org.picocontainer.ComponentAdapter; import org.picocontainer.ComponentAdapter;
import org.picocontainer.MutablePicoContainer; import org.picocontainer.MutablePicoContainer;
@@ -99,31 +95,21 @@ public abstract class KtParsingTestCase extends KtPlatformLiteFixture {
myPsiManager = new MockPsiManager(myProject); myPsiManager = new MockPsiManager(myProject);
myFileFactory = new PsiFileFactoryImpl(myPsiManager); myFileFactory = new PsiFileFactoryImpl(myPsiManager);
MutablePicoContainer appContainer = getApplication().getPicoContainer(); MutablePicoContainer appContainer = getApplication().getPicoContainer();
registerComponentInstance(appContainer, MessageBus.class, MessageBusFactory.newMessageBus(getApplication()));
final MockEditorFactory editorFactory = new MockEditorFactory(); final MockEditorFactory editorFactory = new MockEditorFactory();
MockFileTypeManager mockFileTypeManager = new MockFileTypeManager(KotlinFileType.INSTANCE); registerComponentInstance(appContainer, EditorFactory.class, editorFactory);
MockFileDocumentManagerImpl mockFileDocumentManager = new MockFileDocumentManagerImpl(new Function<CharSequence, Document>() { registerComponentInstance(appContainer, FileDocumentManager.class, new MockFileDocumentManagerImpl(new Function<CharSequence, Document>() {
@Override @Override
public Document fun(CharSequence charSequence) { public Document fun(CharSequence charSequence) {
return editorFactory.createDocument(charSequence); return editorFactory.createDocument(charSequence);
} }
}, HARD_REF_TO_DOCUMENT_KEY); }, HARD_REF_TO_DOCUMENT_KEY));
registerComponentInstance(appContainer, PsiDocumentManager.class, new MockPsiDocumentManager());
registerApplicationService(PropertiesComponent.class, new AppPropertiesComponentImpl());
registerApplicationService(PsiBuilderFactory.class, new PsiBuilderFactoryImpl()); registerApplicationService(PsiBuilderFactory.class, new PsiBuilderFactoryImpl());
registerApplicationService(DefaultASTFactory.class, new CoreASTFactory()); registerApplicationService(DefaultASTFactory.class, new CoreASTFactory());
registerApplicationService(SchemeManagerFactory.class, new MockSchemeManagerFactory());
registerApplicationService(FileTypeManager.class, mockFileTypeManager);
registerApplicationService(FileDocumentManager.class, mockFileDocumentManager);
registerApplicationService(ProgressManager.class, new CoreProgressManager()); registerApplicationService(ProgressManager.class, new CoreProgressManager());
registerComponentInstance(appContainer, FileTypeRegistry.class, mockFileTypeManager);
registerComponentInstance(appContainer, FileTypeManager.class, mockFileTypeManager);
registerComponentInstance(appContainer, EditorFactory.class, editorFactory);
registerComponentInstance(appContainer, FileDocumentManager.class, mockFileDocumentManager);
registerComponentInstance(appContainer, PsiDocumentManager.class, new MockPsiDocumentManager());
myProject.registerService(CachedValuesManager.class, new CachedValuesManagerImpl(myProject, new PsiCachedValuesFactory(myPsiManager))); myProject.registerService(CachedValuesManager.class, new CachedValuesManagerImpl(myProject, new PsiCachedValuesFactory(myPsiManager)));
myProject.registerService(PsiManager.class, myPsiManager); myProject.registerService(PsiManager.class, myPsiManager);
@@ -337,7 +323,7 @@ public abstract class KtParsingTestCase extends KtPlatformLiteFixture {
public static void ensureCorrectReparse(@NotNull PsiFile file) { public static void ensureCorrectReparse(@NotNull PsiFile file) {
String psiToStringDefault = DebugUtil.psiToString(file, false, false); String psiToStringDefault = DebugUtil.psiToString(file, false, false);
String fileText = file.getText(); String fileText = file.getText();
DiffLog diffLog = (new BlockSupportImpl()).reparseRange( DiffLog diffLog = (new BlockSupportImpl(file.getProject())).reparseRange(
file, file.getNode(), TextRange.allOf(fileText), fileText, new EmptyProgressIndicator(), fileText); file, file.getNode(), TextRange.allOf(fileText), fileText, new EmptyProgressIndicator(), fileText);
diffLog.performActualPsiChange(file); diffLog.performActualPsiChange(file);
@@ -35,7 +35,8 @@ public abstract class KtPlatformLiteFixture extends KtUsefulTestCase {
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
Extensions.cleanRootArea(getTestRootDisposable()); // FIXME: There is no `Extensions.cleanRootArea` in 193
// Extensions.cleanRootArea(getTestRootDisposable());
} }
public static MockApplicationEx getApplication() { public static MockApplicationEx getApplication() {
@@ -35,8 +35,7 @@ public abstract class KtPlatformLiteFixture extends KtUsefulTestCase {
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
// FIXME: There is no `Extensions.cleanRootArea` in 193 Extensions.cleanRootArea(getTestRootDisposable());
// Extensions.cleanRootArea(getTestRootDisposable());
} }
public static MockApplicationEx getApplication() { public static MockApplicationEx getApplication() {
+3 -2
View File
@@ -1,8 +1,8 @@
versions.intellijSdk=192.7142.36 versions.intellijSdk=193.6015.22-EAP-SNAPSHOT
versions.androidBuildTools=r23.0.1 versions.androidBuildTools=r23.0.1
versions.idea.NodeJS=181.3494.12 versions.idea.NodeJS=181.3494.12
versions.jar.asm-all=7.0.1 versions.jar.asm-all=7.0.1
versions.jar.guava=25.1-jre versions.jar.guava=27.1-jre
versions.jar.groovy-all=2.4.17 versions.jar.groovy-all=2.4.17
versions.jar.lombok-ast=0.2.3 versions.jar.lombok-ast=0.2.3
versions.jar.swingx-core=1.6.2-2 versions.jar.swingx-core=1.6.2-2
@@ -11,5 +11,6 @@ versions.jar.streamex=0.6.8
versions.jar.gson=2.8.5 versions.jar.gson=2.8.5
versions.jar.oro=2.0.8 versions.jar.oro=2.0.8
versions.jar.picocontainer=1.2 versions.jar.picocontainer=1.2
versions.jar.serviceMessages=2019.1.4
ignore.jar.snappy-in-java=true ignore.jar.snappy-in-java=true
versions.gradle-api=4.5.1 versions.gradle-api=4.5.1
@@ -1,8 +1,8 @@
versions.intellijSdk=193.6015.22-EAP-SNAPSHOT versions.intellijSdk=192.7142.36
versions.androidBuildTools=r23.0.1 versions.androidBuildTools=r23.0.1
versions.idea.NodeJS=181.3494.12 versions.idea.NodeJS=181.3494.12
versions.jar.asm-all=7.0.1 versions.jar.asm-all=7.0.1
versions.jar.guava=27.1-jre versions.jar.guava=25.1-jre
versions.jar.groovy-all=2.4.17 versions.jar.groovy-all=2.4.17
versions.jar.lombok-ast=0.2.3 versions.jar.lombok-ast=0.2.3
versions.jar.swingx-core=1.6.2-2 versions.jar.swingx-core=1.6.2-2
@@ -11,6 +11,5 @@ versions.jar.streamex=0.6.8
versions.jar.gson=2.8.5 versions.jar.gson=2.8.5
versions.jar.oro=2.0.8 versions.jar.oro=2.0.8
versions.jar.picocontainer=1.2 versions.jar.picocontainer=1.2
versions.jar.serviceMessages=2019.1.4
ignore.jar.snappy-in-java=true ignore.jar.snappy-in-java=true
versions.gradle-api=4.5.1 versions.gradle-api=4.5.1
@@ -4,8 +4,8 @@ public class Testing {
} }
} }
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractFun)" } // EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractFun" }
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractFunWithExpressionBody)" } // EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractFunWithExpressionBody" }
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractProperty)" } // EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractProperty" }
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractPropertyWithBody)" } // EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractPropertyWithBody" }
// ABSENT: { lookupString: "DefaultImpls", tailText: " (defaultImpls.AllAbstract)" } // ABSENT: { lookupString: "DefaultImpls", tailText: " defaultImpls.AllAbstract" }
@@ -0,0 +1,11 @@
public class Testing {
public static void test() {
DefaultImpl<caret>
}
}
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractFun)" }
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractFunWithExpressionBody)" }
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractProperty)" }
// EXIST: { lookupString: "DefaultImpls", tailText: " (defaultImpls.NonAbstractPropertyWithBody)" }
// ABSENT: { lookupString: "DefaultImpls", tailText: " (defaultImpls.AllAbstract)" }
@@ -1,11 +0,0 @@
public class Testing {
public static void test() {
DefaultImpl<caret>
}
}
// EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractFun" }
// EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractFunWithExpressionBody" }
// EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractProperty" }
// EXIST: { lookupString: "DefaultImpls", tailText: " defaultImpls.NonAbstractPropertyWithBody" }
// ABSENT: { lookupString: "DefaultImpls", tailText: " defaultImpls.AllAbstract" }
+2 -2
View File
@@ -5,5 +5,5 @@ public class Testing {
} }
// EXIST: EmptyList // EXIST: EmptyList
// EXIST: { lookupString:List,tailText:"<E> (java.util)" } // EXIST: { lookupString:List,tailText:"<E> java.util" }
// ABSENT: { lookupString:List,tailText:"<E> (kotlin.collections)" } // ABSENT: { lookupString:List,tailText:"<E> kotlin.collections" }
@@ -0,0 +1,9 @@
public class Testing {
public static void test() {
List<caret>
}
}
// EXIST: EmptyList
// EXIST: { lookupString:List,tailText:"<E> (java.util)" }
// ABSENT: { lookupString:List,tailText:"<E> (kotlin.collections)" }
@@ -1,9 +0,0 @@
public class Testing {
public static void test() {
List<caret>
}
}
// EXIST: EmptyList
// EXIST: { lookupString:List,tailText:"<E> java.util" }
// ABSENT: { lookupString:List,tailText:"<E> kotlin.collections" }
@@ -27,7 +27,7 @@ abstract class AbstractKotlinSourceInJavaCompletionTest : KotlinFixtureCompletio
val paths = collectPaths(mockLibDir).toTypedArray() val paths = collectPaths(mockLibDir).toTypedArray()
paths.forEach { path -> paths.forEach { path ->
val vFile = myFixture.copyFileToProject(path, path.substring(mockPath.length)) val vFile = myFixture.copyFileToProject(path.substringAfter(testDataPath), path.substring(mockPath.length))
myFixture.configureFromExistingVirtualFile(vFile) myFixture.configureFromExistingVirtualFile(vFile)
} }
@@ -27,7 +27,7 @@ abstract class AbstractKotlinSourceInJavaCompletionTest : KotlinFixtureCompletio
val paths = collectPaths(mockLibDir).toTypedArray() val paths = collectPaths(mockLibDir).toTypedArray()
paths.forEach { path -> paths.forEach { path ->
val vFile = myFixture.copyFileToProject(path.substringAfter(testDataPath), path.substring(mockPath.length)) val vFile = myFixture.copyFileToProject(path, path.substring(mockPath.length))
myFixture.configureFromExistingVirtualFile(vFile) myFixture.configureFromExistingVirtualFile(vFile)
} }
@@ -46,8 +46,6 @@ class JavaClassesInScriptDependenciesShortNameCache(private val project: Project
override fun getAllMethodNames() = emptyArray<String>() override fun getAllMethodNames() = emptyArray<String>()
override fun getAllMethodNames(set: HashSet<String>) {}
override fun getFieldsByName(name: String, scope: GlobalSearchScope) = PsiField.EMPTY_ARRAY override fun getFieldsByName(name: String, scope: GlobalSearchScope) = PsiField.EMPTY_ARRAY
override fun getMethodsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiMethod.EMPTY_ARRAY override fun getMethodsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiMethod.EMPTY_ARRAY
@@ -56,7 +54,5 @@ class JavaClassesInScriptDependenciesShortNameCache(private val project: Project
override fun getAllFieldNames() = emptyArray<String>() override fun getAllFieldNames() = emptyArray<String>()
override fun getAllFieldNames(set: HashSet<String>) {}
override fun getFieldsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiField.EMPTY_ARRAY override fun getFieldsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiField.EMPTY_ARRAY
} }
@@ -46,6 +46,8 @@ class JavaClassesInScriptDependenciesShortNameCache(private val project: Project
override fun getAllMethodNames() = emptyArray<String>() override fun getAllMethodNames() = emptyArray<String>()
override fun getAllMethodNames(set: HashSet<String>) {}
override fun getFieldsByName(name: String, scope: GlobalSearchScope) = PsiField.EMPTY_ARRAY override fun getFieldsByName(name: String, scope: GlobalSearchScope) = PsiField.EMPTY_ARRAY
override fun getMethodsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiMethod.EMPTY_ARRAY override fun getMethodsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiMethod.EMPTY_ARRAY
@@ -54,5 +56,7 @@ class JavaClassesInScriptDependenciesShortNameCache(private val project: Project
override fun getAllFieldNames() = emptyArray<String>() override fun getAllFieldNames() = emptyArray<String>()
override fun getAllFieldNames(set: HashSet<String>) {}
override fun getFieldsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiField.EMPTY_ARRAY override fun getFieldsByNameIfNotMoreThan(name: String, scope: GlobalSearchScope, maxCount: Int) = PsiField.EMPTY_ARRAY
} }
@@ -7,17 +7,12 @@ package org.jetbrains.kotlin.git
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Couple import com.intellij.openapi.util.Couple
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.vcs.FilePath import com.intellij.openapi.vcs.FilePath
import git4idea.checkin.GitCheckinExplicitMovementProvider import git4idea.checkin.GitCheckinExplicitMovementProvider
import org.jetbrains.kotlin.idea.actions.pathBeforeJ2K import org.jetbrains.kotlin.idea.actions.pathBeforeJ2K
import java.util.* import java.util.*
class KotlinExplicitMovementProvider : GitCheckinExplicitMovementProvider() { class KotlinExplicitMovementProvider : GitCheckinExplicitMovementProvider() {
init {
Registry.get("git.explicit.commit.renames.prohibit.multiple.calls").setValue(false)
}
override fun isEnabled(project: Project): Boolean { override fun isEnabled(project: Project): Boolean {
return true return true
} }
@@ -7,12 +7,17 @@ package org.jetbrains.kotlin.git
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Couple import com.intellij.openapi.util.Couple
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.vcs.FilePath import com.intellij.openapi.vcs.FilePath
import git4idea.checkin.GitCheckinExplicitMovementProvider import git4idea.checkin.GitCheckinExplicitMovementProvider
import org.jetbrains.kotlin.idea.actions.pathBeforeJ2K import org.jetbrains.kotlin.idea.actions.pathBeforeJ2K
import java.util.* import java.util.*
class KotlinExplicitMovementProvider : GitCheckinExplicitMovementProvider() { class KotlinExplicitMovementProvider : GitCheckinExplicitMovementProvider() {
init {
Registry.get("git.explicit.commit.renames.prohibit.multiple.calls").setValue(false)
}
override fun isEnabled(project: Project): Boolean { override fun isEnabled(project: Project): Boolean {
return true return true
} }
@@ -26,18 +26,19 @@ class ShowKotlinGradleDslLogs : IntentionAction, AnAction(), DumbAware {
} }
override fun actionPerformed(e: AnActionEvent) { override fun actionPerformed(e: AnActionEvent) {
openLogsDirIfPresent(e.project) val project = e.project ?: return
openLogsDirIfPresent(project)
} }
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?) = ShowFilePathAction.isSupported() override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?) = ShowFilePathAction.isSupported()
override fun update(e: AnActionEvent) { override fun update(e: AnActionEvent) {
val presentation = e.presentation val presentation = e.presentation
presentation.isVisible = ShowFilePathAction.isSupported() presentation.isEnabledAndVisible = e.project != null && ShowFilePathAction.isSupported()
presentation.text = NAME presentation.text = NAME
} }
private fun openLogsDirIfPresent(project: Project?) { private fun openLogsDirIfPresent(project: Project) {
val logsDir = findLogsDir() val logsDir = findLogsDir()
if (logsDir != null) { if (logsDir != null) {
ShowFilePathAction.openDirectory(logsDir) ShowFilePathAction.openDirectory(logsDir)
@@ -26,19 +26,18 @@ class ShowKotlinGradleDslLogs : IntentionAction, AnAction(), DumbAware {
} }
override fun actionPerformed(e: AnActionEvent) { override fun actionPerformed(e: AnActionEvent) {
val project = e.project ?: return openLogsDirIfPresent(e.project)
openLogsDirIfPresent(project)
} }
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?) = ShowFilePathAction.isSupported() override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?) = ShowFilePathAction.isSupported()
override fun update(e: AnActionEvent) { override fun update(e: AnActionEvent) {
val presentation = e.presentation val presentation = e.presentation
presentation.isEnabledAndVisible = e.project != null && ShowFilePathAction.isSupported() presentation.isVisible = ShowFilePathAction.isSupported()
presentation.text = NAME presentation.text = NAME
} }
private fun openLogsDirIfPresent(project: Project) { private fun openLogsDirIfPresent(project: Project?) {
val logsDir = findLogsDir() val logsDir = findLogsDir()
if (logsDir != null) { if (logsDir != null) {
ShowFilePathAction.openDirectory(logsDir) ShowFilePathAction.openDirectory(logsDir)
@@ -10,10 +10,8 @@ import com.intellij.ide.util.projectWizard.WizardContext
import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager
import com.intellij.openapi.externalSystem.model.ProjectSystemId import com.intellij.openapi.externalSystem.model.ProjectSystemId
import com.intellij.openapi.externalSystem.model.project.ModuleData import com.intellij.openapi.externalSystem.model.project.ModuleData
import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.ui.configuration.ModulesProvider
import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.KotlinIcons
@@ -23,11 +21,13 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.TargetSupportException import org.jetbrains.kotlin.konan.target.TargetSupportException
import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder
import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder
import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl
import org.jetbrains.plugins.gradle.settings.DistributionType import org.jetbrains.plugins.gradle.settings.DistributionType
import com.intellij.openapi.externalSystem.model.project.ProjectData import com.intellij.openapi.externalSystem.model.project.ProjectData
import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep
import com.intellij.openapi.roots.ui.configuration.ModulesProvider
import org.jetbrains.kotlin.idea.statistics.FUSEventGroups import org.jetbrains.kotlin.idea.statistics.FUSEventGroups
import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger
import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl
import javax.swing.Icon import javax.swing.Icon
abstract class KotlinGradleAbstractMultiplatformModuleBuilder( abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
@@ -38,6 +38,20 @@ abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
override fun getNodeIcon(): Icon = KotlinIcons.MPP override fun getNodeIcon(): Icon = KotlinIcons.MPP
/*
This overriding is a temporary workaround of a problem with how we use GradleModuleBuilder().
IDEA implies that we will create new GradleModuleBuilder every time we call Kotlin New Project Wizard.
But we create it once for every kind of GradleModuleBuilder-based New Project Wizard and the just reuse it.
How the problem looks for a user: KT-34229
Ticket that should properly fix it: KT-34591
*/
override fun cleanup() {
super.cleanup()
this.name = null
this.contentEntryPath = null
this.moduleFilePath = null
}
override fun createWizardSteps(wizardContext: WizardContext, modulesProvider: ModulesProvider): Array<ModuleWizardStep> { override fun createWizardSteps(wizardContext: WizardContext, modulesProvider: ModulesProvider): Array<ModuleWizardStep> {
super.createWizardSteps(wizardContext, modulesProvider) // initializes GradleModuleBuilder.myWizardContext super.createWizardSteps(wizardContext, modulesProvider) // initializes GradleModuleBuilder.myWizardContext
return arrayOf( return arrayOf(
@@ -10,8 +10,10 @@ import com.intellij.ide.util.projectWizard.WizardContext
import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager
import com.intellij.openapi.externalSystem.model.ProjectSystemId import com.intellij.openapi.externalSystem.model.ProjectSystemId
import com.intellij.openapi.externalSystem.model.project.ModuleData import com.intellij.openapi.externalSystem.model.project.ModuleData
import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.roots.ui.configuration.ModulesProvider
import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.KotlinIcons
@@ -21,13 +23,11 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.TargetSupportException import org.jetbrains.kotlin.konan.target.TargetSupportException
import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder
import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder
import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl
import org.jetbrains.plugins.gradle.settings.DistributionType import org.jetbrains.plugins.gradle.settings.DistributionType
import com.intellij.openapi.externalSystem.model.project.ProjectData import com.intellij.openapi.externalSystem.model.project.ProjectData
import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep
import com.intellij.openapi.roots.ui.configuration.ModulesProvider
import org.jetbrains.kotlin.idea.statistics.FUSEventGroups import org.jetbrains.kotlin.idea.statistics.FUSEventGroups
import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger
import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl
import javax.swing.Icon import javax.swing.Icon
abstract class KotlinGradleAbstractMultiplatformModuleBuilder( abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
@@ -38,20 +38,6 @@ abstract class KotlinGradleAbstractMultiplatformModuleBuilder(
override fun getNodeIcon(): Icon = KotlinIcons.MPP override fun getNodeIcon(): Icon = KotlinIcons.MPP
/*
This overriding is a temporary workaround of a problem with how we use GradleModuleBuilder().
IDEA implies that we will create new GradleModuleBuilder every time we call Kotlin New Project Wizard.
But we create it once for every kind of GradleModuleBuilder-based New Project Wizard and the just reuse it.
How the problem looks for a user: KT-34229
Ticket that should properly fix it: KT-34591
*/
override fun cleanup() {
super.cleanup()
this.name = null
this.contentEntryPath = null
this.moduleFilePath = null
}
override fun createWizardSteps(wizardContext: WizardContext, modulesProvider: ModulesProvider): Array<ModuleWizardStep> { override fun createWizardSteps(wizardContext: WizardContext, modulesProvider: ModulesProvider): Array<ModuleWizardStep> {
super.createWizardSteps(wizardContext, modulesProvider) // initializes GradleModuleBuilder.myWizardContext super.createWizardSteps(wizardContext, modulesProvider) // initializes GradleModuleBuilder.myWizardContext
return arrayOf( return arrayOf(
@@ -7,9 +7,11 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing
import com.intellij.openapi.externalSystem.model.DataNode import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.project.ProjectData import com.intellij.openapi.externalSystem.model.project.ProjectData
import org.gradle.tooling.model.GradleProject
import org.gradle.tooling.model.idea.IdeaProject import org.gradle.tooling.model.idea.IdeaProject
import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel
import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported
import org.jetbrains.plugins.gradle.model.Build
class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() { class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
override fun getModelProvider() = KotlinDslScriptModelProvider() override fun getModelProvider() = KotlinDslScriptModelProvider()
@@ -19,7 +21,7 @@ class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
super.populateProjectExtraModels(gradleProject, ideProject) super.populateProjectExtraModels(gradleProject, ideProject)
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) { if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
populateBuildModels(gradleProject, ideProject) populateBuildModels(resolverCtx.models.mainBuild, ideProject)
resolverCtx.models.includedBuilds.forEach { includedRoot -> resolverCtx.models.includedBuilds.forEach { includedRoot ->
populateBuildModels(includedRoot, ideProject) populateBuildModels(includedRoot, ideProject)
@@ -28,12 +30,12 @@ class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
} }
private fun populateBuildModels( private fun populateBuildModels(
root: IdeaProject, root: Build,
ideProject: DataNode<ProjectData> ideProject: DataNode<ProjectData>
) { ) {
root.modules.forEach { root.projects.forEach {
if (it.gradleProject.parent == null) { if ((it as? GradleProject)?.parent == null) {
resolverCtx.getExtraProject(it, KotlinDslScriptsModel::class.java)?.let { model -> resolverCtx.models.getModel(it, KotlinDslScriptsModel::class.java)?.let { model ->
ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels()) ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels())
} }
} }
@@ -7,11 +7,9 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing
import com.intellij.openapi.externalSystem.model.DataNode import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.project.ProjectData import com.intellij.openapi.externalSystem.model.project.ProjectData
import org.gradle.tooling.model.GradleProject
import org.gradle.tooling.model.idea.IdeaProject import org.gradle.tooling.model.idea.IdeaProject
import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel
import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported
import org.jetbrains.plugins.gradle.model.Build
class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() { class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
override fun getModelProvider() = KotlinDslScriptModelProvider() override fun getModelProvider() = KotlinDslScriptModelProvider()
@@ -21,7 +19,7 @@ class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
super.populateProjectExtraModels(gradleProject, ideProject) super.populateProjectExtraModels(gradleProject, ideProject)
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) { if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
populateBuildModels(resolverCtx.models.mainBuild, ideProject) populateBuildModels(gradleProject, ideProject)
resolverCtx.models.includedBuilds.forEach { includedRoot -> resolverCtx.models.includedBuilds.forEach { includedRoot ->
populateBuildModels(includedRoot, ideProject) populateBuildModels(includedRoot, ideProject)
@@ -30,12 +28,12 @@ class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
} }
private fun populateBuildModels( private fun populateBuildModels(
root: Build, root: IdeaProject,
ideProject: DataNode<ProjectData> ideProject: DataNode<ProjectData>
) { ) {
root.projects.forEach { root.modules.forEach {
if ((it as? GradleProject)?.parent == null) { if (it.gradleProject.parent == null) {
resolverCtx.models.getModel(it, KotlinDslScriptsModel::class.java)?.let { model -> resolverCtx.getExtraProject(it, KotlinDslScriptsModel::class.java)?.let { model ->
ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels()) ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels())
} }
} }
@@ -21,7 +21,10 @@ import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.keymap.KeymapManager import com.intellij.openapi.keymap.KeymapManager
import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.keymap.KeymapUtil
import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.DumbService
import com.intellij.task.ProjectTaskContext
import com.intellij.task.ProjectTaskManager import com.intellij.task.ProjectTaskManager
import com.intellij.task.ProjectTaskNotification
import com.intellij.task.ProjectTaskResult
import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.scratch.* import org.jetbrains.kotlin.idea.scratch.*
import org.jetbrains.kotlin.idea.scratch.printDebugMessage import org.jetbrains.kotlin.idea.scratch.printDebugMessage
@@ -72,19 +75,21 @@ class RunScratchAction : ScratchAction(
if (!isAutoRun && module != null && isMakeBeforeRun) { if (!isAutoRun && module != null && isMakeBeforeRun) {
val project = scratchFile.project val project = scratchFile.project
ProjectTaskManager.getInstance(project).build(arrayOf(module)) { result -> ProjectTaskManager.getInstance(project).build(arrayOf(module), object : ProjectTaskNotification {
if (result.isAborted || result.errors > 0) { override fun finished(context: ProjectTaskContext, executionResult: ProjectTaskResult) {
executor.errorOccurs("There were compilation errors in module ${module.name}") if (executionResult.isAborted || executionResult.errors > 0) {
} executor.errorOccurs("There were compilation errors in module ${module.name}")
}
if (DumbService.isDumb(project)) { if (DumbService.isDumb(project)) {
DumbService.getInstance(project).smartInvokeLater { DumbService.getInstance(project).smartInvokeLater {
executeScratch()
}
} else {
executeScratch() executeScratch()
} }
} else {
executeScratch()
} }
} })
} else { } else {
executeScratch() executeScratch()
} }
@@ -21,10 +21,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.keymap.KeymapManager import com.intellij.openapi.keymap.KeymapManager
import com.intellij.openapi.keymap.KeymapUtil import com.intellij.openapi.keymap.KeymapUtil
import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.DumbService
import com.intellij.task.ProjectTaskContext
import com.intellij.task.ProjectTaskManager import com.intellij.task.ProjectTaskManager
import com.intellij.task.ProjectTaskNotification
import com.intellij.task.ProjectTaskResult
import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.scratch.* import org.jetbrains.kotlin.idea.scratch.*
import org.jetbrains.kotlin.idea.scratch.printDebugMessage import org.jetbrains.kotlin.idea.scratch.printDebugMessage
@@ -75,21 +72,19 @@ class RunScratchAction : ScratchAction(
if (!isAutoRun && module != null && isMakeBeforeRun) { if (!isAutoRun && module != null && isMakeBeforeRun) {
val project = scratchFile.project val project = scratchFile.project
ProjectTaskManager.getInstance(project).build(arrayOf(module), object : ProjectTaskNotification { ProjectTaskManager.getInstance(project).build(arrayOf(module)) { result ->
override fun finished(context: ProjectTaskContext, executionResult: ProjectTaskResult) { if (result.isAborted || result.errors > 0) {
if (executionResult.isAborted || executionResult.errors > 0) { executor.errorOccurs("There were compilation errors in module ${module.name}")
executor.errorOccurs("There were compilation errors in module ${module.name}") }
}
if (DumbService.isDumb(project)) { if (DumbService.isDumb(project)) {
DumbService.getInstance(project).smartInvokeLater { DumbService.getInstance(project).smartInvokeLater {
executeScratch()
}
} else {
executeScratch() executeScratch()
} }
} else {
executeScratch()
} }
}) }
} else { } else {
executeScratch() executeScratch()
} }
@@ -22,7 +22,10 @@ import com.intellij.execution.ui.RunContentDescriptor
import com.intellij.openapi.compiler.CompilerManager import com.intellij.openapi.compiler.CompilerManager
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.task.ProjectTaskContext
import com.intellij.task.ProjectTaskManager import com.intellij.task.ProjectTaskManager
import com.intellij.task.ProjectTaskNotification
import com.intellij.task.ProjectTaskResult
class ConsoleCompilerHelper( class ConsoleCompilerHelper(
private val project: Project, private val project: Project,
@@ -39,11 +42,13 @@ class ConsoleCompilerHelper(
fun compileModule() { fun compileModule() {
if (ExecutionManager.getInstance(project).contentManager.removeRunContent(executor, contentDescriptor)) { if (ExecutionManager.getInstance(project).contentManager.removeRunContent(executor, contentDescriptor)) {
ProjectTaskManager.getInstance(project).build(arrayOf(module)) { result -> ProjectTaskManager.getInstance(project).build(arrayOf(module), object : ProjectTaskNotification {
if (!module.isDisposed) { override fun finished(context: ProjectTaskContext, executionResult: ProjectTaskResult) {
KotlinConsoleKeeper.getInstance(project).run(module, previousCompilationFailed = result.errors > 0) if (!module.isDisposed) {
KotlinConsoleKeeper.getInstance(project).run(module, previousCompilationFailed = executionResult.errors > 0)
}
} }
} })
} }
} }
} }
@@ -22,10 +22,7 @@ import com.intellij.execution.ui.RunContentDescriptor
import com.intellij.openapi.compiler.CompilerManager import com.intellij.openapi.compiler.CompilerManager
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.task.ProjectTaskContext
import com.intellij.task.ProjectTaskManager import com.intellij.task.ProjectTaskManager
import com.intellij.task.ProjectTaskNotification
import com.intellij.task.ProjectTaskResult
class ConsoleCompilerHelper( class ConsoleCompilerHelper(
private val project: Project, private val project: Project,
@@ -42,13 +39,11 @@ class ConsoleCompilerHelper(
fun compileModule() { fun compileModule() {
if (ExecutionManager.getInstance(project).contentManager.removeRunContent(executor, contentDescriptor)) { if (ExecutionManager.getInstance(project).contentManager.removeRunContent(executor, contentDescriptor)) {
ProjectTaskManager.getInstance(project).build(arrayOf(module), object : ProjectTaskNotification { ProjectTaskManager.getInstance(project).build(arrayOf(module)) { result ->
override fun finished(context: ProjectTaskContext, executionResult: ProjectTaskResult) { if (!module.isDisposed) {
if (!module.isDisposed) { KotlinConsoleKeeper.getInstance(project).run(module, previousCompilationFailed = result.errors > 0)
KotlinConsoleKeeper.getInstance(project).run(module, previousCompilationFailed = executionResult.errors > 0)
}
} }
}) }
} }
} }
} }
@@ -86,9 +86,9 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
UnusedSymbolInspection() UnusedSymbolInspection()
(StartupManager.getInstance(project) as StartupManagerImpl).runPostStartupActivities() (StartupManager.getInstance(project) as StartupManagerImpl).runPostStartupActivities()
VfsRootAccess.allowRootAccess(KotlinTestUtils.getHomeDirectory()) VfsRootAccess.allowRootAccess(project, KotlinTestUtils.getHomeDirectory())
project.getComponent(EditorTracker::class.java)?.projectOpened() EditorTracker.getInstance(project)
invalidateLibraryCache(project) invalidateLibraryCache(project)
@@ -105,8 +105,6 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
override fun tearDown() { override fun tearDown() {
LoggedErrorProcessor.restoreDefaultProcessor() LoggedErrorProcessor.restoreDefaultProcessor()
VfsRootAccess.disallowRootAccess(KotlinTestUtils.getHomeDirectory())
super.tearDown() super.tearDown()
if (exceptions.isNotEmpty()) { if (exceptions.isNotEmpty()) {
@@ -86,9 +86,9 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
UnusedSymbolInspection() UnusedSymbolInspection()
(StartupManager.getInstance(project) as StartupManagerImpl).runPostStartupActivities() (StartupManager.getInstance(project) as StartupManagerImpl).runPostStartupActivities()
VfsRootAccess.allowRootAccess(project, KotlinTestUtils.getHomeDirectory()) VfsRootAccess.allowRootAccess(KotlinTestUtils.getHomeDirectory())
EditorTracker.getInstance(project) project.getComponent(EditorTracker::class.java)?.projectOpened()
invalidateLibraryCache(project) invalidateLibraryCache(project)
@@ -105,6 +105,8 @@ abstract class KotlinLightCodeInsightFixtureTestCase : KotlinLightCodeInsightFix
override fun tearDown() { override fun tearDown() {
LoggedErrorProcessor.restoreDefaultProcessor() LoggedErrorProcessor.restoreDefaultProcessor()
VfsRootAccess.disallowRootAccess(KotlinTestUtils.getHomeDirectory())
super.tearDown() super.tearDown()
if (exceptions.isNotEmpty()) { if (exceptions.isNotEmpty()) {
@@ -17,8 +17,7 @@
package org.jetbrains.kotlin.idea.test; package org.jetbrains.kotlin.idea.test;
import com.intellij.openapi.module.Module; import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.module.ModuleTypeId;
import com.intellij.openapi.module.StdModuleTypes;
import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModifiableRootModel;
@@ -30,10 +29,11 @@ public class KotlinLightProjectDescriptor extends LightProjectDescriptor {
} }
public static final KotlinLightProjectDescriptor INSTANCE = new KotlinLightProjectDescriptor(); public static final KotlinLightProjectDescriptor INSTANCE = new KotlinLightProjectDescriptor();
@NotNull
@Override @Override
public ModuleType getModuleType() { public String getModuleTypeId() {
return StdModuleTypes.JAVA; return ModuleTypeId.JAVA_MODULE;
} }
@Override @Override
@@ -17,7 +17,8 @@
package org.jetbrains.kotlin.idea.test; package org.jetbrains.kotlin.idea.test;
import com.intellij.openapi.module.Module; import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleTypeId; import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.StdModuleTypes;
import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ContentEntry; import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ModifiableRootModel;
@@ -29,11 +30,10 @@ public class KotlinLightProjectDescriptor extends LightProjectDescriptor {
} }
public static final KotlinLightProjectDescriptor INSTANCE = new KotlinLightProjectDescriptor(); public static final KotlinLightProjectDescriptor INSTANCE = new KotlinLightProjectDescriptor();
@NotNull
@Override @Override
public String getModuleTypeId() { public ModuleType getModuleType() {
return ModuleTypeId.JAVA_MODULE; return StdModuleTypes.JAVA;
} }
@Override @Override
@@ -20,7 +20,7 @@ class CoroutineDebugConfigurationExtension : RunConfigurationExtension() {
override fun <T : RunConfigurationBase<*>?> updateJavaParameters( override fun <T : RunConfigurationBase<*>?> updateJavaParameters(
configuration: T, configuration: T,
params: JavaParameters?, params: JavaParameters,
runnerSettings: RunnerSettings? runnerSettings: RunnerSettings?
) { ) {
if (runnerSettings is DebuggingRunnerData && configuration is RunConfigurationBase<*>) { if (runnerSettings is DebuggingRunnerData && configuration is RunConfigurationBase<*>) {
@@ -20,7 +20,7 @@ class CoroutineDebugConfigurationExtension : RunConfigurationExtension() {
override fun <T : RunConfigurationBase<*>?> updateJavaParameters( override fun <T : RunConfigurationBase<*>?> updateJavaParameters(
configuration: T, configuration: T,
params: JavaParameters, params: JavaParameters?,
runnerSettings: RunnerSettings? runnerSettings: RunnerSettings?
) { ) {
if (runnerSettings is DebuggingRunnerData && configuration is RunConfigurationBase<*>) { if (runnerSettings is DebuggingRunnerData && configuration is RunConfigurationBase<*>) {
@@ -18,10 +18,11 @@ import com.intellij.openapi.project.ex.ProjectManagerEx
import com.intellij.openapi.startup.StartupManager import com.intellij.openapi.startup.StartupManager
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.impl.PsiDocumentManagerBase import com.intellij.psi.impl.PsiDocumentManagerBase
import com.intellij.testFramework.PlatformTestUtil import com.intellij.testFramework.ExtensionTestUtil
import com.intellij.testFramework.runInEdtAndWait import com.intellij.testFramework.runInEdtAndWait
import com.intellij.util.ui.UIUtil import com.intellij.util.ui.UIUtil
import org.jetbrains.kotlin.idea.parameterInfo.HintType import org.jetbrains.kotlin.idea.parameterInfo.HintType
import java.nio.file.Paths
import java.io.PrintWriter import java.io.PrintWriter
import java.io.StringWriter import java.io.StringWriter
@@ -66,7 +67,7 @@ fun dispatchAllInvocationEvents() {
} }
fun loadProjectWithName(path: String, name: String): Project? = fun loadProjectWithName(path: String, name: String): Project? =
ProjectManagerEx.getInstanceEx().loadProject(name, path) ProjectManagerEx.getInstanceEx().loadProject(Paths.get(path), name)
fun closeProject(project: Project) { fun closeProject(project: Project) {
dispatchAllInvocationEvents() dispatchAllInvocationEvents()
@@ -76,7 +77,7 @@ fun closeProject(project: Project) {
fun runStartupActivities(project: Project) { fun runStartupActivities(project: Project) {
with(StartupManager.getInstance(project) as StartupManagerImpl) { with(StartupManager.getInstance(project) as StartupManagerImpl) {
scheduleInitialVfsRefresh() //scheduleInitialVfsRefresh()
runStartupActivities() runStartupActivities()
runPostStartupActivities() runPostStartupActivities()
} }
@@ -87,7 +88,7 @@ fun waitForAllEditorsFinallyLoaded(project: Project) {
} }
fun replaceWithCustomHighlighter(parentDisposable: Disposable, fromImplementationClass: String, toImplementationClass: String) { fun replaceWithCustomHighlighter(parentDisposable: Disposable, fromImplementationClass: String, toImplementationClass: String) {
val pointName = ExtensionPointName.create<LanguageExtensionPoint<Annotator>>(LanguageAnnotators.EP_NAME) val pointName = ExtensionPointName.create<LanguageExtensionPoint<Annotator>>(LanguageAnnotators.EP_NAME.name)
val extensionPoint = pointName.getPoint(null) val extensionPoint = pointName.getPoint(null)
val point = LanguageExtensionPoint<Annotator>() val point = LanguageExtensionPoint<Annotator>()
@@ -100,7 +101,7 @@ fun replaceWithCustomHighlighter(parentDisposable: Disposable, fromImplementatio
.toList() .toList()
// custom highlighter is already registered if filteredExtensions has the same size as extensions // custom highlighter is already registered if filteredExtensions has the same size as extensions
if (filteredExtensions.size < extensions.size) { if (filteredExtensions.size < extensions.size) {
PlatformTestUtil.maskExtensions(pointName, filteredExtensions + listOf(point), parentDisposable) ExtensionTestUtil.maskExtensions(pointName, filteredExtensions + listOf(point), parentDisposable)
} }
} }
@@ -18,11 +18,10 @@ import com.intellij.openapi.project.ex.ProjectManagerEx
import com.intellij.openapi.startup.StartupManager import com.intellij.openapi.startup.StartupManager
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.impl.PsiDocumentManagerBase import com.intellij.psi.impl.PsiDocumentManagerBase
import com.intellij.testFramework.ExtensionTestUtil import com.intellij.testFramework.PlatformTestUtil
import com.intellij.testFramework.runInEdtAndWait import com.intellij.testFramework.runInEdtAndWait
import com.intellij.util.ui.UIUtil import com.intellij.util.ui.UIUtil
import org.jetbrains.kotlin.idea.parameterInfo.HintType import org.jetbrains.kotlin.idea.parameterInfo.HintType
import java.nio.file.Paths
import java.io.PrintWriter import java.io.PrintWriter
import java.io.StringWriter import java.io.StringWriter
@@ -67,7 +66,7 @@ fun dispatchAllInvocationEvents() {
} }
fun loadProjectWithName(path: String, name: String): Project? = fun loadProjectWithName(path: String, name: String): Project? =
ProjectManagerEx.getInstanceEx().loadProject(Paths.get(path), name) ProjectManagerEx.getInstanceEx().loadProject(name, path)
fun closeProject(project: Project) { fun closeProject(project: Project) {
dispatchAllInvocationEvents() dispatchAllInvocationEvents()
@@ -77,7 +76,7 @@ fun closeProject(project: Project) {
fun runStartupActivities(project: Project) { fun runStartupActivities(project: Project) {
with(StartupManager.getInstance(project) as StartupManagerImpl) { with(StartupManager.getInstance(project) as StartupManagerImpl) {
//scheduleInitialVfsRefresh() scheduleInitialVfsRefresh()
runStartupActivities() runStartupActivities()
runPostStartupActivities() runPostStartupActivities()
} }
@@ -88,7 +87,7 @@ fun waitForAllEditorsFinallyLoaded(project: Project) {
} }
fun replaceWithCustomHighlighter(parentDisposable: Disposable, fromImplementationClass: String, toImplementationClass: String) { fun replaceWithCustomHighlighter(parentDisposable: Disposable, fromImplementationClass: String, toImplementationClass: String) {
val pointName = ExtensionPointName.create<LanguageExtensionPoint<Annotator>>(LanguageAnnotators.EP_NAME.name) val pointName = ExtensionPointName.create<LanguageExtensionPoint<Annotator>>(LanguageAnnotators.EP_NAME)
val extensionPoint = pointName.getPoint(null) val extensionPoint = pointName.getPoint(null)
val point = LanguageExtensionPoint<Annotator>() val point = LanguageExtensionPoint<Annotator>()
@@ -101,7 +100,7 @@ fun replaceWithCustomHighlighter(parentDisposable: Disposable, fromImplementatio
.toList() .toList()
// custom highlighter is already registered if filteredExtensions has the same size as extensions // custom highlighter is already registered if filteredExtensions has the same size as extensions
if (filteredExtensions.size < extensions.size) { if (filteredExtensions.size < extensions.size) {
ExtensionTestUtil.maskExtensions(pointName, filteredExtensions + listOf(point), parentDisposable) PlatformTestUtil.maskExtensions(pointName, filteredExtensions + listOf(point), parentDisposable)
} }
} }
+5 -8
View File
@@ -13,13 +13,13 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
<version>@snapshot@</version> <version>@snapshot@</version>
<vendor url="http://www.jetbrains.com">JetBrains</vendor> <vendor url="http://www.jetbrains.com">JetBrains</vendor>
<idea-version since-build="192.7142.36" until-build="192.*"/> <idea-version since-build="193.4099.13" until-build="201.*"/>
<depends>com.intellij.modules.platform</depends> <depends>com.intellij.modules.platform</depends>
<depends optional="true" config-file="junit.xml">JUnit</depends> <depends optional="true" config-file="junit.xml">JUnit</depends>
<depends optional="true" config-file="gradle.xml">org.jetbrains.plugins.gradle</depends> <depends optional="true" config-file="gradle.xml">com.intellij.gradle</depends>
<depends optional="true" config-file="gradle-java.xml">org.jetbrains.plugins.gradle.java</depends> <depends optional="true" config-file="gradle-java.xml">org.jetbrains.plugins.gradle</depends>
<depends optional="true" config-file="gradle-groovy.xml">org.intellij.groovy</depends> <depends optional="true" config-file="gradle-groovy.xml">org.intellij.groovy</depends>
<depends optional="true" config-file="maven.xml">org.jetbrains.idea.maven</depends> <depends optional="true" config-file="maven.xml">org.jetbrains.idea.maven</depends>
<depends optional="true" config-file="testng-j.xml">TestNG-J</depends> <depends optional="true" config-file="testng-j.xml">TestNG-J</depends>
@@ -82,10 +82,7 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.ProjectConfigurationCollector"/> <statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.ProjectConfigurationCollector"/>
<fileTypeUsageSchemaDescriptor schema="Gradle Script" implementationClass="org.jetbrains.kotlin.idea.core.script.KotlinGradleScriptFileTypeSchemaDetector"/> <fileTypeUsageSchemaDescriptor schema="Gradle Script" implementationClass="org.jetbrains.kotlin.idea.core.script.KotlinGradleScriptFileTypeSchemaDetector"/>
<completion.ml.model implementation="org.jetbrains.kotlin.idea.completion.ml.KotlinMLRankingProvider"/>
</extensions> </extensions>
<extensions defaultExtensionNs="com.intellij">
<focusModeProvider language="kotlin" implementationClass="org.jetbrains.kotlin.idea.core.KotlinFocusModeProvider" />
</extensions>
</idea-plugin> </idea-plugin>
@@ -13,13 +13,13 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
<version>@snapshot@</version> <version>@snapshot@</version>
<vendor url="http://www.jetbrains.com">JetBrains</vendor> <vendor url="http://www.jetbrains.com">JetBrains</vendor>
<idea-version since-build="193.4099.13" until-build="201.*"/> <idea-version since-build="192.7142.36" until-build="192.*"/>
<depends>com.intellij.modules.platform</depends> <depends>com.intellij.modules.platform</depends>
<depends optional="true" config-file="junit.xml">JUnit</depends> <depends optional="true" config-file="junit.xml">JUnit</depends>
<depends optional="true" config-file="gradle.xml">com.intellij.gradle</depends> <depends optional="true" config-file="gradle.xml">org.jetbrains.plugins.gradle</depends>
<depends optional="true" config-file="gradle-java.xml">org.jetbrains.plugins.gradle</depends> <depends optional="true" config-file="gradle-java.xml">org.jetbrains.plugins.gradle.java</depends>
<depends optional="true" config-file="gradle-groovy.xml">org.intellij.groovy</depends> <depends optional="true" config-file="gradle-groovy.xml">org.intellij.groovy</depends>
<depends optional="true" config-file="maven.xml">org.jetbrains.idea.maven</depends> <depends optional="true" config-file="maven.xml">org.jetbrains.idea.maven</depends>
<depends optional="true" config-file="testng-j.xml">TestNG-J</depends> <depends optional="true" config-file="testng-j.xml">TestNG-J</depends>
@@ -82,7 +82,10 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
<statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.ProjectConfigurationCollector"/> <statistics.projectUsagesCollector implementation="org.jetbrains.kotlin.idea.statistics.ProjectConfigurationCollector"/>
<fileTypeUsageSchemaDescriptor schema="Gradle Script" implementationClass="org.jetbrains.kotlin.idea.core.script.KotlinGradleScriptFileTypeSchemaDetector"/> <fileTypeUsageSchemaDescriptor schema="Gradle Script" implementationClass="org.jetbrains.kotlin.idea.core.script.KotlinGradleScriptFileTypeSchemaDetector"/>
<completion.ml.model implementation="org.jetbrains.kotlin.idea.completion.ml.KotlinMLRankingProvider"/>
</extensions> </extensions>
<extensions defaultExtensionNs="com.intellij">
<focusModeProvider language="kotlin" implementationClass="org.jetbrains.kotlin.idea.core.KotlinFocusModeProvider" />
</extensions>
</idea-plugin> </idea-plugin>
@@ -83,9 +83,7 @@ abstract class AbstractCompletionBenchmarkAction : AnAction() {
generateSequence { this.randomElement(random) }.distinct() generateSequence { this.randomElement(random) }.distinct()
internal fun collectSuitableKotlinFiles(project: Project, filePredicate: (KtFile) -> Boolean): MutableList<KtFile> { internal fun collectSuitableKotlinFiles(project: Project, filePredicate: (KtFile) -> Boolean): MutableList<KtFile> {
val scope = object : DelegatingGlobalSearchScope(GlobalSearchScope.allScope(project)) { val scope = GlobalSearchScope.allScope(project)
override fun isSearchOutsideRootModel(): Boolean = false
}
fun KtFile.isUsableForBenchmark(): Boolean { fun KtFile.isUsableForBenchmark(): Boolean {
val moduleInfo = this.getNullableModuleInfo() ?: return false val moduleInfo = this.getNullableModuleInfo() ?: return false
@@ -83,7 +83,9 @@ abstract class AbstractCompletionBenchmarkAction : AnAction() {
generateSequence { this.randomElement(random) }.distinct() generateSequence { this.randomElement(random) }.distinct()
internal fun collectSuitableKotlinFiles(project: Project, filePredicate: (KtFile) -> Boolean): MutableList<KtFile> { internal fun collectSuitableKotlinFiles(project: Project, filePredicate: (KtFile) -> Boolean): MutableList<KtFile> {
val scope = GlobalSearchScope.allScope(project) val scope = object : DelegatingGlobalSearchScope(GlobalSearchScope.allScope(project)) {
override fun isSearchOutsideRootModel(): Boolean = false
}
fun KtFile.isUsableForBenchmark(): Boolean { fun KtFile.isUsableForBenchmark(): Boolean {
val moduleInfo = this.getNullableModuleInfo() ?: return false val moduleInfo = this.getNullableModuleInfo() ?: return false
@@ -5,8 +5,6 @@
package org.jetbrains.kotlin.idea.migration package org.jetbrains.kotlin.idea.migration
import com.intellij.codeInspection.InspectionEP
import com.intellij.codeInspection.InspectionProfileEntry
import com.intellij.codeInspection.ex.InspectionManagerEx import com.intellij.codeInspection.ex.InspectionManagerEx
import com.intellij.codeInspection.ex.InspectionProfileImpl import com.intellij.codeInspection.ex.InspectionProfileImpl
import com.intellij.codeInspection.ex.InspectionToolWrapper import com.intellij.codeInspection.ex.InspectionToolWrapper
@@ -56,7 +54,7 @@ fun createMigrationProfile(
fun applicableMigrationTools(migrationInfo: MigrationInfo) = applicableMigrationToolsImpl(migrationInfo) fun applicableMigrationTools(migrationInfo: MigrationInfo) = applicableMigrationToolsImpl(migrationInfo)
private fun applicableMigrationToolsImpl(migrationInfo: MigrationInfo?): List<InspectionToolWrapper<InspectionProfileEntry, InspectionEP>> { private fun applicableMigrationToolsImpl(migrationInfo: MigrationInfo?): List<InspectionToolWrapper<*, *>> {
val rootProfile = InspectionProfileManager.getInstance().currentProfile val rootProfile = InspectionProfileManager.getInstance().currentProfile
return rootProfile.allTools.asSequence() return rootProfile.allTools.asSequence()
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.idea.migration package org.jetbrains.kotlin.idea.migration
import com.intellij.codeInspection.InspectionEP
import com.intellij.codeInspection.InspectionProfileEntry
import com.intellij.codeInspection.ex.InspectionManagerEx import com.intellij.codeInspection.ex.InspectionManagerEx
import com.intellij.codeInspection.ex.InspectionProfileImpl import com.intellij.codeInspection.ex.InspectionProfileImpl
import com.intellij.codeInspection.ex.InspectionToolWrapper import com.intellij.codeInspection.ex.InspectionToolWrapper
@@ -54,7 +56,7 @@ fun createMigrationProfile(
fun applicableMigrationTools(migrationInfo: MigrationInfo) = applicableMigrationToolsImpl(migrationInfo) fun applicableMigrationTools(migrationInfo: MigrationInfo) = applicableMigrationToolsImpl(migrationInfo)
private fun applicableMigrationToolsImpl(migrationInfo: MigrationInfo?): List<InspectionToolWrapper<*, *>> { private fun applicableMigrationToolsImpl(migrationInfo: MigrationInfo?): List<InspectionToolWrapper<InspectionProfileEntry, InspectionEP>> {
val rootProfile = InspectionProfileManager.getInstance().currentProfile val rootProfile = InspectionProfileManager.getInstance().currentProfile
return rootProfile.allTools.asSequence() return rootProfile.allTools.asSequence()
@@ -41,7 +41,6 @@ import com.intellij.refactoring.BaseRefactoringProcessor.ConflictsInTestsExcepti
import com.intellij.refactoring.changeSignature.ChangeSignatureUtil import com.intellij.refactoring.changeSignature.ChangeSignatureUtil
import com.intellij.refactoring.listeners.RefactoringEventData import com.intellij.refactoring.listeners.RefactoringEventData
import com.intellij.refactoring.listeners.RefactoringEventListener import com.intellij.refactoring.listeners.RefactoringEventListener
import com.intellij.refactoring.rename.PsiElementRenameHandler
import com.intellij.refactoring.ui.ConflictsDialog import com.intellij.refactoring.ui.ConflictsDialog
import com.intellij.refactoring.util.ConflictsUtil import com.intellij.refactoring.util.ConflictsUtil
import com.intellij.refactoring.util.RefactoringUIUtil import com.intellij.refactoring.util.RefactoringUIUtil
@@ -485,7 +484,7 @@ private fun <T> copyTypeParameters(
inserter(to, factory.createTypeParameterList()) inserter(to, factory.createTypeParameterList())
val targetTypeParamList = to.typeParameterList val targetTypeParamList = to.typeParameterList
val newTypeParams = templateTypeParams.map { val newTypeParams = templateTypeParams.map {
factory.createTypeParameter(it.name, it.extendsList.referencedTypes) factory.createTypeParameter(it.name!!, it.extendsList.referencedTypes)
} }
ChangeSignatureUtil.synchronizeList( ChangeSignatureUtil.synchronizeList(
targetTypeParamList, targetTypeParamList,
@@ -960,20 +959,17 @@ fun checkSuperMethodsWithPopup(
append(" of ") append(" of ")
append(SymbolPresentationUtil.getSymbolPresentableText(superClass)) append(SymbolPresentationUtil.getSymbolPresentableText(superClass))
} }
val list = JBList<String>(renameBase, renameCurrent)
JBPopupFactory.getInstance() JBPopupFactory.getInstance()
.createPopupChooserBuilder(listOf(renameBase, renameCurrent)) .createListPopupBuilder(list)
.setTitle(title) .setTitle(title)
.setMovable(false) .setMovable(false)
.setResizable(false) .setResizable(false)
.setRequestFocus(true) .setRequestFocus(true)
.setItemChosenCallback { selected -> .setItemChoosenCallback {
if (selected == renameBase) { val value = list.selectedValue ?: return@setItemChoosenCallback
val ableToRename = declaration.project.let { project -> val chosenElements = if (value == renameBase) deepestSuperMethods + declaration else listOf(declaration)
deepestSuperMethods.all { PsiElementRenameHandler.canRename(project, editor, it) } action(chosenElements)
}
if (ableToRename) action(deepestSuperMethods + declaration)
} else action(listOf(declaration))
} }
.createPopup() .createPopup()
.showInBestPositionFor(editor) .showInBestPositionFor(editor)
@@ -41,6 +41,7 @@ import com.intellij.refactoring.BaseRefactoringProcessor.ConflictsInTestsExcepti
import com.intellij.refactoring.changeSignature.ChangeSignatureUtil import com.intellij.refactoring.changeSignature.ChangeSignatureUtil
import com.intellij.refactoring.listeners.RefactoringEventData import com.intellij.refactoring.listeners.RefactoringEventData
import com.intellij.refactoring.listeners.RefactoringEventListener import com.intellij.refactoring.listeners.RefactoringEventListener
import com.intellij.refactoring.rename.PsiElementRenameHandler
import com.intellij.refactoring.ui.ConflictsDialog import com.intellij.refactoring.ui.ConflictsDialog
import com.intellij.refactoring.util.ConflictsUtil import com.intellij.refactoring.util.ConflictsUtil
import com.intellij.refactoring.util.RefactoringUIUtil import com.intellij.refactoring.util.RefactoringUIUtil
@@ -484,7 +485,7 @@ private fun <T> copyTypeParameters(
inserter(to, factory.createTypeParameterList()) inserter(to, factory.createTypeParameterList())
val targetTypeParamList = to.typeParameterList val targetTypeParamList = to.typeParameterList
val newTypeParams = templateTypeParams.map { val newTypeParams = templateTypeParams.map {
factory.createTypeParameter(it.name!!, it.extendsList.referencedTypes) factory.createTypeParameter(it.name, it.extendsList.referencedTypes)
} }
ChangeSignatureUtil.synchronizeList( ChangeSignatureUtil.synchronizeList(
targetTypeParamList, targetTypeParamList,
@@ -959,17 +960,20 @@ fun checkSuperMethodsWithPopup(
append(" of ") append(" of ")
append(SymbolPresentationUtil.getSymbolPresentableText(superClass)) append(SymbolPresentationUtil.getSymbolPresentableText(superClass))
} }
val list = JBList<String>(renameBase, renameCurrent)
JBPopupFactory.getInstance() JBPopupFactory.getInstance()
.createListPopupBuilder(list) .createPopupChooserBuilder(listOf(renameBase, renameCurrent))
.setTitle(title) .setTitle(title)
.setMovable(false) .setMovable(false)
.setResizable(false) .setResizable(false)
.setRequestFocus(true) .setRequestFocus(true)
.setItemChoosenCallback { .setItemChosenCallback { selected ->
val value = list.selectedValue ?: return@setItemChoosenCallback if (selected == renameBase) {
val chosenElements = if (value == renameBase) deepestSuperMethods + declaration else listOf(declaration) val ableToRename = declaration.project.let { project ->
action(chosenElements) deepestSuperMethods.all { PsiElementRenameHandler.canRename(project, editor, it) }
}
if (ableToRename) action(deepestSuperMethods + declaration)
} else action(listOf(declaration))
} }
.createPopup() .createPopup()
.showInBestPositionFor(editor) .showInBestPositionFor(editor)
@@ -10,5 +10,5 @@ import java.util.concurrent.Future
object ProgressIndicatorUtils { object ProgressIndicatorUtils {
@JvmStatic @JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) = fun <T> awaitWithCheckCanceled(future: Future<T>) =
com.intellij.openapi.progress.util.BackgroundTaskUtil.awaitWithCheckCanceled(future) com.intellij.openapi.progress.util.ProgressIndicatorUtils.awaitWithCheckCanceled(future)
} }
@@ -10,5 +10,5 @@ import java.util.concurrent.Future
object ProgressIndicatorUtils { object ProgressIndicatorUtils {
@JvmStatic @JvmStatic
fun <T> awaitWithCheckCanceled(future: Future<T>) = fun <T> awaitWithCheckCanceled(future: Future<T>) =
com.intellij.openapi.progress.util.ProgressIndicatorUtils.awaitWithCheckCanceled(future) com.intellij.openapi.progress.util.BackgroundTaskUtil.awaitWithCheckCanceled(future)
} }

Some files were not shown because too many files have changed in this diff Show More