Update JetExceptionFilter to the latest API, fix warnings
This commit is contained in:
@@ -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());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user