Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2017-07-06 21:22:46 +0000
committerStephan Herrmann2017-07-06 21:56:27 +0000
commitc2d14a1f165c1fc082bde2bfc0ca85051a03a917 (patch)
treea622cedace815f4f71ef028ce2a46da3494060e5
parentc00bc3fdd83212c5995041d716296940002538ab (diff)
downloadeclipse.jdt.core-c2d14a1f165c1fc082bde2bfc0ca85051a03a917.tar.gz
eclipse.jdt.core-c2d14a1f165c1fc082bde2bfc0ca85051a03a917.tar.xz
eclipse.jdt.core-c2d14a1f165c1fc082bde2bfc0ca85051a03a917.zip
Bug 518668: [9][test] ASTConverter tests failure
- reinstate "requires java.base" in all ModuleBinding (compiler & DOM)
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java9
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceModuleBinding.java24
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleDescriptionInfo.java22
3 files changed, 36 insertions, 19 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java
index 09651971a5..1897fe86cc 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java
@@ -442,7 +442,7 @@ public class ASTConverter9Test extends ConverterTestSetup {
ASTNode unit3 = runConversion(AST_INTERNAL_JLS9, sourceUnit3, true);
assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, unit3.getNodeType());
ModuleDeclaration moduleDecl3 = ((CompilationUnit) unit3).getModule();
- IModuleBinding firstModAsBinary = moduleDecl3.resolveBinding().getRequiredModules()[0];
+ IModuleBinding firstModAsBinary = moduleDecl3.resolveBinding().getRequiredModules()[1]; // skip java.base
assertModuleFirstDetails(firstModAsBinary);
@@ -466,10 +466,11 @@ public class ASTConverter9Test extends ConverterTestSetup {
IModuleBinding[] reqs = moduleBinding.getRequiredModules();
assertTrue("Null requires", reqs != null);
- assertTrue("incorrect number of requires modules", reqs.length == 1);
- assertTrue("incorrect name for requires modules", reqs[0].getName().equals("second"));
+ assertTrue("incorrect number of requires modules", reqs.length == 2);
+ assertTrue("incorrect name for requires modules", reqs[0].getName().equals("java.base"));
+ assertTrue("incorrect name for requires modules", reqs[1].getName().equals("second"));
- IPackageBinding[] secPacks = reqs[0].getExportedPackages();
+ IPackageBinding[] secPacks = reqs[1].getExportedPackages();
assertTrue("Packages Exported in second module null", secPacks != null);
assertTrue("Incorrect number of exported packages in second module", secPacks.length == 1);
IPackageBinding pack22 = secPacks[0];
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceModuleBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceModuleBinding.java
index c6a1f27401..95461bc201 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceModuleBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceModuleBinding.java
@@ -37,16 +37,19 @@ public class SourceModuleBinding extends ModuleBinding {
public void setRequires(ModuleBinding[] requires, ModuleBinding[] requiresTransitive) {
// TODO(SHMOD): it's a bit awkward that we may get called after applyModuleUpdates() has already worked.
- this.requires = merge(this.requires, requires, ModuleBinding[]::new);
- this.requiresTransitive = merge(this.requiresTransitive, requiresTransitive, ModuleBinding[]::new);
+ ModuleBinding javaBase = this.environment.javaBaseModule();
+ if (javaBase.isUnnamed()) // happens when no java.base can be found in the name environment.
+ javaBase = null;
+ this.requires = merge(this.requires, requires, javaBase, ModuleBinding[]::new);
+ this.requiresTransitive = merge(this.requiresTransitive, requiresTransitive, null, ModuleBinding[]::new);
}
public void setUses(TypeBinding[] uses) {
- this.uses = merge(this.uses, uses, TypeBinding[]::new);
+ this.uses = merge(this.uses, uses, null, TypeBinding[]::new);
}
public void setServices(TypeBinding[] services) {
- this.services = merge(this.services, services, TypeBinding[]::new);
+ this.services = merge(this.services, services, null, TypeBinding[]::new);
}
public void setImplementations(TypeBinding infBinding, Collection<TypeBinding> resolvedImplementations) {
@@ -55,17 +58,20 @@ public class SourceModuleBinding extends ModuleBinding {
this.implementations.put(infBinding, resolvedImplementations.toArray(new TypeBinding[resolvedImplementations.size()]));
}
- private <T> T[] merge(T[] one, T[] two, IntFunction<T[]> supplier) {
- if (one.length == 0) {
+ private <T> T[] merge(T[] one, T[] two, T extra, IntFunction<T[]> supplier) {
+ if (one.length == 0 && extra == null) {
if (two.length > 0)
return two;
return one;
}
+ int len0 = extra == null ? 0 : 1;
int len1 = one.length;
int len2 = two.length;
- T[] result = supplier.apply(len1+len2);
- System.arraycopy(one, 0, result, 0, len1);
- System.arraycopy(two, 0, result, len1, len2);
+ T[] result = supplier.apply(len0+len1+len2);
+ if (extra != null)
+ result[0] = extra;
+ System.arraycopy(one, 0, result, len0, len1);
+ System.arraycopy(two, 0, result, len0+len1, len2);
return result;
}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleDescriptionInfo.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleDescriptionInfo.java
index d0e058a4b0..97d5da0639 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleDescriptionInfo.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleDescriptionInfo.java
@@ -26,6 +26,7 @@ import org.eclipse.jdt.internal.compiler.ast.RequiresStatement;
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
import org.eclipse.jdt.internal.compiler.ast.UsesStatement;
import org.eclipse.jdt.internal.compiler.env.IModule;
+import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
public class ModuleDescriptionInfo extends AnnotatableInfo implements IModule {
@@ -205,14 +206,17 @@ public class ModuleDescriptionInfo extends AnnotatableInfo implements IModule {
mod.isOpen = module.isOpen();
if (module.requiresCount > 0) {
RequiresStatement[] refs = module.requires;
- mod.requires = new ModuleReferenceInfo[refs.length];
+ mod.requires = new ModuleReferenceInfo[refs.length+1];
+ mod.requires[0] = getJavaBaseReference();
for (int i = 0; i < refs.length; i++) {
- mod.requires[i] = new ModuleReferenceInfo();
- mod.requires[i].name = CharOperation.concatWith(refs[i].module.tokens, '.'); // Check why ModuleReference#tokens must be a char[][] and not a char[] or String;
- mod.requires[i].modifiers = refs[i].modifiers;
+ mod.requires[i+1] = new ModuleReferenceInfo();
+ mod.requires[i+1].name = CharOperation.concatWith(refs[i].module.tokens, '.'); // Check why ModuleReference#tokens must be a char[][] and not a char[] or String;
+ mod.requires[i+1].modifiers = refs[i].modifiers;
}
} else {
- mod.requires = NO_REQUIRES;
+ mod.requires = CharOperation.equals(module.moduleName, TypeConstants.JAVA_BASE)
+ ? NO_REQUIRES
+ : new ModuleReferenceInfo[] { getJavaBaseReference() };
}
if (module.exportsCount > 0) {
ExportsStatement[] refs = module.exports;
@@ -255,6 +259,12 @@ public class ModuleDescriptionInfo extends AnnotatableInfo implements IModule {
return mod;
}
+ private static ModuleReferenceInfo getJavaBaseReference() {
+ ModuleReferenceInfo ref = new ModuleReferenceInfo();
+ ref.name = TypeConstants.JAVA_BASE;
+ return ref;
+ }
+
private static PackageExportInfo createPackageExport(ExportsStatement ref) {
PackageExportInfo exp = new PackageExportInfo();
exp.pack = ref.pkgName;
@@ -370,7 +380,7 @@ public class ModuleDescriptionInfo extends AnnotatableInfo implements IModule {
buffer.append('\n');
for(int i = 0; i < this.usedServices.length; i++) {
buffer.append("\tuses "); //$NON-NLS-1$
- buffer.append(this.usedServices[i].toString()).append('\n');
+ buffer.append(this.usedServices[i]).append('\n');
}
}
if (this.services != null && this.services.length > 0) {

Back to the top