diff options
author | Sasikanth Bharadwaj | 2016-09-25 17:06:25 +0000 |
---|---|---|
committer | Sasikanth Bharadwaj | 2016-09-25 17:07:05 +0000 |
commit | 9bf78cba47059f0c2c8da2c64445ec00ed642f86 (patch) | |
tree | 8533086dc5f8dc80bf67238da5d9b5dfa87c2421 | |
parent | 96cc7d1f2b16a1d266e02faa2b0051283ab6588c (diff) | |
download | eclipse.jdt.core-sasikanth/BETA_JAVA9_Experiment.tar.gz eclipse.jdt.core-sasikanth/BETA_JAVA9_Experiment.tar.xz eclipse.jdt.core-sasikanth/BETA_JAVA9_Experiment.zip |
Final part, passes all java8 tests, compiler is back to where it wassasikanth/BETA_JAVA9_Experiment
before all this, only cleanup remains
12 files changed, 148 insertions, 65 deletions
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java index b40d869d89..b1dc3a04d6 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java @@ -76,6 +76,9 @@ import org.eclipse.jdt.core.compiler.CategorizedProblem; import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.core.eval.IEvaluationContext; import org.eclipse.jdt.internal.compiler.env.IModule; +import org.eclipse.jdt.internal.compiler.env.IModuleEnvironment; +import org.eclipse.jdt.internal.compiler.env.PackageLookup; +import org.eclipse.jdt.internal.compiler.env.TypeLookup; import org.eclipse.jdt.internal.compiler.util.JRTUtil; import org.eclipse.jdt.internal.compiler.util.ObjectVector; import org.eclipse.jdt.internal.compiler.util.SuffixConstants; @@ -116,7 +119,7 @@ import org.xml.sax.SAXException; @SuppressWarnings({ "rawtypes", "unchecked" }) public class JavaProject extends Openable - implements IJavaProject, IProjectNature, SuffixConstants { + implements IJavaProject, IProjectNature, IModuleEnvironment, SuffixConstants { /** * Name of file containing project classpath @@ -3351,4 +3354,16 @@ public class JavaProject return module; } + + @Override + public TypeLookup typeLookup() { + // No direct way to lookup, use the java model APIs instead + return TypeLookup.Dummy; + } + + @Override + public PackageLookup packageLookup() { + // No direct way to lookup, use the java model APIs instead + return PackageLookup.Dummy; + } } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JrtPackageFragmentRoot.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JrtPackageFragmentRoot.java index 90dd19d2cd..f8486b7155 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JrtPackageFragmentRoot.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JrtPackageFragmentRoot.java @@ -137,13 +137,13 @@ public class JrtPackageFragmentRoot extends JarPackageFragmentRoot implements IM @Override public TypeLookup typeLookup() { - // + // No direct way to lookup, use the java model APIs instead return TypeLookup.Dummy; } @Override public PackageLookup packageLookup() { - // + // No direct way to lookup, use the java model APIs instead return PackageLookup.Dummy; } } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Module.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Module.java index 2ae23c7db5..baaffc7889 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Module.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Module.java @@ -14,33 +14,64 @@ *******************************************************************************/ package org.eclipse.jdt.internal.core; +import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.JavaModelException; +import org.eclipse.jdt.core.compiler.CharOperation; +import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader; import org.eclipse.jdt.internal.compiler.env.IModuleDeclaration; import org.eclipse.jdt.internal.compiler.env.IModuleEnvironment; -import org.eclipse.jdt.internal.compiler.env.IModulePathEntry; public class Module implements org.eclipse.jdt.internal.compiler.env.IModule { - public IModulePathEntry entry; - public IModuleDeclaration declaration; + public ClassFile binaryDecl; + public IModuleDeclaration declaration = null; + public boolean isBinary = false; + public SourceType sourceDecl; - public Module(IModulePathEntry entry, IModuleDeclaration declaration) { - this.entry = entry; - this.declaration = declaration; + public Module(SourceType sourceDecl) { + this.sourceDecl = sourceDecl; + } + public Module(ClassFile binaryDecl) { + this.binaryDecl = binaryDecl; + this.isBinary = true; } @Override public char[] name() { // - return this.declaration.name(); + IModuleDeclaration decl = getDeclaration(); + return decl == null ? CharOperation.NO_CHAR : decl.name(); } @Override public IModuleDeclaration getDeclaration() { // + if (this.declaration == null) { + try { + if (this.isBinary) { + IType type = this.binaryDecl.getType(); + this.declaration = ((ClassFileReader) (((BinaryType)type).getElementInfo())).getModuleDeclaration(); + } else { + this.declaration = (ModuleInfo) this.sourceDecl.getElementInfo(); + } + }catch (JavaModelException e) { + // do nothing + } + } return this.declaration; } @Override public IModuleEnvironment getLookupEnvironment() { - // - return this.entry == null ? null : this.entry.getLookupEnvironment(); - } + // TODO: this should refer to the ModuleSourcePathManager to map this module to + // an IModuelePathEntry + if (this.isBinary) { + PackageFragmentRoot root = (PackageFragmentRoot) this.binaryDecl + .getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT); + if (root instanceof JrtPackageFragmentRoot) + return (JrtPackageFragmentRoot) root; + } else { + return (JavaProject) this.sourceDecl.getAncestor(IJavaElement.JAVA_PROJECT); + } + return null; + } } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleSourcePathManager.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleSourcePathManager.java index 6c5b7b21a9..7d84c730bc 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleSourcePathManager.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ModuleSourcePathManager.java @@ -45,7 +45,15 @@ public class ModuleSourcePathManager { root = this.knownModules.get(name); return root; } - + public void addEntry(IModule module, JavaProject project) throws JavaModelException { + String moduleName = new String(module.name()); + IModulePathEntry entry = getModuleRoot0(moduleName); + if (entry != null) { + // TODO : Should we signal error via JavaModelException + return; + } + this.knownModules.put(moduleName, new ProjectEntry(project)); + } public void seekModule(char[] name, boolean partialMatch, IJavaElementRequestor requestor) throws JavaModelException { if (name == null) return; @@ -59,8 +67,8 @@ public class ModuleSourcePathManager { IModule module = ((JavaProject) project).getModule(); if (module != null) { char[] moduleName = module.name(); - this.knownModules.put(CharOperation.charToString(name), ((Module)module).entry); if (CharOperation.equals(name, moduleName)) { + addEntry(module, (JavaProject) project); requestor.acceptModule(module); break; } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java index 97e4ae2493..ee2f9c51f6 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/NameLookup.java @@ -13,8 +13,6 @@ package org.eclipse.jdt.internal.core; import java.io.File; import java.util.*; -import java.util.stream.Stream; - import org.eclipse.core.resources.*; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; @@ -1018,32 +1016,13 @@ public class NameLookup implements SuffixConstants { Object value = this.packageFragments.valueTable[pkgIndex]; // reuse existing String[] String[] pkgName = (String[]) this.packageFragments.keyTable[pkgIndex]; - context.getEnvironment().<PackageFragmentRoot>flatMap(e -> { - if (e instanceof ProjectEntry) { - JavaProject prj = ((ProjectEntry) e).project; - List<IPackageFragmentRoot> children; - try { - children = prj.getChildrenOfType(IJavaElement.PACKAGE_FRAGMENT_ROOT); - return children.stream().filter(r -> { - try { - return r.getKind() == IPackageFragmentRoot.K_SOURCE; - } catch (JavaModelException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - return false; - }).map(r -> (PackageFragmentRoot)r); - } catch (JavaModelException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - return Stream.empty(); - } else { - return Stream.of((JrtPackageFragmentRoot)e); - } - }).forEach(r -> { + context.getEnvironment().forEach(r -> { if (value instanceof PackageFragmentRoot) { - if (value.equals(r)) { + Object toCompare = value; + if (r instanceof JavaProject) { + toCompare = ((PackageFragmentRoot)value).getJavaProject(); + } + if (value.equals(toCompare)) { PackageFragmentRoot root = (PackageFragmentRoot) value; requestor.acceptPackageFragment(root.getPackageFragment(pkgName)); } @@ -1054,7 +1033,11 @@ public class NameLookup implements SuffixConstants { if (requestor.isCanceled()) return; PackageFragmentRoot root = (PackageFragmentRoot) roots[i]; - if (root.equals(r)) + Object toCompare = root; + if (r instanceof JavaProject) { + toCompare = root.getJavaProject(); + } + if (root.equals(toCompare)) requestor.acceptPackageFragment(root.getPackageFragment(pkgName)); } } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageFragmentRoot.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageFragmentRoot.java index 257a1dee62..af16c47aba 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageFragmentRoot.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/PackageFragmentRoot.java @@ -22,7 +22,6 @@ import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; import org.eclipse.jdt.core.*; import org.eclipse.jdt.core.compiler.CharOperation; -import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader; import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; import org.eclipse.jdt.internal.core.util.MementoTokenizer; import org.eclipse.jdt.internal.core.util.Messages; @@ -882,33 +881,20 @@ public org.eclipse.jdt.internal.compiler.env.IModule getModule() { .getCompilationUnit(TypeConstants.MODULE_INFO_FILE_NAME_STRING); if (unit instanceof CompilationUnit && unit.exists()) { IType type = unit.getType(new String(TypeConstants.MODULE_INFO_NAME)); - ModuleInfo decl = (ModuleInfo)((SourceType)type).getElementInfo(); - if (decl != null) { - JavaProject prj = (JavaProject) this.getAncestor(IJavaElement.JAVA_PROJECT); - module = new Module(new ProjectEntry(prj), decl); - rootInfo.setModule(module); - return module; + if (type != null) { + rootInfo.setModule(module = new Module((SourceType)type)); } -// info = (CompilationUnitElementInfo) ((CompilationUnit) unit) -// .getElementInfo(); -// if (info != null) -// return info.getModule(); } } else { IClassFile classFile = ((IPackageFragment)pkgs[j]).getClassFile(TypeConstants.MODULE_INFO_CLASS_NAME_STRING); if (classFile instanceof ClassFile && classFile.exists()) { - IType type = classFile.getType(); - org.eclipse.jdt.internal.compiler.env.IModuleDeclaration decl = ((ClassFileReader)(((BinaryType)type).getElementInfo())).getModuleDeclaration(); - if (decl != null) { - org.eclipse.jdt.internal.compiler.env.IModule mod = new Module((JrtPackageFragmentRoot)this, decl); - rootInfo.setModule(mod); - return mod; - } + rootInfo.setModule(module = new Module((ClassFile)classFile)); } } break; } } + return module; } catch (JavaModelException e) { // } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ProjectEntry.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ProjectEntry.java index 54679bfddf..eb03bc31bc 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ProjectEntry.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ProjectEntry.java @@ -1,3 +1,17 @@ +/******************************************************************************* + * Copyright (c) 2016 IBM Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * This is an implementation of an early-draft specification developed under the Java + * Community Process (JCP) and is made available for testing and evaluation purposes + * only. The code is not compatible with any specification of the JCP. + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ package org.eclipse.jdt.internal.core; import org.eclipse.jdt.core.JavaModelException; @@ -7,6 +21,10 @@ import org.eclipse.jdt.internal.compiler.env.IModulePathEntry; import org.eclipse.jdt.internal.compiler.env.PackageLookup; import org.eclipse.jdt.internal.compiler.env.TypeLookup; +/** + * Represents a project + * + */ public class ProjectEntry implements IModulePathEntry, IModuleEnvironment { JavaProject project; 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 8815af2eca..03ccf748fb 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 @@ -35,7 +35,6 @@ import org.eclipse.jdt.internal.compiler.env.TypeLookup; import org.eclipse.jdt.internal.compiler.lookup.ModuleEnvironment; import org.eclipse.jdt.internal.compiler.util.SimpleLookupTable; import org.eclipse.jdt.internal.compiler.util.SuffixConstants; -import org.eclipse.jdt.internal.core.Module; import org.eclipse.jdt.internal.core.util.Util; public class ClasspathDirectory extends ClasspathLocation implements IModuleEnvironment { diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJar.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJar.java index aba726771b..d09dda6e31 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJar.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJar.java @@ -32,7 +32,6 @@ import org.eclipse.jdt.internal.compiler.env.TypeLookup; import org.eclipse.jdt.internal.compiler.util.SimpleLookupTable; import org.eclipse.jdt.internal.compiler.util.SimpleSet; import org.eclipse.jdt.internal.compiler.util.SuffixConstants; -import org.eclipse.jdt.internal.core.Module; import org.eclipse.jdt.internal.core.util.Util; import java.io.*; diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJrt.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJrt.java index 0fbb63212f..83add014b6 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJrt.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathJrt.java @@ -45,7 +45,6 @@ import org.eclipse.jdt.internal.compiler.env.TypeLookup; import org.eclipse.jdt.internal.compiler.util.JRTUtil; import org.eclipse.jdt.internal.compiler.util.SimpleSet; import org.eclipse.jdt.internal.compiler.util.SuffixConstants; -import org.eclipse.jdt.internal.core.Module; public class ClasspathJrt extends ClasspathLocation implements IMultiModuleEntry, IModuleEnvironment { 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 63e6ecf453..b43f4a2427 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 @@ -23,7 +23,6 @@ import org.eclipse.jdt.internal.compiler.env.IModule; import org.eclipse.jdt.internal.compiler.env.IModuleDeclaration; import org.eclipse.jdt.internal.compiler.env.INameEnvironment; import org.eclipse.jdt.internal.compiler.parser.Parser; -import org.eclipse.jdt.internal.core.Module; import org.eclipse.jdt.internal.core.ModuleInfo; import org.eclipse.jdt.internal.core.util.Util; diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/Module.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/Module.java new file mode 100644 index 0000000000..8333df19d4 --- /dev/null +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/Module.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2016 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * This is an implementation of an early-draft specification developed under the Java + * Community Process (JCP) and is made available for testing and evaluation purposes + * only. The code is not compatible with any specification of the JCP. + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.internal.core.builder; + +import org.eclipse.jdt.internal.compiler.env.IModule; +import org.eclipse.jdt.internal.compiler.env.IModuleDeclaration; +import org.eclipse.jdt.internal.compiler.env.IModuleEnvironment; +import org.eclipse.jdt.internal.compiler.env.IModulePathEntry; + +public class Module implements IModule { + public IModulePathEntry entry; + public IModuleDeclaration declaration; + + public Module(IModulePathEntry entry, IModuleDeclaration declaration) { + this.entry = entry; + this.declaration = declaration; + } + + @Override + public char[] name() { + // + return this.declaration.name(); + } + @Override + public IModuleDeclaration getDeclaration() { + // + return this.declaration; + } + @Override + public IModuleEnvironment getLookupEnvironment() { + // + return this.entry == null ? null : this.entry.getLookupEnvironment(); + } +} |