diff --git a/java/idea-ui/src/com/intellij/ide/util/importProject/JavaModuleInsight.java b/java/idea-ui/src/com/intellij/ide/util/importProject/JavaModuleInsight.java index 65d6f9ae957b..902c13f62558 100644 --- a/java/idea-ui/src/com/intellij/ide/util/importProject/JavaModuleInsight.java +++ b/java/idea-ui/src/com/intellij/ide/util/importProject/JavaModuleInsight.java @@ -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) { diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index fdc4d53b6d58..8d6731a294d5 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -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)); } } diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java index 7b6ffb7bd287..6fdfa17484d0 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java @@ -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> exportsMap(@NotNull PsiJavaModule source) { Map> map = ContainerUtil.newHashMap(); - for (PsiExportsStatement statement : source.getExports()) { + for (PsiPackageAccessibilityStatement statement : source.getExports()) { String pkg = statement.getPackageName(); List targets = statement.getModuleNames(); map.put(pkg, targets.isEmpty() ? Collections.emptySet() : ContainerUtil.newTroveSet(targets)); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java index 62d827426b34..13625596af71 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ModuleHighlightUtil.java @@ -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 checkUnusedServices(@NotNull PsiJavaModule module) { List results = ContainerUtil.newSmartList(); - Set 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 exports = JBIterable.from(module.getExports()).map(st -> refText(st.getPackageReference())).filter(Objects::nonNull).toSet(); + Set 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 checkExportTargets(@NotNull PsiExportsStatement statement, @NotNull PsiJavaModule container) { + static List checkExportTargets(@NotNull PsiPackageAccessibilityStatement statement) { List results = ContainerUtil.newSmartList(); Set targets = ContainerUtil.newTroveSet(); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java index 2e2d8ca93a92..0f21c0896fe2 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleExportsPackageToItselfInspection.java @@ -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) { diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9RedundantRequiresStatementInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9RedundantRequiresStatementInspection.java index 5e6260ff65c6..4b986c7651ef 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9RedundantRequiresStatementInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9RedundantRequiresStatementInspection.java @@ -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)); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java index f87e9ddbc2fb..25c23a6daf54 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java @@ -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 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> getPackagesExportedByModule(@NotNull PsiJavaModule javaModule) { Map> 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()); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaModuleCompletion.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaModuleCompletion.java index 0602af3e842e..4a216a3923c0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaModuleCompletion.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaModuleCompletion.java @@ -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 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) { diff --git a/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java b/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java index 3fdd67a77697..09d7089c331f 100644 --- a/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java +++ b/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java @@ -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); } diff --git a/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java b/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java index 4f51300982bc..67c7ec7ff2f5 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiJavaModule.java @@ -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 getRequires(); - @NotNull Iterable getExports(); + @NotNull Iterable getExports(); + @NotNull Iterable getOpens(); + @NotNull Iterable getUses(); + @NotNull Iterable getProvides(); } \ No newline at end of file diff --git a/java/java-psi-api/src/com/intellij/psi/PsiExportsStatement.java b/java/java-psi-api/src/com/intellij/psi/PsiPackageAccessibilityStatement.java similarity index 70% rename from java/java-psi-api/src/com/intellij/psi/PsiExportsStatement.java rename to java/java-psi-api/src/com/intellij/psi/PsiPackageAccessibilityStatement.java index 8376db142dcc..b7a4b26d1830 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiExportsStatement.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiPackageAccessibilityStatement.java @@ -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(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java index bce910610990..b93b2b03384a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsJavaModuleImpl.java @@ -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 implements PsiJavaModule { private PsiJavaModuleReferenceElement myReference; @@ -60,8 +61,26 @@ public class ClsJavaModuleImpl extends ClsRepositoryPsiElement getExports() { - return JBIterable.of(getStub().getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiExportsStatement.EMPTY_ARRAY)); + public Iterable getExports() { + return JBIterable.of(getStub().getChildrenByType(JavaElementType.EXPORTS_STATEMENT, PsiPackageAccessibilityStatement.EMPTY_ARRAY)); + } + + @NotNull + @Override + public Iterable getOpens() { + return JBIterable.of(getStub().getChildrenByType(JavaElementType.OPENS_STATEMENT, PsiPackageAccessibilityStatement.EMPTY_ARRAY)); + } + + @NotNull + @Override + public Iterable getUses() { + return Collections.emptyList(); + } + + @NotNull + @Override + public Iterable getProvides() { + return Collections.emptyList(); } @Override @@ -75,7 +94,7 @@ public class ClsJavaModuleImpl extends ClsRepositoryPsiElement 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 implements PsiExportsStatement { +public class ClsPackageAccessibilityStatementImpl extends ClsRepositoryPsiElement implements PsiPackageAccessibilityStatement { private final NotNullLazyValue myPackageReference; private final NotNullLazyValue> myModuleReferences; - public ClsExportsStatementImpl(PsiExportsStatementStub stub) { + public ClsPackageAccessibilityStatementImpl(PsiPackageAccessibilityStatementStub stub) { super(stub); myPackageReference = new AtomicNotNullLazyValue() { @NotNull @Override protected PsiJavaCodeReferenceElement compute() { - return new ClsJavaCodeReferenceElementImpl(ClsExportsStatementImpl.this, getStub().getPackageName()); + return new ClsJavaCodeReferenceElementImpl(ClsPackageAccessibilityStatementImpl.this, getStub().getPackageName()); } }; myModuleReferences = new AtomicNotNullLazyValue>() { @@ -51,13 +52,19 @@ public class ClsExportsStatementImpl extends ClsRepositoryPsiElement() { @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 targets = stub.getTargets(); if (!targets.isEmpty()) { buffer.append(" to "); @@ -99,11 +106,11 @@ public class ClsExportsStatementImpl extends ClsRepositoryPsiElement { + public JavaPackageAccessibilityStatementElementType(@NotNull String debugName) { + super(debugName); + } -public class JavaExportsStatementElementType extends JavaStubElementType { - 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 to = ContainerUtil.newSmartList(); @@ -70,23 +68,30 @@ public class JavaExportsStatementElementType extends JavaStubElementType 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); + } } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaStubElementTypes.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaStubElementTypes.java index be56a34a5166..080d5d8d171f 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaStubElementTypes.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaStubElementTypes.java @@ -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 diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiExportsStatementStub.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiPackageAccessibilityStatementStub.java similarity index 77% rename from java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiExportsStatementStub.java rename to java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiPackageAccessibilityStatementStub.java index 3448453e1410..1f532bd7992c 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiExportsStatementStub.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiPackageAccessibilityStatementStub.java @@ -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 { +public interface PsiPackageAccessibilityStatementStub extends StubElement { String getPackageName(); List getTargets(); } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/SourceStubPsiFactory.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/SourceStubPsiFactory.java index 7c6ec8c530be..dc3c480170f6 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/SourceStubPsiFactory.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/SourceStubPsiFactory.java @@ -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); } } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/StubPsiFactory.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/StubPsiFactory.java index bce30c89c30f..a3349489d50f 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/StubPsiFactory.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/StubPsiFactory.java @@ -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; } } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiExportsStatementStubImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiPackageAccessibilityStatementStubImpl.java similarity index 59% rename from java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiExportsStatementStubImpl.java rename to java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiPackageAccessibilityStatementStubImpl.java index 9bfd35f5824c..006cf47bcb77 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiExportsStatementStubImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiPackageAccessibilityStatementStubImpl.java @@ -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 implements PsiExportsStatementStub { +import static com.intellij.psi.impl.java.stubs.JavaPackageAccessibilityStatementElementType.typeToRole; +import static com.intellij.util.ObjectUtils.notNull; + +public class PsiPackageAccessibilityStatementStubImpl extends StubBase implements PsiPackageAccessibilityStatementStub { private final String myPackageName; private final List myTargets; - public PsiExportsStatementStubImpl(StubElement parent, String packageName, List targets) { - super(parent, JavaStubElementTypes.EXPORTS_STATEMENT); - myPackageName = packageName; + public PsiPackageAccessibilityStatementStubImpl(StubElement parent, IStubElementType type, String packageName, List targets) { + super(parent, type); + myPackageName = notNull(packageName, ""); myTargets = targets == null || targets.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(targets); } @@ -47,7 +50,7 @@ public class PsiExportsStatementStubImpl extends StubBase 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(); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java index 8b2a1ef71e65..5ae5281e2a80 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java @@ -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 getExports() { + public Iterable getExports() { + return Collections.emptyList(); + } + + @NotNull + @Override + public Iterable getOpens() { + return Collections.emptyList(); + } + + @NotNull + @Override + public Iterable getUses() { + return Collections.emptyList(); + } + + @NotNull + @Override + public Iterable 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() { - @Nullable @Override public Result compute() { LightJavaModule module = new LightJavaModule(manager, jarRoot); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/ExportsElement.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PackageAccessibilityStatementElement.java similarity index 91% rename from java/java-psi-impl/src/com/intellij/psi/impl/source/ExportsElement.java rename to java/java-psi-impl/src/com/intellij/psi/impl/source/PackageAccessibilityStatementElement.java index 4d81063ea68e..e86522ee3423 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/ExportsElement.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PackageAccessibilityStatementElement.java @@ -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; } -} +} \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java index d3ac9a9394fa..fabc786fc3cc 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaCodeReferenceElementImpl.java @@ -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) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java index 300ca43cdd3c..fafc6311bdfe 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleImpl.java @@ -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 implements PsiJavaModule { + private static final Condition EXPORTS_FILTER = new Condition() { + @Override + public boolean value(PsiPackageAccessibilityStatement statement) { + return statement.getRole() == PsiPackageAccessibilityStatement.Role.EXPORTS; + } + }; + private static final Condition OPENS_FILTER = new Condition() { + @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 imp @NotNull @Override - public Iterable getExports() { + public Iterable 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 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 getUses() { + return psiTraverser().children(this).filter(PsiUsesStatement.class); + } + + @NotNull + @Override + public Iterable getProvides() { + return psiTraverser().children(this).filter(PsiProvidesStatement.class); + } + @Override public String getName() { return getModuleName(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiExportsStatementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiPackageAccessibilityStatementImpl.java similarity index 63% rename from java/java-psi-impl/src/com/intellij/psi/impl/source/PsiExportsStatementImpl.java rename to java/java-psi-impl/src/com/intellij/psi/impl/source/PsiPackageAccessibilityStatementImpl.java index d91c6652fb7e..41a01d0d6a10 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiExportsStatementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiPackageAccessibilityStatementImpl.java @@ -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 implements PsiExportsStatement { - public PsiExportsStatementImpl(@NotNull PsiExportsStatementStub stub) { - super(stub, JavaStubElementTypes.EXPORTS_STATEMENT); +public class PsiPackageAccessibilityStatementImpl extends JavaStubPsiElement 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 getModuleNames() { - PsiExportsStatementStub stub = getGreenStub(); + PsiPackageAccessibilityStatementStub stub = getGreenStub(); if (stub != null) { return stub.getTargets(); } @@ -80,7 +89,9 @@ public class PsiExportsStatementImpl extends JavaStubPsiElement diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports1.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports1.txt index b4fd84b746c1..8e92263d9573 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports1.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports1.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports1.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports2.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports2.txt index 5009ca88ed19..0d1c658a8ad3 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports2.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports2.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports2.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports3.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports3.txt index 517d67efff4d..0aafbf8d7e15 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports3.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports3.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports3.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports4.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports4.txt index b1fbdf7159a3..7b17e87eb5dc 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports4.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports4.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports4.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports5.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports5.txt index b8105cf4de28..1eb0b1748243 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports5.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports5.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports5.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports6.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports6.txt index 204a82807b2e..00baddf9f4a3 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports6.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports6.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports6.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports7.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports7.txt index 58b0fef9b183..3ef4469a51a6 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports7.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports7.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports7.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testData/psi/parser-partial/modules/Exports8.txt b/java/java-tests/testData/psi/parser-partial/modules/Exports8.txt index 780a100fa321..a0c8cd6cbc02 100644 --- a/java/java-tests/testData/psi/parser-partial/modules/Exports8.txt +++ b/java/java-tests/testData/psi/parser-partial/modules/Exports8.txt @@ -7,7 +7,7 @@ PsiJavaFile:Exports8.java PsiWhiteSpace(' ') PsiJavaToken:LBRACE('{') PsiWhiteSpace(' ') - PsiExportsStatement + PsiPackageAccessibilityStatement PsiKeyword:exports('exports') PsiWhiteSpace(' ') PsiJavaCodeReferenceElement:pkg diff --git a/java/java-tests/testSrc/com/intellij/psi/JavaStubBuilderTest.java b/java/java-tests/testSrc/com/intellij/psi/JavaStubBuilderTest.java index 7c72444347bc..87c93a36c55f 100644 --- a/java/java-tests/testSrc/com/intellij/psi/JavaStubBuilderTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/JavaStubBuilderTest.java @@ -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() { diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/ClassEscapesItsScopeInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/ClassEscapesItsScopeInspection.java index 6a08a5a197c5..bf669828a44f 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/ClassEscapesItsScopeInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/visibility/ClassEscapesItsScopeInspection.java @@ -85,7 +85,7 @@ public class ClassEscapesItsScopeInspection extends BaseJavaBatchLocalInspection Module module = ProjectFileIndex.SERVICE.getInstance(holder.getProject()).getModuleForFile(vFile); if (module != null) { Set 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)); }