update jdt.core to S4_13_0_M1
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
index 8972339..940fc16 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
@@ -8778,6 +8778,35 @@
deleteProject(prjD);
}
}
+ public void testBug547181Comment104() throws CoreException {
+
+ IJavaProject prjA = createJava9Project("A");
+ IJavaProject prjB = createJava9Project("B");
+ try {
+ // NO module-info.java, so A is accessed as automatic module
+ createFolder("A/src/pack/a");
+
+ createFile("A/src/pack/_some_resource_without_extension",
+ "dummy content\n");
+
+ addModularProjectEntry(prjB, prjA);
+ // ---1---
+ createFolder("B/src/pack/b");
+ createFile("B/src/pack/b/Usage.java",
+ "package pack.b;\n" +
+ "public class Usage {\n" +
+ "}\n");
+ createFile("B/src/module-info.java",
+ "module B {\n" +
+ " requires A;\n" +
+ "}\n");
+ getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);
+ assertNoErrors();
+ } finally {
+ deleteProject(prjA);
+ deleteProject(prjB);
+ }
+ }
protected void assertNoErrors() throws CoreException {
for (IProject p : getWorkspace().getRoot().getProjects()) {
int maxSeverity = p.findMaxProblemSeverity(null, true, IResource.DEPTH_INFINITE);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java
index acfcedc..bd6a6e6 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java
@@ -104,15 +104,6 @@
return createSuite(ASTRewritingStatementsTest.class);
}
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- if (this.apiLevel >= AST.JLS12 ) {
- this.project1.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
- this.project1.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
- }
- }
-
/** @deprecated using deprecated code */
private void internalSetExtraDimensions(VariableDeclarationFragment node, int dimensions) {
if (this.apiLevel < AST.JLS8) {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.java
index e604f74..f10badf 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.java
@@ -17,7 +17,6 @@
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.Block;
@@ -54,15 +53,6 @@
return createSuite(ASTRewritingSwitchExpressionsTest.class);
}
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- if (this.apiLevel >= AST.JLS12 ) {
- this.project1.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
- this.project1.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
- }
- }
-
@SuppressWarnings("rawtypes")
public void testSwitchExpressions_since_12() throws Exception {
IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
index 2e5e3d7..35e8fd8 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
@@ -446,8 +446,8 @@
private ReferenceBinding combine(ReferenceBinding one, ReferenceBinding two, ModuleBinding clientModule) {
if (one == null) return two;
if (two == null) return one;
- if (!clientModule.canAccess(one.fPackage)) return two;
- if (!clientModule.canAccess(two.fPackage)) return one;
+ if (one.fPackage == null || !clientModule.canAccess(one.fPackage)) return two;
+ if (two.fPackage == null || !clientModule.canAccess(two.fPackage)) return one;
if (one == two) return one; //$IDENTITY-COMPARISON$
return new ProblemReferenceBinding(one.compoundName, one, ProblemReasons.Ambiguous); // TODO(SHMOD): use a new problem ID
}
@@ -1335,8 +1335,15 @@
} else {
packageBinding = getPackage0(compoundName[0]);
if (packageBinding == null || packageBinding == TheNotFoundPackage) {
- packageBinding = new PlainPackageBinding(compoundName[0], this, this.module);
- packageBinding = this.module.addPackage(packageBinding, true);
+ packageBinding = this.module.getOrCreateDeclaredPackage(new char[][] {compoundName[0]});
+ if (this.useModuleSystem) {
+ char[][] declaringModuleNames = null;
+ if (this.module.isUnnamed()) {
+ IModuleAwareNameEnvironment moduleEnv = (IModuleAwareNameEnvironment) this.nameEnvironment;
+ declaringModuleNames = moduleEnv.getUniqueModulesDeclaringPackage(new char[][] {packageBinding.readableName()}, ModuleBinding.ANY);
+ }
+ packageBinding = this.module.combineWithPackagesFromOtherRelevantModules(packageBinding, packageBinding.compoundName, declaringModuleNames);
+ }
this.knownPackages.put(compoundName[0], packageBinding); // update in case of split package
}
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java
index e63a5e2..741b9ef 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java
@@ -549,18 +549,7 @@
* </p>
*/
public PackageBinding getTopLevelPackage(char[] name) {
- // check cache:
- PackageBinding binding = this.environment.getPackage0(name);
- if (binding != null)
- return binding == LookupEnvironment.TheNotFoundPackage ? null : binding;
- binding = getVisiblePackage(null, name);
- // remember:
- if (binding != null) {
- this.environment.knownPackages.put(name, binding);
- } else {
- this.environment.knownPackages.put(name, LookupEnvironment.TheNotFoundPackage);
- }
- return binding;
+ return getVisiblePackage(null, name);
}
PlainPackageBinding getDeclaredPackage(char[] flatName) {
@@ -579,7 +568,7 @@
if (pkg == LookupEnvironment.TheNotFoundPackage)
return null;
else
- return addPackage(pkg, false);
+ return pkg;
}
// check cached plain PackageBinding in declaredPackages (which may need combining with siblings):
@@ -604,7 +593,7 @@
}
if (binding == null) {
// declared here, not yet known, so create it now:
- binding = new PlainPackageBinding(subPkgCompoundName, parent, this.environment, this);
+ binding = this.createDeclaredPackage(subPkgCompoundName, parent);
}
} else {
// visible but foreign (when current is unnamed or auto):
@@ -612,14 +601,7 @@
ModuleBinding declaringModule = this.environment.root.getModule(declaringModuleName);
if (declaringModule != null) {
PlainPackageBinding declaredPackage = declaringModule.getDeclaredPackage(fullFlatName);
- if (declaredPackage != null) {
- // don't add foreign package to 'parent' (below), but to its own parent:
- if (declaredPackage.parent != null)
- declaredPackage.parent.addPackage(declaredPackage, declaringModule);
- parent = null;
- //
- binding = SplitPackageBinding.combine(declaredPackage, binding, this);
- }
+ binding = SplitPackageBinding.combine(declaredPackage, binding, this);
}
}
}
@@ -627,32 +609,32 @@
}
} else {
if (this.environment.nameEnvironment.isPackage(parentName, name))
- binding = new PlainPackageBinding(subPkgCompoundName, parent, this.environment, this);
+ binding = this.createDeclaredPackage(subPkgCompoundName, parent);
}
-
- // enrich with split-siblings from visible modules:
- if (parent != null && binding != null)
- parent.addPackage(binding, this); // preliminarily add to avoid creating duplicates, will be updated below
+
binding = combineWithPackagesFromOtherRelevantModules(binding, subPkgCompoundName, declaringModuleNames);
+
+ assert binding == null || binding instanceof PlainPackageBinding || binding.enclosingModule == this;
+
if (binding == null || !binding.isValidBinding()) {
- if (parent != null
- && !(parent instanceof SplitPackageBinding)) // don't store problem into SPB, because from different focus things may look differently
- {
+ if (parent != null) {
if (binding == null) {
parent.addNotFoundPackage(name);
} else {
parent.knownPackages.put(name, binding);
}
+ } else {
+ this.environment.knownPackages.put(name, LookupEnvironment.TheNotFoundPackage);
}
return null;
}
// remember
if (parentName.length == 0) {
- binding.environment.knownPackages.put(name, binding);
+ this.environment.knownPackages.put(name, binding);
} else if (parent != null) {
binding = parent.addPackage(binding, this);
}
- return addPackage(binding, false);
+ return binding;
}
/**
@@ -683,36 +665,7 @@
return parent;
}
- /**
- * Check if the given package is declared in this module,
- * and if so, remember this fact for later.
- * The package can be a {@code SplitPackageBinding} in which case
- * only one of its incarnations needs to be declared in this module.
- * @param packageBinding the package to add
- * @param checkForSplit if true then we should try to construct a split package from
- * same named packages in required modules.
- * @return the given package, possibly enriched to a {@link SplitPackageBinding}
- */
- PackageBinding addPackage(PackageBinding packageBinding, boolean checkForSplit) {
- if (packageBinding.isDeclaredIn(this)) {
- char[] packageName = packageBinding.readableName();
- if (checkForSplit && this.environment.useModuleSystem) {
- char[][] declaringModuleNames = null;
- if (isUnnamed()) {
- IModuleAwareNameEnvironment moduleEnv = (IModuleAwareNameEnvironment) this.environment.nameEnvironment;
- declaringModuleNames = moduleEnv.getUniqueModulesDeclaringPackage(new char[][] {packageName}, ANY);
- }
- packageBinding = combineWithPackagesFromOtherRelevantModules(packageBinding, packageBinding.compoundName, declaringModuleNames);
- }
- this.declaredPackages.put(packageName, packageBinding.getIncarnation(this));
- if (packageBinding.parent == null) {
- this.environment.knownPackages.put(packageName, packageBinding);
- }
- }
- return packageBinding;
- }
-
- private PackageBinding combineWithPackagesFromOtherRelevantModules(PackageBinding currentBinding, char[][] compoundName, char[][] declaringModuleNames) {
+ PackageBinding combineWithPackagesFromOtherRelevantModules(PackageBinding currentBinding, char[][] compoundName, char[][] declaringModuleNames) {
for (ModuleBinding moduleBinding : otherRelevantModules(declaringModuleNames)) {
PlainPackageBinding nextBinding = moduleBinding.getDeclaredPackage(CharOperation.concatWith(compoundName, '.'));
currentBinding = SplitPackageBinding.combine(nextBinding, currentBinding, this);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PlainPackageBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PlainPackageBinding.java
index 97ea1a2..894a710 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PlainPackageBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PlainPackageBinding.java
@@ -20,12 +20,12 @@
/** Create a toplevel package. */
public PlainPackageBinding(char[] topLevelPackageName, LookupEnvironment environment, ModuleBinding enclosingModule) {
- super(new char[][] {topLevelPackageName}, null, environment, enclosingModule);
+ this(new char[][] {topLevelPackageName}, null, environment, enclosingModule);
}
/** Create a default package. */
public PlainPackageBinding(LookupEnvironment environment) {
- super(CharOperation.NO_CHAR_CHAR, null, environment, environment.module);
+ this(CharOperation.NO_CHAR_CHAR, null, environment, environment.module);
}
/** Create a normal package. */
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
index cd266bf..ca374e5 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
@@ -462,18 +462,18 @@
@Override
public boolean visit(BreakStatement node) {
- if (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled() && node.isImplicit() && node.getExpression() == null) {
+ if (node.getAST().apiLevel() >= JLS12 && node.isImplicit() && node.getExpression() == null) {
return false;
}
printIndent();
- if (node.getAST().apiLevel() < JLS12 || (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled() && !node.isImplicit())) {
+ if (node.getAST().apiLevel() < JLS12 || (node.getAST().apiLevel() >= JLS12 && !node.isImplicit())) {
this.buffer.append("break"); //$NON-NLS-1$
}
if (node.getLabel() != null) {
this.buffer.append(" ");//$NON-NLS-1$
node.getLabel().accept(this);
}
- if (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled()) {
+ if (node.getAST().apiLevel() >= JLS12) {
if (node.getExpression() != null) {
this.buffer.append(" ");//$NON-NLS-1$
node.getExpression().accept(this);
@@ -1520,7 +1520,7 @@
@Override
public boolean visit(SwitchCase node) {
- if (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled()) {
+ if (node.getAST().apiLevel() >= JLS12) {
if (node.isDefault()) {
this.buffer.append("default");//$NON-NLS-1$
this.buffer.append(node.isSwitchLabeledRule() ? " ->" : ":");//$NON-NLS-1$ //$NON-NLS-2$
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
index 1e6c428..22ee192 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
@@ -2604,7 +2604,7 @@
try {
int offset= getScanner().getTokenEndOffset(TerminalTokens.TokenNamebreak, node.getStartPosition());
rewriteNode(node, BreakStatement.LABEL_PROPERTY, offset, ASTRewriteFormatter.SPACE); // space between break and label
- if (node.getAST().apiLevel() >= JLS12_INTERNAL && node.getAST().isPreviewEnabled()) {
+ if (node.getAST().apiLevel() >= JLS12_INTERNAL) {
rewriteNode(node, BreakStatement.EXPRESSION_PROPERTY, offset, ASTRewriteFormatter.SPACE); // space between break and label
}
} catch (CoreException e) {
@@ -3570,7 +3570,7 @@
}
// dont allow switching from case to default or back. New statements should be created.
- if (node.getAST().apiLevel() >= JLS12_INTERNAL && node.getAST().isPreviewEnabled()) {
+ if (node.getAST().apiLevel() >= JLS12_INTERNAL) {
int pos = node.expressions().size() == 0 ? node.getStartPosition() :
rewriteNodeList(node, SwitchCase.EXPRESSIONS2_PROPERTY, node.getStartPosition(), Util.EMPTY_STRING, ", "); //$NON-NLS-1$
if (isChanged(node, SwitchCase.SWITCH_LABELED_RULE_PROPERTY)) {
@@ -3794,7 +3794,7 @@
insertIndent++;
}
ParagraphListRewriter listRewriter;
- if (node.getAST().apiLevel() >= JLS12_INTERNAL && node.getAST().isPreviewEnabled()) {
+ if (node.getAST().apiLevel() >= JLS12_INTERNAL) {
listRewriter= new SwitchListLabeledRuleRewriter(insertIndent);
} else {
listRewriter= new SwitchListRewriter(insertIndent);
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
index 7e7aa32..5f07b07 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
@@ -396,11 +396,11 @@
@Override
public boolean visit(BreakStatement node) {
- if (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled() && node.isImplicit() && node.getExpression() == null) {
+ if (node.getAST().apiLevel() >= JLS12 && node.isImplicit() && node.getExpression() == null) {
return false;
}
- if (node.getAST().apiLevel() < JLS12 || (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled() && !node.isImplicit())) {
+ if (node.getAST().apiLevel() < JLS12 || (node.getAST().apiLevel() >= JLS12 && !node.isImplicit())) {
this.result.append("break"); //$NON-NLS-1$
}
ASTNode label= getChildNode(node, BreakStatement.LABEL_PROPERTY);
@@ -408,7 +408,7 @@
this.result.append(' ');
label.accept(this);
}
- if (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled()) {
+ if (node.getAST().apiLevel() >= JLS12) {
ASTNode expression = getChildNode(node, BreakStatement.EXPRESSION_PROPERTY);
if (expression != null ) {
this.result.append(' ');
@@ -1032,7 +1032,7 @@
@Override
public boolean visit(SwitchCase node) {
- if (node.getAST().apiLevel() >= JLS12 && node.getAST().isPreviewEnabled()) {
+ if (node.getAST().apiLevel() >= JLS12) {
if (node.isDefault()) {
this.result.append("default");//$NON-NLS-1$
this.result.append(getBooleanAttribute(node, SwitchCase.SWITCH_LABELED_RULE_PROPERTY) ? " ->" : ":");//$NON-NLS-1$ //$NON-NLS-2$
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java
index ba43b14..623f116 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java
@@ -259,7 +259,8 @@
IPath basePath = this.binaryFolder.getFullPath();
try {
this.binaryFolder.accept(r -> {
- if (r instanceof IFile && SuffixConstants.EXTENSION_class.equals(r.getFileExtension().toLowerCase())) {
+ String extension = r.getFileExtension();
+ if (r instanceof IFile && extension != null && SuffixConstants.EXTENSION_class.equals(extension.toLowerCase())) {
packageNames.add(r.getParent().getFullPath().makeRelativeTo(basePath).toString().replace('/', '.'));
}
return true;
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathMultiDirectory.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathMultiDirectory.java
index 9c6865e..fd384f2 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathMultiDirectory.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathMultiDirectory.java
@@ -91,7 +91,8 @@
dirList[index++] = name;
}
}
- } else {
+ }
+ if(index==0) {
container = this.sourceFolder.findMember(qualifiedPackageName);
if (container instanceof IContainer) {
members = ((IContainer) container).members();