193: Fix compilation because method replace in 193

This commit is contained in:
Nikolay Krasko
2019-10-16 15:02:55 +03:00
parent 8d355f7003
commit a743835011
2 changed files with 219 additions and 0 deletions
@@ -0,0 +1,51 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.test;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleTypeId;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.testFramework.LightProjectDescriptor;
import org.jetbrains.annotations.NotNull;
public class KotlinLightProjectDescriptor extends LightProjectDescriptor {
protected KotlinLightProjectDescriptor() {
}
public static final KotlinLightProjectDescriptor INSTANCE = new KotlinLightProjectDescriptor();
@NotNull
@Override
public String getModuleTypeId() {
return ModuleTypeId.JAVA_MODULE;
}
@Override
public Sdk getSdk() {
return PluginTestCaseBase.mockJdk();
}
@Override
public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) {
configureModule(module, model);
}
public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model) {
}
}
@@ -0,0 +1,168 @@
/*
* 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.idea.configuration;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaModule;
import com.intellij.psi.search.FilenameIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.LightCodeInsightTestCase;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.idea.core.script.ScriptUtilsKt;
import org.jetbrains.kotlin.test.InTextDirectivesUtils;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.plugins.groovy.GroovyFileType;
import java.io.File;
import java.io.IOException;
import java.util.Objects;
public abstract class AbstractConfigureProjectByChangingFileTest<C extends KotlinProjectConfigurator> extends LightCodeInsightTestCase {
private static final String DEFAULT_VERSION = "default_version";
private PsiFile moduleInfoFile;
@Override
protected void setUp() throws Exception {
super.setUp();
ApplicationManager.getApplication().runWriteAction(
() -> FileTypeManager.getInstance().associateExtension(GroovyFileType.GROOVY_FILE_TYPE, "gradle")
);
ScriptUtilsKt.setScriptDependenciesUpdaterDisabled(ApplicationManager.getApplication(), true);
}
@Override
protected void tearDown() throws Exception {
ScriptUtilsKt.setScriptDependenciesUpdaterDisabled(ApplicationManager.getApplication(), false);
moduleInfoFile = null;
super.tearDown();
}
protected void doTest(@NotNull String beforeFile, @NotNull String afterFile, @NotNull C configurator) throws Exception {
configureByFile(beforeFile);
prepareModuleInfoFile(beforeFile);
String versionFromFile = InTextDirectivesUtils.findStringWithPrefixes(getFile().getText(), "// VERSION:");
String version = versionFromFile != null ? versionFromFile : DEFAULT_VERSION;
NotificationMessageCollector collector = NotificationMessageCollectorKt.createConfigureKotlinNotificationCollector(getProject());
runConfigurator(getModule(), getFile(), configurator, version, collector);
collector.showNotification();
KotlinTestUtils.assertEqualsToFile(new File(afterFile), getFile().getText().replace(version, "$VERSION$"));
checkModuleInfoFile(beforeFile);
}
private void prepareModuleInfoFile(@NotNull String beforeFile) throws IOException {
File file = new File(beforeFile);
String parent = file.getParent();
File moduleInfo = new File(parent, PsiJavaModule.MODULE_INFO_FILE);
moduleInfoFile = null;
if (moduleInfo.exists()) {
String fileText = FileUtilRt.loadFile(moduleInfo, CharsetToolkit.UTF8, true);
createAndSaveFile(PsiJavaModule.MODULE_INFO_FILE, fileText);
PsiFile[] moduleInfoFiles =
FilenameIndex.getFilesByName(getProject(), PsiJavaModule.MODULE_INFO_FILE, GlobalSearchScope.allScope(getProject()));
assertTrue(PsiJavaModule.MODULE_INFO_FILE + " should be present in index", moduleInfoFiles.length == 1);
moduleInfoFile = moduleInfoFiles[0];
}
}
private void checkModuleInfoFile(@NotNull String beforeFile) {
File file = new File(beforeFile);
String parent = file.getParent();
if (moduleInfoFile != null) {
String afterFileName = PsiJavaModule.MODULE_INFO_FILE.replace(".java", "_after.java");
commitAllDocuments();
KotlinTestUtils.assertEqualsToFile(new File(parent, afterFileName), moduleInfoFile.getText());
}
}
protected abstract void runConfigurator(
Module module, @NotNull PsiFile file,
@NotNull C configurator,
@NotNull String version,
@NotNull NotificationMessageCollector collector
);
@NotNull
@Override
protected String getTestDataPath() {
return "";
}
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return new SimpleLightProjectDescriptor(getModuleTypeId(), getProjectJDK());
}
private static class SimpleLightProjectDescriptor extends LightProjectDescriptor {
@NotNull private final String myModuleTypeId;
@Nullable private final Sdk mySdk;
SimpleLightProjectDescriptor(@NotNull String moduleTypeId, @Nullable Sdk sdk) {
myModuleTypeId = moduleTypeId;
mySdk = sdk;
}
@NotNull
@Override
public String getModuleTypeId() {
return myModuleTypeId;
}
@Nullable
@Override
public Sdk getSdk() {
return mySdk;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SimpleLightProjectDescriptor that = (SimpleLightProjectDescriptor)o;
if (!myModuleTypeId.equals(that.myModuleTypeId)) return false;
return areJdksEqual(that.getSdk());
}
@Override
public int hashCode() {
return myModuleTypeId.hashCode();
}
private boolean areJdksEqual(Sdk newSdk) {
if (mySdk == null || newSdk == null) return mySdk == newSdk;
if (!Objects.equals(mySdk.getVersionString(), newSdk.getVersionString())) {
return false;
}
String[] myUrls = mySdk.getRootProvider().getUrls(OrderRootType.CLASSES);
String[] newUrls = newSdk.getRootProvider().getUrls(OrderRootType.CLASSES);
return ContainerUtil.newHashSet(myUrls).equals(ContainerUtil.newHashSet(newUrls));
}
}
}