escape $ in short names only (IDEA-27168); cleanup utils

This commit is contained in:
anna
2010-01-14 14:28:46 +03:00
parent f61bb47133
commit f4e148f0d5
8 changed files with 29 additions and 58 deletions
@@ -27,6 +27,7 @@ import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiClassUtil;
@@ -134,9 +135,16 @@ public class JavaExecutionUtil {
@Nullable
public static PsiClass findMainClass(final Module module, final String mainClassName) {
final PsiManager psiManager = PsiManager.getInstance(module.getProject());
return findMainClass(module.getProject(), mainClassName, GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module));
}
@Nullable
public static PsiClass findMainClass(final Project project, final String mainClassName, final GlobalSearchScope scope) {
final PsiManager psiManager = PsiManager.getInstance(project);
final String shortName = StringUtil.getShortName(mainClassName);
final String packageName = StringUtil.getPackageName(mainClassName);
return JavaPsiFacade.getInstance(psiManager.getProject())
.findClass(mainClassName.replace('$', '.'), GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module));
.findClass(StringUtil.getQualifiedName(packageName, shortName.replace('$', '.')), scope);
}
@@ -1,37 +0,0 @@
/*
* Copyright 2000-2009 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 com.intellij.execution;
import com.intellij.openapi.project.Project;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.Nullable;
/**
* @author spleaner
*/
public class PsiClassLocationUtil {
private PsiClassLocationUtil() {
}
@Nullable
public static Location<PsiClass> fromClassQualifiedName(final Project project, final String qualifiedName) {
final PsiClass psiClass =
JavaPsiFacade.getInstance(project).findClass(qualifiedName.replace('$', '.'), GlobalSearchScope.allScope(project));
return psiClass != null ? new PsiLocation<PsiClass>(project, psiClass) : null;
}
}
@@ -16,6 +16,7 @@
package com.intellij.execution.configurations;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.ModuleUtil;
@@ -57,7 +58,7 @@ public class JavaRunConfigurationModule extends RunConfigurationModule {
else {
scope = myClassesInLibraries ? GlobalSearchScope.allScope(getProject()) : GlobalSearchScope.projectScope(getProject());
}
return JavaPsiFacade.getInstance(getProject()).findClass(qualifiedName.replace('$', '.'), scope);
return JavaExecutionUtil.findMainClass(getProject(), qualifiedName, scope);
}
public static Collection<Module> getModulesForClass(@NotNull final Project project, final String className) {
@@ -194,7 +194,7 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
}
public PsiClass getPsiElement() {
return getConfigurationModule().findClass(myData.getMainClassPsiName());
return getConfigurationModule().findClass(myData.getMainClassName());
}
public void setPsiElement(final PsiClass psiClass) {
@@ -398,10 +398,6 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
return MAIN_CLASS_NAME != null ? MAIN_CLASS_NAME : "";
}
public String getMainClassPsiName() {
return getMainClassName().replace('$', '.');
}
public String getPackageName() {
return PACKAGE_NAME != null ? PACKAGE_NAME : "";
}
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.rt.execution.junit.JUnitStarter;
@@ -39,8 +40,9 @@ class TestClass extends TestObject {
final JUnitConfiguration.Data data = myConfiguration.getPersistentData();
RunConfigurationModule module = myConfiguration.getConfigurationModule();
configureModule(myJavaParameters, module, data.getMainClassName());
Location<PsiClass> classLocation = PsiClassLocationUtil.fromClassQualifiedName(module.getProject(), data.getMainClassPsiName());
if (JUnitUtil.isJUnit4TestClass(classLocation.getPsiElement())) {
final Project project = module.getProject();
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, data.getMainClassName(), GlobalSearchScope.allScope(project));
if (JUnitUtil.isJUnit4TestClass(psiClass)) {
myJavaParameters.getProgramParametersList().add(JUnitStarter.JUNIT4_PARAMETER);
}
myJavaParameters.getProgramParametersList().add(data.getMainClassName());
@@ -24,6 +24,7 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.rt.execution.junit.JUnitStarter;
import org.jetbrains.annotations.NotNull;
@@ -51,14 +52,14 @@ class TestMethod extends TestObject {
}
protected void addJUnit4Parameter(final JUnitConfiguration.Data data, Project project) {
Location<PsiClass> classLocation = PsiClassLocationUtil.fromClassQualifiedName(project, data.getMainClassPsiName());
PsiClass aClass = classLocation.getPsiElement();
if (JUnitUtil.isJUnit4TestClass(aClass)) {
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, data.getMainClassName(), GlobalSearchScope.allScope(project));
LOG.assertTrue(psiClass != null);
if (JUnitUtil.isJUnit4TestClass(psiClass)) {
myJavaParameters.getProgramParametersList().add(JUnitStarter.JUNIT4_PARAMETER);
return;
}
final String methodName = data.getMethodName();
PsiMethod[] methods = aClass.findMethodsByName(methodName, true);
PsiMethod[] methods = psiClass.findMethodsByName(methodName, true);
for (PsiMethod method : methods) {
if (JUnitUtil.isTestAnnotated(method)) {
myJavaParameters.getProgramParametersList().add(JUnitStarter.JUNIT4_PARAMETER);
@@ -16,10 +16,13 @@
package com.intellij.execution.junit2.info;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.Location;
import com.intellij.execution.PsiClassLocationUtil;
import com.intellij.execution.PsiLocation;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
public class PsiClassLocator implements PsiLocator {
private final String myName;
@@ -39,7 +42,8 @@ public class PsiClassLocator implements PsiLocator {
}
public Location<PsiClass> getLocation(final Project project) {
return PsiClassLocationUtil.fromClassQualifiedName(project, getQualifiedName());
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, getQualifiedName(), GlobalSearchScope.allScope(project));
return psiClass != null ? new PsiLocation<PsiClass>(project, psiClass) : null;
}
public String getPackage() {
@@ -51,6 +55,6 @@ public class PsiClassLocator implements PsiLocator {
}
public String getQualifiedName() {
return (myPackage.length() > 0 ? myPackage + "." : "") + myName;
return StringUtil.getQualifiedName(myPackage, myName);
}
}
@@ -208,10 +208,6 @@ public class TestData implements Cloneable
return MAIN_CLASS_NAME == null ? "" : MAIN_CLASS_NAME;
}
public String getMainClassPsiName() {
return getMainClassName().replace('$', '.');
}
public Module setTestMethod(Location<PsiMethod> location) {
final PsiMethod method = location.getPsiElement();
METHOD_NAME = method.getName();