Fix NPE in StorageManager on sanitizing stack trace
This could happen when running the compiler from the command line, where MemoryBasedClassLoader is used which does not ever create Package instances.
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.storage;
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function0;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import kotlin.text.StringsKt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||
@@ -32,6 +33,8 @@ import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
public class LockBasedStorageManager implements StorageManager {
|
||||
private static final String PACKAGE_NAME = StringsKt.substringBeforeLast(LockBasedStorageManager.class.getCanonicalName(), ".", "");
|
||||
|
||||
public interface ExceptionHandlingStrategy {
|
||||
ExceptionHandlingStrategy THROW = new ExceptionHandlingStrategy() {
|
||||
@NotNull
|
||||
@@ -480,14 +483,13 @@ public class LockBasedStorageManager implements StorageManager {
|
||||
|
||||
@NotNull
|
||||
private static <T extends Throwable> T sanitizeStackTrace(@NotNull T throwable) {
|
||||
String storagePackageName = LockBasedStorageManager.class.getPackage().getName();
|
||||
StackTraceElement[] stackTrace = throwable.getStackTrace();
|
||||
int size = stackTrace.length;
|
||||
|
||||
int firstNonStorage = -1;
|
||||
for (int i = 0; i < size; i++) {
|
||||
// Skip everything (memoized functions and lazy values) from package org.jetbrains.kotlin.storage
|
||||
if (!stackTrace[i].getClassName().startsWith(storagePackageName)) {
|
||||
if (!stackTrace[i].getClassName().startsWith(PACKAGE_NAME)) {
|
||||
firstNonStorage = i;
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user