Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2015-05-02 21:34:40 +0000
committerStephan Herrmann2015-05-02 21:34:40 +0000
commit7c359de5c6bcea0f7ebdae693bb52fc42ae4a10d (patch)
tree1e8ec0d04cdcb540f422a7e18f68ef24b283c86c
parent662942655dd5f342abe552469c2f87b335ea2754 (diff)
downloadorg.eclipse.objectteams-7c359de5c6bcea0f7ebdae693bb52fc42ae4a10d.tar.gz
org.eclipse.objectteams-7c359de5c6bcea0f7ebdae693bb52fc42ae4a10d.tar.xz
org.eclipse.objectteams-7c359de5c6bcea0f7ebdae693bb52fc42ae4a10d.zip
Bug 466201 - Reconciler doesn't find methods of OTTypeHierarchies
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java17
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java23
2 files changed, 40 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
index 590013109..e4f3befa0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
@@ -1016,6 +1016,23 @@ public Parser(ProblemReporter problemReporter, boolean optimizeStringLiterals) {
// javadoc support
this.javadocParser = createJavadocParser();
}
+//{ObjectTeams: variant that may enable OT/J:
+public static Parser create(ProblemReporter problemReporter, boolean optimizeStringLiterals, boolean enableOTJ) {
+ CompilerOptions options = problemReporter.options;
+ boolean pureJava = options.isPureJava;
+ boolean scopeKWs = options.allowScopedKeywords;
+ try {
+ if (enableOTJ) {
+ options.isPureJava = false;
+ options.allowScopedKeywords = true;
+ }
+ return new Parser(problemReporter, optimizeStringLiterals);
+ } finally {
+ options.isPureJava = pureJava;
+ options.allowScopedKeywords = scopeKWs;
+ }
+}
+// SH}
protected void annotationRecoveryCheckPoint(int start, int end) {
if(this.lastCheckPoint < end) {
this.lastCheckPoint = end + 1;
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java
index 7468c60c2..c46660d58 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/compiler/parser/SourceTypeConverter.java
@@ -28,14 +28,17 @@ package org.eclipse.jdt.internal.compiler.parser;
*
*/
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IAnnotatable;
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.ILocalVariable;
import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.compiler.CharOperation;
@@ -125,6 +128,14 @@ public class SourceTypeConverter extends TypeConverter {
SourceTypeElementInfo topLevelTypeInfo = (SourceTypeElementInfo) sourceTypes[0];
org.eclipse.jdt.core.ICompilationUnit cuHandle = topLevelTypeInfo.getHandle().getCompilationUnit();
this.cu = (ICompilationUnit) cuHandle;
+//{ObjectTeams: does the target project require OT/J?
+ boolean isOTJ = false;
+ try {
+ IJavaProject jProj = cuHandle.getJavaProject();
+ if (jProj != null)
+ isOTJ = jProj.getProject().hasNature(JavaCore.OTJ_NATURE_ID);
+ } catch (CoreException e) { /* ignore */ }
+// SH}
final CompilationUnitElementInfo compilationUnitElementInfo = (CompilationUnitElementInfo) ((JavaElement) this.cu).getElementInfo();
if (this.has1_5Compliance &&
@@ -134,9 +145,16 @@ public class SourceTypeConverter extends TypeConverter {
// the client wants local and anonymous types to be converted (https://bugs.eclipse.org/bugs/show_bug.cgi?id=254738)
// Also see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=405843
if ((this.flags & LOCAL_TYPE) == 0) {
+//{ObjectTeams: pass down OT/J flag:
+/* orig:
return new Parser(this.problemReporter, true).dietParse(this.cu, compilationResult);
} else {
return new Parser(this.problemReporter, true).parse(this.cu, compilationResult);
+ :giro */
+ return Parser.create(this.problemReporter, true, isOTJ).dietParse(this.cu, compilationResult);
+ } else {
+ return Parser.create(this.problemReporter, true, isOTJ).parse(this.cu, compilationResult);
+// SH}
}
}
@@ -202,7 +220,12 @@ public class SourceTypeConverter extends TypeConverter {
// SH}
return this.unit;
} catch (AnonymousMemberFound e) {
+//{ObjectTeams: pass down OT/J flag:
+/* orig:
return new Parser(this.problemReporter, true).parse(this.cu, compilationResult);
+ :giro */
+ return Parser.create(this.problemReporter, true, isOTJ).parse(this.cu, compilationResult);
+// SH}
}
}

Back to the top