KT-780 NullPointerException on constructing new run configuration
This commit is contained in:
@@ -8,7 +8,8 @@ import com.intellij.openapi.module.Module;
|
|||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetClass;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
import org.jetbrains.jet.lang.psi.JetPsiUtil;
|
||||||
import org.jetbrains.jet.plugin.JetMainDetector;
|
import org.jetbrains.jet.plugin.JetMainDetector;
|
||||||
@@ -17,24 +18,26 @@ import org.jetbrains.jet.plugin.JetMainDetector;
|
|||||||
* @author yole
|
* @author yole
|
||||||
*/
|
*/
|
||||||
public class JetRunConfigurationProducer extends RuntimeConfigurationProducer implements Cloneable {
|
public class JetRunConfigurationProducer extends RuntimeConfigurationProducer implements Cloneable {
|
||||||
|
@Nullable
|
||||||
private PsiElement mySourceElement;
|
private PsiElement mySourceElement;
|
||||||
|
|
||||||
public JetRunConfigurationProducer() {
|
public JetRunConfigurationProducer() {
|
||||||
super(JetRunConfigurationType.getInstance());
|
super(JetRunConfigurationType.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public PsiElement getSourceElement() {
|
public PsiElement getSourceElement() {
|
||||||
return mySourceElement;
|
return mySourceElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext configurationContext) {
|
protected RunnerAndConfigurationSettings createConfigurationByElement(@NotNull Location location, ConfigurationContext configurationContext) {
|
||||||
JetClass containingClass = (JetClass) location.getParentElement(JetClass.class);
|
final Module module = location.getModule();
|
||||||
if (containingClass != null && JetMainDetector.hasMain(containingClass.getDeclarations())) {
|
if (module == null) {
|
||||||
mySourceElement = containingClass;
|
return null;
|
||||||
return createConfigurationByQName(location.getModule(), configurationContext, JetPsiUtil.getFQName(containingClass));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PsiFile psiFile = location.getPsiElement().getContainingFile();
|
PsiFile psiFile = location.getPsiElement().getContainingFile();
|
||||||
if (psiFile instanceof JetFile) {
|
if (psiFile instanceof JetFile) {
|
||||||
JetFile jetFile = (JetFile) psiFile;
|
JetFile jetFile = (JetFile) psiFile;
|
||||||
@@ -42,13 +45,17 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im
|
|||||||
mySourceElement = jetFile;
|
mySourceElement = jetFile;
|
||||||
String fqName = JetPsiUtil.getFQName(jetFile);
|
String fqName = JetPsiUtil.getFQName(jetFile);
|
||||||
String className = fqName.length() == 0 ? "namespace" : fqName + ".namespace";
|
String className = fqName.length() == 0 ? "namespace" : fqName + ".namespace";
|
||||||
return createConfigurationByQName(location.getModule(), configurationContext, className);
|
return createConfigurationByQName(module, configurationContext, className);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RunnerAndConfigurationSettings createConfigurationByQName(Module module, ConfigurationContext context, String fqName) {
|
private RunnerAndConfigurationSettings createConfigurationByQName(
|
||||||
|
@NotNull Module module,
|
||||||
|
ConfigurationContext context,
|
||||||
|
@NotNull String fqName
|
||||||
|
) {
|
||||||
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(module.getProject(), context);
|
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(module.getProject(), context);
|
||||||
JetRunConfiguration configuration = (JetRunConfiguration) settings.getConfiguration();
|
JetRunConfiguration configuration = (JetRunConfiguration) settings.getConfiguration();
|
||||||
configuration.setModule(module);
|
configuration.setModule(module);
|
||||||
|
|||||||
Reference in New Issue
Block a user