Update JetExceptionFilter to the latest API, fix warnings

This commit is contained in:
Alexander Udalov
2014-09-24 15:49:39 +04:00
parent 8f92141137
commit 43c26d0947
3 changed files with 38 additions and 22 deletions
@@ -23,6 +23,8 @@ import com.intellij.execution.filters.OpenFileHyperlinkInfo;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.search.GlobalSearchScope;
import kotlin.Function1;
import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetFile;
@@ -35,11 +37,11 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JetExceptionFilter implements Filter {
@NotNull private final ExceptionFilter exceptionFilter;
@NotNull private final GlobalSearchScope searchScope;
private final ExceptionFilter exceptionFilter;
private final GlobalSearchScope searchScope;
public JetExceptionFilter(@NotNull GlobalSearchScope searchScope) {
exceptionFilter = new ExceptionFilter(searchScope);
this.exceptionFilter = new ExceptionFilter(searchScope);
this.searchScope = searchScope;
}
@@ -56,7 +58,7 @@ public class JetExceptionFilter implements Filter {
// fullyQualifiedName is of format "package.Class$Inner"
String fullyQualifiedName = element.getClassName();
// All classes except package classes and its inner classes are handled correctly in the default ExceptionFilter
// All classes except package classes and package parts are handled correctly in the default ExceptionFilter
if (!isPackageClassOrSubClass(fullyQualifiedName)) {
return null;
}
@@ -73,7 +75,7 @@ public class JetExceptionFilter implements Filter {
return new OpenFileHyperlinkInfo(project, virtualFile, element.getLineNumber() - 1);
}
private boolean isPackageClassOrSubClass(String fqName) {
private static boolean isPackageClassOrSubClass(String fqName) {
if (fqName.equals(PackageClassUtils.getPackageClassName(FqName.ROOT))) {
return true;
}
@@ -91,23 +93,31 @@ public class JetExceptionFilter implements Filter {
private static final Pattern STACK_TRACE_ELEMENT_PATTERN = Pattern.compile("^\\s*at\\s+(.+)\\.(.+)\\((.+):(\\d+)\\)\\s*$");
@Nullable
private StackTraceElement parseStackTraceLine(@NotNull String line) {
private static StackTraceElement parseStackTraceLine(@NotNull String line) {
Matcher matcher = STACK_TRACE_ELEMENT_PATTERN.matcher(line);
if (matcher.matches()) {
String declaringClass = matcher.group(1);
String methodName = matcher.group(2);
String fileName = matcher.group(3);
int lineNumber = Integer.parseInt(matcher.group(4));
return new StackTraceElement(declaringClass, methodName, fileName, lineNumber);
String lineNumber = matcher.group(4);
//noinspection ConstantConditions
return new StackTraceElement(declaringClass, methodName, fileName, Integer.parseInt(lineNumber));
}
return null;
}
@NotNull
private Result patchResult(@NotNull Result result, @NotNull String line) {
HyperlinkInfo newHyperlinkInfo = createHyperlinkInfo(line);
return newHyperlinkInfo == null ? result :
new Result(result.highlightStartOffset, result.highlightEndOffset, newHyperlinkInfo, result.highlightAttributes);
final HyperlinkInfo newHyperlinkInfo = createHyperlinkInfo(line);
if (newHyperlinkInfo == null) return result;
return new Result(KotlinPackage.map(result.getResultItems(), new Function1<ResultItem, ResultItem>() {
@Override
public ResultItem invoke(ResultItem item) {
return new ResultItem(item.getHighlightStartOffset(), item.getHighlightEndOffset(), newHyperlinkInfo,
item.getHighlightAttributes());
}
}));
}
@Nullable
@@ -24,7 +24,7 @@ import org.jetbrains.annotations.NotNull;
public class JetExceptionFilterFactory implements ExceptionFilterFactory {
@NotNull
@Override
public Filter create(GlobalSearchScope searchScope) {
public Filter create(@NotNull GlobalSearchScope searchScope) {
return new JetExceptionFilter(searchScope);
}
}
@@ -17,11 +17,12 @@
package org.jetbrains.jet.plugin.filters;
import com.intellij.execution.filters.Filter;
import com.intellij.execution.filters.HyperlinkInfo;
import com.intellij.execution.filters.OpenFileHyperlinkInfo;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.search.GlobalSearchScope;
@@ -36,10 +37,14 @@ import org.jetbrains.jet.utils.UtilsPackage;
import java.io.File;
public class JetExceptionFilterTest extends MultiFileTestCase {
private final JetExceptionFilterFactory jetExceptionFilterFactory = new JetExceptionFilterFactory();
private VirtualFile rootDir;
@Override
protected void tearDown() throws Exception {
rootDir = null;
super.tearDown();
}
@Override
@NotNull
protected String getTestDataPath() {
@@ -61,12 +66,12 @@ public class JetExceptionFilterTest extends MultiFileTestCase {
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
}
catch (Exception e) {
UtilsPackage.rethrow(e);
throw UtilsPackage.rethrow(e);
}
}
@NotNull
private String createStackTraceElementLine(@NotNull String fileName, @NotNull String className, int lineNumber) {
private static String createStackTraceElementLine(@NotNull String fileName, @NotNull String className, int lineNumber) {
// Method name doesn't matter
String methodName = "foo";
@@ -83,18 +88,19 @@ public class JetExceptionFilterTest extends MultiFileTestCase {
}
assert rootDir != null;
Filter filter = jetExceptionFilterFactory.create(GlobalSearchScope.allScope(myProject));
Filter filter = new JetExceptionFilterFactory().create(GlobalSearchScope.allScope(myProject));
String line = createStackTraceElementLine(fileName, className, lineNumber);
Filter.Result result = filter.applyFilter(line, 0);
assertNotNull(result);
assertInstanceOf(result.hyperlinkInfo, OpenFileHyperlinkInfo.class);
OpenFileHyperlinkInfo info = (OpenFileHyperlinkInfo) result.hyperlinkInfo;
OpenFileDescriptor descriptor = info.getDescriptor();
HyperlinkInfo info = result.getFirstHyperlinkInfo();
assertNotNull(info);
assertInstanceOf(info, OpenFileHyperlinkInfo.class);
OpenFileDescriptor descriptor = ((OpenFileHyperlinkInfo) info).getDescriptor();
assertNotNull(descriptor);
VirtualFile expectedFile = VfsUtil.findRelativeFile(fileName, rootDir);
VirtualFile expectedFile = VfsUtilCore.findRelativeFile(fileName, rootDir);
assertNotNull(expectedFile);
assertEquals(expectedFile, descriptor.getFile());