[java] new module-info PSI

- PsiExportStatement is generalized into PsiPackageAccessibilityStatement
- statement getters in PsiJavaModule
This commit is contained in:
Roman Shevchenko
2017-02-10 14:17:22 +01:00
parent d7423d4cbc
commit ce4b7046b2
40 changed files with 269 additions and 170 deletions
@@ -303,7 +303,7 @@ public class JavaModuleInsight extends ModuleInsight {
}
@Override
public void visitExportsStatement(PsiExportsStatement statement) {
public void visitExportsStatement(PsiPackageAccessibilityStatement statement) {
super.visitExportsStatement(statement);
PsiJavaCodeReferenceElement reference = statement.getPackageReference();
if (reference != null) {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -1685,13 +1685,12 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
}
@Override
public void visitExportsStatement(PsiExportsStatement statement) {
public void visitExportsStatement(PsiPackageAccessibilityStatement statement) {
super.visitExportsStatement(statement);
if (myLanguageLevel.isAtLeast(LanguageLevel.JDK_1_9)) {
PsiJavaModule container = (PsiJavaModule)statement.getParent();
PsiJavaCodeReferenceElement ref = statement.getPackageReference();
if (!myHolder.hasErrorResults()) myHolder.add(ModuleHighlightUtil.checkPackageReference(ref));
if (!myHolder.hasErrorResults()) myHolder.addAll(ModuleHighlightUtil.checkExportTargets(statement, container));
if (!myHolder.hasErrorResults()) myHolder.addAll(ModuleHighlightUtil.checkExportTargets(statement));
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -116,7 +116,7 @@ public class JavaModuleGraphUtil {
private static Map<String, Set<String>> exportsMap(@NotNull PsiJavaModule source) {
Map<String, Set<String>> map = ContainerUtil.newHashMap();
for (PsiExportsStatement statement : source.getExports()) {
for (PsiPackageAccessibilityStatement statement : source.getExports()) {
String pkg = statement.getPackageName();
List<String> targets = statement.getModuleNames();
map.put(pkg, targets.isEmpty() ? Collections.emptySet() : ContainerUtil.newTroveSet(targets));
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -43,17 +43,13 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.PropertyKey;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.intellij.openapi.util.Pair.pair;
import static com.intellij.psi.PsiJavaModule.MODULE_INFO_FILE;
import static com.intellij.psi.SyntaxTraverser.psiTraverser;
public class ModuleHighlightUtil {
@Nullable
@@ -143,12 +139,12 @@ public class ModuleHighlightUtil {
"module.duplicate.export", results);
checkDuplicateRefs(
psiTraverser().children(module).filter(PsiUsesStatement.class),
module.getUses(),
st -> Optional.ofNullable(st.getClassReference()).map(ModuleHighlightUtil::refText),
"module.duplicate.uses", results);
checkDuplicateRefs(
psiTraverser().children(module).filter(PsiProvidesStatement.class),
module.getProvides(),
st -> Optional.of(pair(st.getInterfaceReference(), st.getImplementationReference()))
.map(p -> p.first != null && p.second != null ? refText(p.first) + " / " + refText(p.second) : null),
"module.duplicate.provides", results);
@@ -176,20 +172,11 @@ public class ModuleHighlightUtil {
static List<HighlightInfo> checkUnusedServices(@NotNull PsiJavaModule module) {
List<HighlightInfo> results = ContainerUtil.newSmartList();
Set<String> exports = ContainerUtil.newTroveSet(), uses = ContainerUtil.newTroveSet();
for (PsiElement child : psiTraverser().children(module)) {
if (child instanceof PsiExportsStatement) {
PsiJavaCodeReferenceElement ref = ((PsiExportsStatement)child).getPackageReference();
if (ref != null) exports.add(refText(ref));
}
else if (child instanceof PsiUsesStatement) {
PsiJavaCodeReferenceElement ref = ((PsiUsesStatement)child).getClassReference();
if (ref != null) uses.add(refText(ref));
}
}
Set<String> exports = JBIterable.from(module.getExports()).map(st -> refText(st.getPackageReference())).filter(Objects::nonNull).toSet();
Set<String> uses = JBIterable.from(module.getUses()).map(st -> refText(st.getClassReference())).filter(Objects::nonNull).toSet();
Module host = findModule(module);
for (PsiProvidesStatement statement : psiTraverser().children(module).filter(PsiProvidesStatement.class)) {
for (PsiProvidesStatement statement : module.getProvides()) {
PsiJavaCodeReferenceElement ref = statement.getInterfaceReference();
if (ref != null) {
PsiElement target = ref.resolve();
@@ -207,7 +194,7 @@ public class ModuleHighlightUtil {
}
private static String refText(PsiJavaCodeReferenceElement ref) {
return PsiNameHelper.getQualifiedClassName(ref.getText(), true);
return ref != null ? PsiNameHelper.getQualifiedClassName(ref.getText(), true) : null;
}
@Nullable
@@ -278,7 +265,7 @@ public class ModuleHighlightUtil {
}
@NotNull
static List<HighlightInfo> checkExportTargets(@NotNull PsiExportsStatement statement, @NotNull PsiJavaModule container) {
static List<HighlightInfo> checkExportTargets(@NotNull PsiPackageAccessibilityStatement statement) {
List<HighlightInfo> results = ContainerUtil.newSmartList();
Set<String> targets = ContainerUtil.newTroveSet();
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -51,7 +51,7 @@ public class Java9ModuleExportsPackageToItselfInspection extends BaseJavaLocalIn
public ExportedToSelfVisitor(ProblemsHolder holder) { myHolder = holder; }
@Override
public void visitExportsStatement(PsiExportsStatement statement) {
public void visitExportsStatement(PsiPackageAccessibilityStatement statement) {
super.visitExportsStatement(statement);
PsiJavaModule javaModule = PsiTreeUtil.getParentOfType(statement, PsiJavaModule.class);
if (javaModule != null) {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -180,7 +180,7 @@ public class Java9RedundantRequiresStatementInspection extends GlobalJavaBatchIn
private boolean isReexported(@NotNull PsiJavaModule currentModule, @NotNull PsiJavaModule transitiveModule) {
return StreamEx
.of(transitiveModule.getExports().iterator())
.map(PsiExportsStatement::getPackageName)
.map(PsiPackageAccessibilityStatement::getPackageName)
.nonNull()
.filter(myImportedPackages::contains)
.anyMatch(packageName -> JavaModuleGraphUtil.exports(transitiveModule, packageName, currentModule));
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -96,7 +96,7 @@ public class RefJavaModuleImpl extends RefElementImpl implements RefJavaModule {
}
}
List<String> emptyList = Collections.emptyList();
for (PsiExportsStatement statement : javaModule.getExports()) {
for (PsiPackageAccessibilityStatement statement : javaModule.getExports()) {
PsiElement element = addReference(statement.getPackageReference());
String packageName = null;
if (element instanceof PsiPackage) {
@@ -142,7 +142,7 @@ public class RefJavaModuleImpl extends RefElementImpl implements RefJavaModule {
@NotNull
private static Map<String, List<String>> getPackagesExportedByModule(@NotNull PsiJavaModule javaModule) {
Map<String, List<String>> exportedPackages = new THashMap<>();
for (PsiExportsStatement statement : javaModule.getExports()) {
for (PsiPackageAccessibilityStatement statement : javaModule.getExports()) {
String packageName = statement.getPackageName();
if (packageName != null) {
exportedPackages.put(packageName, statement.getModuleNames());
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -108,7 +108,7 @@ class JavaModuleCompletion {
private static void addCodeReferences(PsiElement context, Consumer<LookupElement> result, CompletionResultSet resultSet) {
PsiElement statement = context.getParent();
if (statement instanceof PsiExportsStatement) {
if (statement instanceof PsiPackageAccessibilityStatement) {
Module module = ModuleUtilCore.findModuleForPsiElement(context);
PsiPackage topPackage = JavaPsiFacade.getInstance(context.getProject()).findPackage("");
if (module != null && topPackage != null) {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -403,7 +403,11 @@ public abstract class JavaElementVisitor extends PsiElementVisitor {
visitModuleStatement(statement);
}
public void visitExportsStatement(PsiExportsStatement statement) {
public void visitExportsStatement(PsiPackageAccessibilityStatement statement) {
visitModuleStatement(statement);
}
public void visitOpensStatement(PsiPackageAccessibilityStatement statement) {
visitModuleStatement(statement);
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -32,5 +32,8 @@ public interface PsiJavaModule extends NavigatablePsiElement, PsiNamedElement, P
@NotNull String getModuleName();
@NotNull Iterable<PsiRequiresStatement> getRequires();
@NotNull Iterable<PsiExportsStatement> getExports();
@NotNull Iterable<PsiPackageAccessibilityStatement> getExports();
@NotNull Iterable<PsiPackageAccessibilityStatement> getOpens();
@NotNull Iterable<PsiUsesStatement> getUses();
@NotNull Iterable<PsiProvidesStatement> getProvides();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -21,12 +21,16 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* Represents an {@code exports} statement of a Java module declaration.
* Represents a package access control statement ({@code exports} or {@code opens}) of a Java module declaration.
*
* @since 2016.3
* @since 2017.1
*/
public interface PsiExportsStatement extends PsiElement {
PsiExportsStatement[] EMPTY_ARRAY = new PsiExportsStatement[0];
public interface PsiPackageAccessibilityStatement extends PsiElement {
PsiPackageAccessibilityStatement[] EMPTY_ARRAY = new PsiPackageAccessibilityStatement[0];
enum Role {EXPORTS, OPENS}
@NotNull Role getRole();
@Nullable PsiJavaCodeReferenceElement getPackageReference();
@Nullable String getPackageName();
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -24,13 +24,14 @@ import com.intellij.psi.impl.source.SourceTreeToPsiMap;
import com.intellij.psi.impl.source.tree.JavaElementType;
import com.intellij.psi.impl.source.tree.TreeElement;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.JBIterable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static java.util.Arrays.asList;
import java.util.Collections;
import static com.intellij.util.containers.ContainerUtil.newArrayList;
public class ClsJavaModuleImpl extends ClsRepositoryPsiElement<PsiJavaModuleStub> implements PsiJavaModule {
private PsiJavaModuleReferenceElement myReference;
@@ -60,8 +61,26 @@ public class ClsJavaModuleImpl extends ClsRepositoryPsiElement<PsiJavaModuleStub
@NotNull
@Override
public Iterable<PsiExportsStatement> getExports() {
return JBIterable.of(getStub().getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiExportsStatement.EMPTY_ARRAY));
public Iterable<PsiPackageAccessibilityStatement> getExports() {
return JBIterable.of(getStub().getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiPackageAccessibilityStatement.EMPTY_ARRAY));
}
@NotNull
@Override
public Iterable<PsiPackageAccessibilityStatement> getOpens() {
return JBIterable.of(getStub().getChildrenByType(JavaElementType.OPENS_STATEMENT, PsiPackageAccessibilityStatement.EMPTY_ARRAY));
}
@NotNull
@Override
public Iterable<PsiUsesStatement> getUses() {
return Collections.emptyList();
}
@NotNull
@Override
public Iterable<PsiProvidesStatement> getProvides() {
return Collections.emptyList();
}
@Override
@@ -75,7 +94,7 @@ public class ClsJavaModuleImpl extends ClsRepositoryPsiElement<PsiJavaModuleStub
if (buffer.length() > position) buffer.append('\n');
position = buffer.length();
for (PsiExportsStatement statement : getExports()) appendText(statement, newIndentLevel, buffer);
for (PsiPackageAccessibilityStatement statement : getExports()) appendText(statement, newIndentLevel, buffer);
if (buffer.length() > position) buffer.append('\n');
StringUtil.repeatSymbol(buffer, ' ', newIndentLevel);
@@ -89,11 +108,11 @@ public class ClsJavaModuleImpl extends ClsRepositoryPsiElement<PsiJavaModuleStub
setMirrorCheckingType(element, JavaElementType.MODULE);
setMirror(getNameElement(), mirror.getNameElement());
setMirrors(asList(getStub().getChildrenByType(JavaElementType.REQUIRES_STATEMENT, PsiRequiresStatement.EMPTY_ARRAY)),
PsiTreeUtil.getChildrenOfTypeAsList(mirror, PsiRequiresStatement.class));
setMirrors(newArrayList(getStub().getChildrenByType(JavaElementType.REQUIRES_STATEMENT, PsiRequiresStatement.EMPTY_ARRAY)),
newArrayList(mirror.getRequires()));
setMirrors(asList(getStub().getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiExportsStatement.EMPTY_ARRAY)),
PsiTreeUtil.getChildrenOfTypeAsList(mirror, PsiExportsStatement.class));
setMirrors(newArrayList(getStub().getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiPackageAccessibilityStatement.EMPTY_ARRAY)),
newArrayList(mirror.getExports()));
}
@Override
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -18,11 +18,11 @@ package com.intellij.psi.impl.compiled;
import com.intellij.openapi.util.AtomicNotNullLazyValue;
import com.intellij.openapi.util.NotNullLazyValue;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiExportsStatement;
import com.intellij.psi.PsiJavaCodeReferenceElement;
import com.intellij.psi.PsiJavaModuleReferenceElement;
import com.intellij.psi.impl.java.stubs.PsiExportsStatementStub;
import com.intellij.psi.impl.source.tree.JavaElementType;
import com.intellij.psi.PsiPackageAccessibilityStatement;
import com.intellij.psi.impl.java.stubs.JavaPackageAccessibilityStatementElementType;
import com.intellij.psi.impl.java.stubs.PsiPackageAccessibilityStatementStub;
import com.intellij.psi.impl.source.tree.TreeElement;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
@@ -30,18 +30,19 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Locale;
public class ClsExportsStatementImpl extends ClsRepositoryPsiElement<PsiExportsStatementStub> implements PsiExportsStatement {
public class ClsPackageAccessibilityStatementImpl extends ClsRepositoryPsiElement<PsiPackageAccessibilityStatementStub> implements PsiPackageAccessibilityStatement {
private final NotNullLazyValue<PsiJavaCodeReferenceElement> myPackageReference;
private final NotNullLazyValue<Iterable<PsiJavaModuleReferenceElement>> myModuleReferences;
public ClsExportsStatementImpl(PsiExportsStatementStub stub) {
public ClsPackageAccessibilityStatementImpl(PsiPackageAccessibilityStatementStub stub) {
super(stub);
myPackageReference = new AtomicNotNullLazyValue<PsiJavaCodeReferenceElement>() {
@NotNull
@Override
protected PsiJavaCodeReferenceElement compute() {
return new ClsJavaCodeReferenceElementImpl(ClsExportsStatementImpl.this, getStub().getPackageName());
return new ClsJavaCodeReferenceElementImpl(ClsPackageAccessibilityStatementImpl.this, getStub().getPackageName());
}
};
myModuleReferences = new AtomicNotNullLazyValue<Iterable<PsiJavaModuleReferenceElement>>() {
@@ -51,13 +52,19 @@ public class ClsExportsStatementImpl extends ClsRepositoryPsiElement<PsiExportsS
return ContainerUtil.map(getStub().getTargets(), new Function<String, PsiJavaModuleReferenceElement>() {
@Override
public PsiJavaModuleReferenceElement fun(String target) {
return new ClsJavaModuleReferenceElementImpl(ClsExportsStatementImpl.this, target);
return new ClsJavaModuleReferenceElementImpl(ClsPackageAccessibilityStatementImpl.this, target);
}
});
}
};
}
@NotNull
@Override
public Role getRole() {
return JavaPackageAccessibilityStatementElementType.typeToRole(getStub().getStubType());
}
@Override
public PsiJavaCodeReferenceElement getPackageReference() {
return myPackageReference.getValue();
@@ -84,8 +91,8 @@ public class ClsExportsStatementImpl extends ClsRepositoryPsiElement<PsiExportsS
@Override
public void appendMirrorText(int indentLevel, @NotNull StringBuilder buffer) {
StringUtil.repeatSymbol(buffer, ' ', indentLevel);
PsiExportsStatementStub stub = getStub();
buffer.append("exports ").append(stub.getPackageName());
PsiPackageAccessibilityStatementStub stub = getStub();
buffer.append(getRole().toString().toLowerCase(Locale.US)).append(' ').append(stub.getPackageName());
List<String> targets = stub.getTargets();
if (!targets.isEmpty()) {
buffer.append(" to ");
@@ -99,11 +106,11 @@ public class ClsExportsStatementImpl extends ClsRepositoryPsiElement<PsiExportsS
@Override
public void setMirror(@NotNull TreeElement element) throws InvalidMirrorException {
setMirrorCheckingType(element, JavaElementType.EXPORTS_STATEMENT);
setMirrorCheckingType(element, getStub().getStubType());
}
@Override
public String toString() {
return "PsiExportsStatement";
return "PsiPackageAccessibilityStatement[" + getRole() + "]";
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -17,8 +17,8 @@ package com.intellij.psi.impl.compiled;
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub;
import com.intellij.psi.impl.java.stubs.PsiJavaModuleStub;
import com.intellij.psi.impl.java.stubs.impl.PsiExportsStatementStubImpl;
import com.intellij.psi.impl.java.stubs.impl.PsiJavaModuleStubImpl;
import com.intellij.psi.impl.java.stubs.impl.PsiPackageAccessibilityStatementStubImpl;
import com.intellij.psi.impl.java.stubs.impl.PsiRequiresStatementStubImpl;
import org.jetbrains.org.objectweb.asm.ClassVisitor;
import org.jetbrains.org.objectweb.asm.ModuleVisitor;
@@ -26,6 +26,7 @@ import org.jetbrains.org.objectweb.asm.Opcodes;
import java.util.Arrays;
import static com.intellij.psi.impl.java.stubs.JavaStubElementTypes.EXPORTS_STATEMENT;
import static com.intellij.util.BitUtil.isSet;
public class ModuleStubBuildingVisitor extends ClassVisitor {
@@ -60,7 +61,8 @@ public class ModuleStubBuildingVisitor extends ClassVisitor {
@Override
public void visitExport(String packageName, String... modules) {
new PsiExportsStatementStubImpl(myResult, packageName.replace('/', '.'), modules == null ? null : Arrays.asList(modules));
new PsiPackageAccessibilityStatementStubImpl(
myResult, EXPORTS_STATEMENT, packageName.replace('/', '.'), modules == null ? null : Arrays.asList(modules));
}
};
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -13,16 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* @author max
*/
package com.intellij.psi.impl.java.stubs;
import com.intellij.psi.*;
import com.intellij.psi.impl.compiled.*;
import com.intellij.psi.impl.compiled.ClsJavaModuleImpl;
/*
* @author max
*/
public class ClsStubPsiFactory extends StubPsiFactory {
public static final ClsStubPsiFactory INSTANCE = new ClsStubPsiFactory();
@@ -112,7 +110,7 @@ public class ClsStubPsiFactory extends StubPsiFactory {
}
@Override
public PsiExportsStatement createExportsStatement(PsiExportsStatementStub stub) {
return new ClsExportsStatementImpl(stub);
public PsiPackageAccessibilityStatement createPackageAccessibilityStatement(PsiPackageAccessibilityStatementStub stub) {
return new ClsPackageAccessibilityStatementImpl(stub);
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -19,10 +19,10 @@ import com.intellij.lang.ASTNode;
import com.intellij.lang.LighterAST;
import com.intellij.lang.LighterASTNode;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiExportsStatement;
import com.intellij.psi.impl.java.stubs.impl.PsiExportsStatementStubImpl;
import com.intellij.psi.impl.source.ExportsElement;
import com.intellij.psi.impl.source.PsiExportsStatementImpl;
import com.intellij.psi.PsiPackageAccessibilityStatement;
import com.intellij.psi.impl.java.stubs.impl.PsiPackageAccessibilityStatementStubImpl;
import com.intellij.psi.impl.source.PackageAccessibilityStatementElement;
import com.intellij.psi.impl.source.PsiPackageAccessibilityStatementImpl;
import com.intellij.psi.impl.source.tree.JavaElementType;
import com.intellij.psi.impl.source.tree.JavaSourceUtil;
import com.intellij.psi.stubs.IndexSink;
@@ -36,31 +36,29 @@ import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.List;
import static com.intellij.util.ObjectUtils.notNull;
public class JavaPackageAccessibilityStatementElementType extends JavaStubElementType<PsiPackageAccessibilityStatementStub, PsiPackageAccessibilityStatement> {
public JavaPackageAccessibilityStatementElementType(@NotNull String debugName) {
super(debugName);
}
public class JavaExportsStatementElementType extends JavaStubElementType<PsiExportsStatementStub, PsiExportsStatement> {
public JavaExportsStatementElementType() {
super("EXPORTS_STATEMENT");
@Override
public PsiPackageAccessibilityStatement createPsi(@NotNull PsiPackageAccessibilityStatementStub stub) {
return getPsiFactory(stub).createPackageAccessibilityStatement(stub);
}
@Override
public PsiPackageAccessibilityStatement createPsi(@NotNull ASTNode node) {
return new PsiPackageAccessibilityStatementImpl(node);
}
@NotNull
@Override
public ASTNode createCompositeNode() {
return new ExportsElement(this);
return new PackageAccessibilityStatementElement(this);
}
@Override
public PsiExportsStatement createPsi(@NotNull PsiExportsStatementStub stub) {
return getPsiFactory(stub).createExportsStatement(stub);
}
@Override
public PsiExportsStatement createPsi(@NotNull ASTNode node) {
return new PsiExportsStatementImpl(node);
}
@Override
public PsiExportsStatementStub createStub(LighterAST tree, LighterASTNode node, StubElement parentStub) {
public PsiPackageAccessibilityStatementStub createStub(LighterAST tree, LighterASTNode node, StubElement parentStub) {
String refText = null;
List<String> to = ContainerUtil.newSmartList();
@@ -70,23 +68,30 @@ public class JavaExportsStatementElementType extends JavaStubElementType<PsiExpo
else if (type == JavaElementType.MODULE_REFERENCE) to.add(JavaSourceUtil.getReferenceText(tree, child));
}
return new PsiExportsStatementStubImpl(parentStub, notNull(refText, ""), to);
return new PsiPackageAccessibilityStatementStubImpl(parentStub, this, refText, to);
}
@Override
public void serialize(@NotNull PsiExportsStatementStub stub, @NotNull StubOutputStream dataStream) throws IOException {
public void serialize(@NotNull PsiPackageAccessibilityStatementStub stub, @NotNull StubOutputStream dataStream) throws IOException {
dataStream.writeUTFFast(stub.getPackageName());
dataStream.writeUTFFast(StringUtil.join(stub.getTargets(), "/"));
}
@NotNull
@Override
public PsiExportsStatementStub deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException {
public PsiPackageAccessibilityStatementStub deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException {
String packageName = dataStream.readUTFFast();
List<String> targets = StringUtil.split(dataStream.readUTFFast(), "/");
return new PsiExportsStatementStubImpl(parentStub, packageName, targets);
return new PsiPackageAccessibilityStatementStubImpl(parentStub, this, packageName, targets);
}
@Override
public void indexStub(@NotNull PsiExportsStatementStub stub, @NotNull IndexSink sink) { }
public void indexStub(@NotNull PsiPackageAccessibilityStatementStub stub, @NotNull IndexSink sink) { }
@NotNull
public static PsiPackageAccessibilityStatement.Role typeToRole(@NotNull IElementType type) {
if (type == JavaElementType.EXPORTS_STATEMENT) return PsiPackageAccessibilityStatement.Role.EXPORTS;
if (type == JavaElementType.OPENS_STATEMENT) return PsiPackageAccessibilityStatement.Role.OPENS;
throw new IllegalArgumentException("Unknown type: " + type);
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -40,7 +40,9 @@ public interface JavaStubElementTypes {
JavaImportListElementType IMPORT_LIST = new JavaImportListElementType();
JavaModuleElementType MODULE = new JavaModuleElementType();
JavaRequiresStatementElementType REQUIRES_STATEMENT = new JavaRequiresStatementElementType();
JavaExportsStatementElementType EXPORTS_STATEMENT = new JavaExportsStatementElementType();
JavaPackageAccessibilityStatementElementType EXPORTS_STATEMENT = new JavaPackageAccessibilityStatementElementType("EXPORTS_STATEMENT");
JavaPackageAccessibilityStatementElementType OPENS_STATEMENT = new JavaPackageAccessibilityStatementElementType("OPENS_STATEMENT");
JavaClassElementType CLASS = new JavaClassElementType("CLASS") {
@NotNull
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -15,12 +15,12 @@
*/
package com.intellij.psi.impl.java.stubs;
import com.intellij.psi.PsiExportsStatement;
import com.intellij.psi.PsiPackageAccessibilityStatement;
import com.intellij.psi.stubs.StubElement;
import java.util.List;
public interface PsiExportsStatementStub extends StubElement<PsiExportsStatement> {
public interface PsiPackageAccessibilityStatementStub extends StubElement<PsiPackageAccessibilityStatement> {
String getPackageName();
List<String> getTargets();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -123,7 +123,7 @@ public class SourceStubPsiFactory extends StubPsiFactory {
}
@Override
public PsiExportsStatement createExportsStatement(PsiExportsStatementStub stub) {
return new PsiExportsStatementImpl(stub);
public PsiPackageAccessibilityStatement createPackageAccessibilityStatement(PsiPackageAccessibilityStatementStub stub) {
return new PsiPackageAccessibilityStatementImpl(stub);
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* @author max
*/
package com.intellij.psi.impl.java.stubs;
import com.intellij.psi.*;
/*
* @author max
*/
public abstract class StubPsiFactory {
public abstract PsiClass createClass(PsiClassStub stub);
@@ -60,7 +59,7 @@ public abstract class StubPsiFactory {
return null;
}
public PsiExportsStatement createExportsStatement(PsiExportsStatementStub stub) {
public PsiPackageAccessibilityStatement createPackageAccessibilityStatement(PsiPackageAccessibilityStatementStub stub) {
return null;
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -15,22 +15,25 @@
*/
package com.intellij.psi.impl.java.stubs.impl;
import com.intellij.psi.PsiExportsStatement;
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
import com.intellij.psi.impl.java.stubs.PsiExportsStatementStub;
import com.intellij.psi.PsiPackageAccessibilityStatement;
import com.intellij.psi.impl.java.stubs.PsiPackageAccessibilityStatementStub;
import com.intellij.psi.stubs.IStubElementType;
import com.intellij.psi.stubs.StubBase;
import com.intellij.psi.stubs.StubElement;
import java.util.Collections;
import java.util.List;
public class PsiExportsStatementStubImpl extends StubBase<PsiExportsStatement> implements PsiExportsStatementStub {
import static com.intellij.psi.impl.java.stubs.JavaPackageAccessibilityStatementElementType.typeToRole;
import static com.intellij.util.ObjectUtils.notNull;
public class PsiPackageAccessibilityStatementStubImpl extends StubBase<PsiPackageAccessibilityStatement> implements PsiPackageAccessibilityStatementStub {
private final String myPackageName;
private final List<String> myTargets;
public PsiExportsStatementStubImpl(StubElement parent, String packageName, List<String> targets) {
super(parent, JavaStubElementTypes.EXPORTS_STATEMENT);
myPackageName = packageName;
public PsiPackageAccessibilityStatementStubImpl(StubElement parent, IStubElementType type, String packageName, List<String> targets) {
super(parent, type);
myPackageName = notNull(packageName, "");
myTargets = targets == null || targets.isEmpty() ? Collections.<String>emptyList() : Collections.unmodifiableList(targets);
}
@@ -47,7 +50,7 @@ public class PsiExportsStatementStubImpl extends StubBase<PsiExportsStatement> i
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("PsiExportsStatementStub:").append(myPackageName);
sb.append("PsiPackageAccessibilityStatementStub[").append(typeToRole(getStubType())).append("]:").append(myPackageName);
for (String target : myTargets) sb.append(':').append(target);
return sb.toString();
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -75,7 +75,25 @@ public class LightJavaModule extends LightElement implements PsiJavaModule {
@NotNull
@Override
public Iterable<PsiExportsStatement> getExports() {
public Iterable<PsiPackageAccessibilityStatement> getExports() {
return Collections.emptyList();
}
@NotNull
@Override
public Iterable<PsiPackageAccessibilityStatement> getOpens() {
return Collections.emptyList();
}
@NotNull
@Override
public Iterable<PsiUsesStatement> getUses() {
return Collections.emptyList();
}
@NotNull
@Override
public Iterable<PsiProvidesStatement> getProvides() {
return Collections.emptyList();
}
@@ -146,7 +164,6 @@ public class LightJavaModule extends LightElement implements PsiJavaModule {
final PsiDirectory directory = manager.findDirectory(jarRoot);
assert directory != null : jarRoot;
return CachedValuesManager.getCachedValue(directory, new CachedValueProvider<LightJavaModule>() {
@Nullable
@Override
public Result<LightJavaModule> compute() {
LightJavaModule module = new LightJavaModule(manager, jarRoot);
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -27,8 +27,8 @@ import org.jetbrains.annotations.Nullable;
/**
* @author Pavel.Dolgov
*/
public class ExportsElement extends CompositeElement {
public ExportsElement(@NotNull IElementType type) {
public class PackageAccessibilityStatementElement extends CompositeElement {
public PackageAccessibilityStatementElement(@NotNull IElementType type) {
super(type);
}
@@ -63,4 +63,4 @@ public class ExportsElement extends CompositeElement {
}
return null;
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -134,7 +134,7 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
return CLASS_OR_PACKAGE_NAME_KIND; // incomplete code
}
}
if (i == JavaElementType.PACKAGE_STATEMENT || i == JavaElementType.EXPORTS_STATEMENT) {
if (i == JavaElementType.PACKAGE_STATEMENT || i == JavaElementType.EXPORTS_STATEMENT || i == JavaElementType.OPENS_STATEMENT) {
return PACKAGE_NAME_KIND;
}
if (i == JavaElementType.IMPORT_STATEMENT) {
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -18,6 +18,7 @@ package com.intellij.psi.impl.source;
import com.intellij.lang.ASTNode;
import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.*;
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
import com.intellij.psi.impl.java.stubs.PsiJavaModuleStub;
@@ -32,6 +33,19 @@ import org.jetbrains.annotations.Nullable;
import static com.intellij.psi.SyntaxTraverser.psiTraverser;
public class PsiJavaModuleImpl extends JavaStubPsiElement<PsiJavaModuleStub> implements PsiJavaModule {
private static final Condition<PsiPackageAccessibilityStatement> EXPORTS_FILTER = new Condition<PsiPackageAccessibilityStatement>() {
@Override
public boolean value(PsiPackageAccessibilityStatement statement) {
return statement.getRole() == PsiPackageAccessibilityStatement.Role.EXPORTS;
}
};
private static final Condition<PsiPackageAccessibilityStatement> OPENS_FILTER = new Condition<PsiPackageAccessibilityStatement>() {
@Override
public boolean value(PsiPackageAccessibilityStatement statement) {
return statement.getRole() == PsiPackageAccessibilityStatement.Role.OPENS;
}
};
public PsiJavaModuleImpl(@NotNull PsiJavaModuleStub stub) {
super(stub, JavaStubElementTypes.MODULE);
}
@@ -72,16 +86,40 @@ public class PsiJavaModuleImpl extends JavaStubPsiElement<PsiJavaModuleStub> imp
@NotNull
@Override
public Iterable<PsiExportsStatement> getExports() {
public Iterable<PsiPackageAccessibilityStatement> getExports() {
PsiJavaModuleStub stub = getGreenStub();
if (stub != null) {
return JBIterable.of(stub.getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiExportsStatement.EMPTY_ARRAY));
return JBIterable.of(stub.getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiPackageAccessibilityStatement.EMPTY_ARRAY));
}
else {
return psiTraverser().children(this).filter(PsiExportsStatement.class);
return psiTraverser().children(this).filter(PsiPackageAccessibilityStatement.class).filter(EXPORTS_FILTER);
}
}
@NotNull
@Override
public Iterable<PsiPackageAccessibilityStatement> getOpens() {
PsiJavaModuleStub stub = getGreenStub();
if (stub != null) {
return JBIterable.of(stub.getChildrenByType(JavaElementType.OPENS_STATEMENT, PsiPackageAccessibilityStatement.EMPTY_ARRAY));
}
else {
return psiTraverser().children(this).filter(PsiPackageAccessibilityStatement.class).filter(OPENS_FILTER);
}
}
@NotNull
@Override
public Iterable<PsiUsesStatement> getUses() {
return psiTraverser().children(this).filter(PsiUsesStatement.class);
}
@NotNull
@Override
public Iterable<PsiProvidesStatement> getProvides() {
return psiTraverser().children(this).filter(PsiProvidesStatement.class);
}
@Override
public String getName() {
return getModuleName();
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -18,8 +18,9 @@ package com.intellij.psi.impl.source;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
import com.intellij.psi.impl.java.stubs.PsiExportsStatementStub;
import com.intellij.psi.impl.java.stubs.JavaPackageAccessibilityStatementElementType;
import com.intellij.psi.impl.java.stubs.PsiPackageAccessibilityStatementStub;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -29,15 +30,23 @@ import java.util.List;
import static com.intellij.psi.SyntaxTraverser.psiTraverser;
public class PsiExportsStatementImpl extends JavaStubPsiElement<PsiExportsStatementStub> implements PsiExportsStatement {
public PsiExportsStatementImpl(@NotNull PsiExportsStatementStub stub) {
super(stub, JavaStubElementTypes.EXPORTS_STATEMENT);
public class PsiPackageAccessibilityStatementImpl extends JavaStubPsiElement<PsiPackageAccessibilityStatementStub> implements PsiPackageAccessibilityStatement {
public PsiPackageAccessibilityStatementImpl(@NotNull PsiPackageAccessibilityStatementStub stub) {
super(stub, stub.getStubType());
}
public PsiExportsStatementImpl(@NotNull ASTNode node) {
public PsiPackageAccessibilityStatementImpl(@NotNull ASTNode node) {
super(node);
}
@NotNull
@Override
public Role getRole() {
PsiPackageAccessibilityStatementStub stub = getGreenStub();
IElementType type = stub != null ? stub.getStubType() : getNode().getElementType();
return JavaPackageAccessibilityStatementElementType.typeToRole(type);
}
@Nullable
@Override
public PsiJavaCodeReferenceElement getPackageReference() {
@@ -47,7 +56,7 @@ public class PsiExportsStatementImpl extends JavaStubPsiElement<PsiExportsStatem
@Nullable
@Override
public String getPackageName() {
PsiExportsStatementStub stub = getGreenStub();
PsiPackageAccessibilityStatementStub stub = getGreenStub();
if (stub != null) {
return StringUtil.nullize(stub.getPackageName());
}
@@ -66,7 +75,7 @@ public class PsiExportsStatementImpl extends JavaStubPsiElement<PsiExportsStatem
@NotNull
@Override
public List<String> getModuleNames() {
PsiExportsStatementStub stub = getGreenStub();
PsiPackageAccessibilityStatementStub stub = getGreenStub();
if (stub != null) {
return stub.getTargets();
}
@@ -80,7 +89,9 @@ public class PsiExportsStatementImpl extends JavaStubPsiElement<PsiExportsStatem
@Override
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof JavaElementVisitor) {
((JavaElementVisitor)visitor).visitExportsStatement(this);
Role role = getRole();
if (role == Role.EXPORTS) ((JavaElementVisitor)visitor).visitExportsStatement(this);
else if (role == Role.OPENS) ((JavaElementVisitor)visitor).visitOpensStatement(this);
}
else {
visitor.visitElement(this);
@@ -89,6 +100,6 @@ public class PsiExportsStatementImpl extends JavaStubPsiElement<PsiExportsStatem
@Override
public String toString() {
return "PsiExportsStatement";
return "PsiPackageAccessibilityStatement";
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -70,7 +70,7 @@ public interface ElementType extends JavaTokenType, JavaDocTokenType, JavaElemen
WHILE_STATEMENT, FOR_STATEMENT, FOREACH_STATEMENT, DO_WHILE_STATEMENT, SWITCH_STATEMENT, SWITCH_LABEL_STATEMENT, BREAK_STATEMENT,
CONTINUE_STATEMENT, RETURN_STATEMENT, THROW_STATEMENT, SYNCHRONIZED_STATEMENT, TRY_STATEMENT, LABELED_STATEMENT, ASSERT_STATEMENT);
TokenSet JAVA_MODULE_STATEMENT_BIT_SET = TokenSet.create(REQUIRES_STATEMENT, EXPORTS_STATEMENT, USES_STATEMENT, PROVIDES_STATEMENT);
TokenSet JAVA_MODULE_STATEMENT_BIT_SET = TokenSet.create(REQUIRES_STATEMENT, EXPORTS_STATEMENT, OPENS_STATEMENT, USES_STATEMENT, PROVIDES_STATEMENT);
TokenSet IMPORT_STATEMENT_BASE_BIT_SET = TokenSet.create(IMPORT_STATEMENT, IMPORT_STATIC_STATEMENT);
TokenSet CLASS_KEYWORD_BIT_SET = TokenSet.create(CLASS_KEYWORD, INTERFACE_KEYWORD, ENUM_KEYWORD);
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -88,6 +88,7 @@ public interface JavaElementType {
IElementType MODULE = JavaStubElementTypes.MODULE;
IElementType REQUIRES_STATEMENT = JavaStubElementTypes.REQUIRES_STATEMENT;
IElementType EXPORTS_STATEMENT = JavaStubElementTypes.EXPORTS_STATEMENT;
IElementType OPENS_STATEMENT = JavaStubElementTypes.OPENS_STATEMENT;
IElementType IMPORT_STATIC_REFERENCE = new JavaCompositeElementType("IMPORT_STATIC_REFERENCE", PsiImportStaticReferenceElementImpl.class);
IElementType TYPE = new JavaCompositeElementType("TYPE", PsiTypeElementImpl.class);
@@ -2,5 +2,5 @@ PsiJavaFileStub []
PsiJavaModuleStub:M.N
PsiRequiresStatementStub:0:java.desktop
PsiRequiresStatementStub:1:java.logging
PsiExportsStatementStub:pkg.d1
PsiExportsStatementStub:pkg.d2:java.desktop
PsiPackageAccessibilityStatementStub[EXPORTS]:pkg.d1
PsiPackageAccessibilityStatementStub[EXPORTS]:pkg.d2:java.desktop
@@ -7,7 +7,7 @@ PsiJavaFile:Exports0.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiErrorElement:Package reference expected
<empty list>
@@ -7,7 +7,7 @@ PsiJavaFile:Exports1.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -7,7 +7,7 @@ PsiJavaFile:Exports2.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -7,7 +7,7 @@ PsiJavaFile:Exports3.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -7,7 +7,7 @@ PsiJavaFile:Exports4.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -7,7 +7,7 @@ PsiJavaFile:Exports5.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -7,7 +7,7 @@ PsiJavaFile:Exports6.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -7,7 +7,7 @@ PsiJavaFile:Exports7.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -7,7 +7,7 @@ PsiJavaFile:Exports8.java
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiExportsStatement
PsiPackageAccessibilityStatement
PsiKeyword:exports('exports')
PsiWhiteSpace(' ')
PsiJavaCodeReferenceElement:pkg
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 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.
@@ -503,7 +503,7 @@ public class JavaStubBuilderTest extends LightIdeaTestCase {
"PsiJavaFileStub []\n" +
" MODULE:PsiJavaModuleStub:M.N\n" +
" REQUIRES_STATEMENT:PsiRequiresStatementStub:0:A.B\n" +
" EXPORTS_STATEMENT:PsiExportsStatementStub:m.n\n");
" EXPORTS_STATEMENT:PsiPackageAccessibilityStatementStub[EXPORTS]:m.n\n");
}
public void testSOEProof() {
@@ -85,7 +85,7 @@ public class ClassEscapesItsScopeInspection extends BaseJavaBatchLocalInspection
Module module = ProjectFileIndex.SERVICE.getInstance(holder.getProject()).getModuleForFile(vFile);
if (module != null) {
Set<String> exportedPackageNames =
new THashSet<>(ContainerUtil.mapNotNull(psiModule.getExports(), PsiExportsStatement::getPackageName));
new THashSet<>(ContainerUtil.mapNotNull(psiModule.getExports(), PsiPackageAccessibilityStatement::getPackageName));
if (exportedPackageNames.contains(javaFile.getPackageName())) {
checkers.add(new Java9NonAccessibleTypeExposedVisitor(holder, module, psiModule.getModuleName(), exportedPackageNames));
}