Skip to content

Commit 4a0cbe8

Browse files
authored
Fix NPE by registering a dummy ExternalAnnotationsManager project service (#61)
1 parent ab4fce0 commit 4a0cbe8

12 files changed

Lines changed: 105 additions & 11 deletions

File tree

api/src/main/java/net/neoforged/jst/api/FileSink.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package net.neoforged.jst.api;
22

3-
import java.io.ByteArrayInputStream;
43
import java.io.IOException;
5-
import java.io.InputStream;
64
import java.nio.file.attribute.FileTime;
75

86
public interface FileSink extends AutoCloseable {

api/src/main/java/net/neoforged/jst/api/PsiHelper.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.intellij.psi.JavaPsiFacade;
55
import com.intellij.psi.PsiClass;
66
import com.intellij.psi.PsiElement;
7-
import com.intellij.psi.PsiExpression;
87
import com.intellij.psi.PsiMethod;
98
import com.intellij.psi.PsiModifier;
109
import com.intellij.psi.PsiParameter;

api/src/main/java/net/neoforged/jst/api/Replacement.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.neoforged.jst.api;
22

33
import com.intellij.openapi.util.TextRange;
4-
import com.intellij.psi.PsiElement;
54

65
import java.util.Comparator;
76

api/src/main/java/net/neoforged/jst/api/Replacements.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.intellij.psi.PsiElement;
55

66
import java.util.ArrayList;
7-
import java.util.Collections;
87
import java.util.List;
98

109
public final class Replacements {

cli/src/main/java/net/neoforged/jst/cli/intellij/IntelliJEnvironmentImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.neoforged.jst.cli.intellij;
22

3+
import com.intellij.codeInsight.ExternalAnnotationsManager;
34
import com.intellij.core.CoreApplicationEnvironment;
45
import com.intellij.core.JavaCoreApplicationEnvironment;
56
import com.intellij.core.JavaCoreProjectEnvironment;
@@ -153,6 +154,7 @@ public PsiFile parseFileFromMemory(String filename, String fileContent) {
153154
*/
154155
private void initProjectExtensionsAndServices(MockProject project) {
155156
project.registerService(PsiNameHelper.class, PsiNameHelperImpl.class);
157+
project.registerService(ExternalAnnotationsManager.class, new MockExternalAnnotationsManager());
156158

157159
var projectExtensions = project.getExtensionArea();
158160
CoreApplicationEnvironment.registerExtensionPoint(projectExtensions, PsiTreeChangePreprocessor.EP.getName(), PsiTreeChangePreprocessor.class);
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package net.neoforged.jst.cli.intellij;
2+
3+
import com.intellij.codeInsight.ExternalAnnotationsManager;
4+
import com.intellij.openapi.vfs.VirtualFile;
5+
import com.intellij.psi.PsiAnnotation;
6+
import com.intellij.psi.PsiClass;
7+
import com.intellij.psi.PsiElement;
8+
import com.intellij.psi.PsiFile;
9+
import com.intellij.psi.PsiModifierListOwner;
10+
import com.intellij.psi.PsiNameValuePair;
11+
import org.jetbrains.annotations.NotNull;
12+
import org.jetbrains.annotations.Nullable;
13+
14+
import java.util.List;
15+
16+
public class MockExternalAnnotationsManager extends ExternalAnnotationsManager {
17+
@Override
18+
public boolean hasAnnotationRootsForFile(@NotNull VirtualFile file) {
19+
return false;
20+
}
21+
22+
@Override
23+
public boolean isExternalAnnotation(@NotNull PsiAnnotation annotation) {
24+
return false;
25+
}
26+
27+
@Override
28+
public @Nullable PsiAnnotation findExternalAnnotation(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN) {
29+
return null;
30+
}
31+
32+
@Override
33+
public @NotNull List<PsiAnnotation> findExternalAnnotations(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN) {
34+
return List.of();
35+
}
36+
37+
@Override
38+
public boolean isExternalAnnotationWritable(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN) {
39+
return false;
40+
}
41+
42+
@Override
43+
public @NotNull PsiAnnotation @NotNull [] findExternalAnnotations(@NotNull PsiModifierListOwner listOwner) {
44+
return new PsiAnnotation[0];
45+
}
46+
47+
@Override
48+
public @Nullable List<PsiAnnotation> findDefaultConstructorExternalAnnotations(@NotNull PsiClass aClass) {
49+
return List.of();
50+
}
51+
52+
@Override
53+
public @Nullable List<PsiAnnotation> findDefaultConstructorExternalAnnotations(@NotNull PsiClass aClass, @NotNull String annotationFQN) {
54+
return List.of();
55+
}
56+
57+
@Override
58+
public void annotateExternally(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQName, @NotNull PsiFile fromFile, PsiNameValuePair @Nullable [] value) throws CanceledConfigurationException {
59+
60+
}
61+
62+
@Override
63+
public boolean deannotate(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN) {
64+
return false;
65+
}
66+
67+
@Override
68+
public boolean editExternalAnnotation(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN, PsiNameValuePair @Nullable [] value) {
69+
return false;
70+
}
71+
72+
@Override
73+
public @NotNull AnnotationPlace chooseAnnotationsPlaceNoUi(@NotNull PsiElement element) {
74+
return AnnotationPlace.NOWHERE;
75+
}
76+
77+
@Override
78+
public @NotNull AnnotationPlace chooseAnnotationsPlace(@NotNull PsiElement element) {
79+
return AnnotationPlace.NOWHERE;
80+
}
81+
82+
@Override
83+
public @Nullable List<PsiFile> findExternalAnnotationsFiles(@NotNull PsiModifierListOwner listOwner) {
84+
return List.of();
85+
}
86+
87+
@Override
88+
public boolean hasConfiguredAnnotationRoot(@NotNull PsiModifierListOwner owner) {
89+
return false;
90+
}
91+
}

cli/src/main/java/net/neoforged/jst/cli/io/SingleFileSink.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.neoforged.jst.cli.io;
22

33
import net.neoforged.jst.api.FileSink;
4-
import net.neoforged.jst.api.SourceTransformer;
54

65
import java.io.IOException;
76
import java.nio.file.Files;

cli/src/test/java/net/neoforged/jst/cli/ImportHelperTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package net.neoforged.jst.cli;
22

3-
import com.intellij.openapi.vfs.VirtualFile;
4-
import com.intellij.psi.PsiClass;
53
import com.intellij.psi.PsiElement;
64
import com.intellij.psi.PsiJavaFile;
7-
import com.intellij.psi.PsiMethod;
85
import com.intellij.psi.util.PsiTreeUtil;
96
import net.neoforged.jst.api.ImportHelper;
107
import net.neoforged.jst.api.Logger;

parchment/src/main/java/net/neoforged/jst/parchment/JavadocHelper.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import com.intellij.psi.javadoc.PsiDocComment;
99
import com.intellij.psi.javadoc.PsiDocToken;
1010
import net.neoforged.jst.api.PsiHelper;
11-
import net.neoforged.jst.api.Replacement;
1211
import net.neoforged.jst.api.Replacements;
1312
import org.jetbrains.annotations.Nullable;
1413

parchment/src/main/java/net/neoforged/jst/parchment/namesanddocs/NameAndDocSourceLoader.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import net.neoforged.jst.parchment.namesanddocs.srgutils.MappingFileDatabase;
44
import net.neoforged.jst.parchment.namesanddocs.parchment.ParchmentDatabase;
5-
import net.neoforged.srgutils.INamedMappingFile;
65
import org.jetbrains.annotations.Nullable;
76

87
import java.io.IOException;

0 commit comments

Comments
 (0)