Bug 419987 - "restricted" warning is incorrectly flagged at team of sub
role
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
index 9d5b485..16a0aa5 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
@@ -562,7 +562,8 @@
scope.problemReporter().forbiddenReference(type, this, restriction.classpathEntryType,
restriction.classpathEntryName, restriction.getProblemId());
:giro */
- scope.problemReporter().forbiddenReference(type, this, restriction.classpathEntryType,
+ if (!isGeneratedBaseTypeReference())
+ scope.problemReporter().forbiddenReference(type, this, restriction.classpathEntryType,
restriction);
// SH}
}
@@ -580,6 +581,14 @@
if (!scope.compilerOptions().reportDeprecationInsideDeprecatedCode && scope.isInsideDeprecatedCode()) return false;
return true;
}
+
+ private boolean isGeneratedBaseTypeReference() {
+ if ((this.bits & IsGenerated) == 0)
+ return false;
+ if (!(this instanceof Expression))
+ return false;
+ return ((Expression)this).getBaseclassDecapsulation().isAllowed();
+ }
public abstract StringBuffer print(int indent, StringBuffer output);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java
index 8ad408c..1cb1fe2 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayQualifiedTypeReference.java
@@ -19,12 +19,6 @@
public class ArrayQualifiedTypeReference extends QualifiedTypeReference {
int dimensions;
-//{ObjectTeams: mark generated reference:
- public ArrayQualifiedTypeReference(char[][] sources , int dim, long[] poss, boolean isGenerated) {
- this(sources, dim, poss);
- this.isGenerated = isGenerated;
- }
-// SH}
public ArrayQualifiedTypeReference(char[][] sources , int dim, long[] poss) {
super( sources , poss);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java
index 477ebd0..6421176 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java
@@ -35,15 +35,6 @@
public char[][] tokens;
public long[] sourcePositions;
-//{ObjectTeams: exempt generated references from OTJLD 1.2.3(b).
- public boolean isGenerated;
- public QualifiedTypeReference(char[][] sources , long[] poss, boolean isGenerated) {
- this(sources,poss);
- this.isGenerated = isGenerated;
- if (isGenerated)
- this.bits |= ASTNode.IgnoreRawTypeCheck;
- }
-// SH}
public QualifiedTypeReference(char[][] sources , long[] poss) {
@@ -170,7 +161,7 @@
reportDeprecatedType(this.resolvedType, scope, i);
}
//{ObjectTeams: statically qualified use of role?
- if (i > 0 && !this.isGenerated && shouldAnalyzeRoleReference()) { // generated (and copied) methods are allowed to use MyTeam.R
+ if (i > 0 && (this.bits & ASTNode.IsGenerated) == 0 && shouldAnalyzeRoleReference()) { // generated (and copied) methods are allowed to use MyTeam.R
if (isIllegalQualifiedUseOfProtectedRole(scope)) {
// already reported
} else {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java
index 406aa4e..8fa523b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java
@@ -23,6 +23,7 @@
import java.util.Arrays;
import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.Argument;
import org.eclipse.jdt.internal.compiler.ast.ArrayQualifiedTypeReference;
@@ -113,7 +114,7 @@
qualifiedResult = gen.qualifiedArrayTypeReference(typeName, dims);
else
qualifiedResult = gen.qualifiedTypeReference(typeName);
- qualifiedResult.isGenerated = qualifiedTypeReference.isGenerated;
+ qualifiedResult.bits |= (qualifiedTypeReference.bits & ASTNode.IsGenerated);
result = qualifiedResult;
}
}
@@ -183,9 +184,9 @@
result = new ParameterizedQualifiedTypeReference(typeName, newArgs, dims, poss);
} else {
if (dims > 0)
- result = new ArrayQualifiedTypeReference(typeName, dims, poss, qualifiedTypeReference.isGenerated);
+ result = new ArrayQualifiedTypeReference(typeName, dims, poss);
else
- result = new QualifiedTypeReference(typeName, poss, qualifiedTypeReference.isGenerated);
+ result = new QualifiedTypeReference(typeName, poss);
}
}
@@ -212,7 +213,7 @@
}
if (result != null) {
result.setBaseclassDecapsulation(typeReference.getBaseclassDecapsulation());
- result.bits = typeReference.bits;
+ result.bits = typeReference.bits | ASTNode.IsGenerated;
return result;
}
throw new InternalCompilerError("Unexpected kind of type reference: " + typeReference.getClass().getName()); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
index 16f5a7c..815e87e 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
@@ -299,13 +299,17 @@
public QualifiedTypeReference qualifiedTypeReference(char[][] compoundName) {
long[] poss = new long[compoundName.length];
Arrays.fill(poss, this.pos);
- return new QualifiedTypeReference(compoundName, poss, true);
+ QualifiedTypeReference reference = new QualifiedTypeReference(compoundName, poss);
+ reference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
+ return reference;
}
public QualifiedTypeReference qualifiedArrayTypeReference(char[][] compoundName, int dims) {
long[] poss = new long[compoundName.length];
Arrays.fill(poss, this.pos);
- return new ArrayQualifiedTypeReference(compoundName, dims, poss, true);
+ ArrayQualifiedTypeReference reference = new ArrayQualifiedTypeReference(compoundName, dims, poss);
+ reference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
+ return reference;
}
public SingleTypeReference parameterizedSingleTypeReference(char[] name, TypeReference[] typeParameters, int dimensions)
@@ -364,6 +368,7 @@
elementType = ab.leafComponentType;
}
TypeReference typeReference = createArrayTypeReference(elementType, dims, makeGeneric);
+ typeReference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
typeReference.deprecationProblemId = 0;
if (!type.isValidBinding())
typeReference.bits |= ASTNode.IsGeneratedWithProblem;
@@ -412,9 +417,11 @@
{
TypeReference typeReference = createArrayTypeReference(elementType, dims, true);
typeReference.deprecationProblemId = 0;
+ typeReference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
return typeReference;
}
- public TypeReference createArrayTypeReference(
+
+ private TypeReference createArrayTypeReference(
TypeBinding elementType,
int dims,
boolean makeGeneric)
@@ -523,12 +530,12 @@
if (qname == null)
return new SingleTypeReference(sname, this.pos);
else
- return new QualifiedTypeReference(qname, poss, /*isGenerated*/true);
+ return new QualifiedTypeReference(qname, poss);
} else {
if (qname == null)
return new ArrayTypeReference(sname, dims, this.pos);
else {
- return new ArrayQualifiedTypeReference(qname, dims, poss, /*isGenerated*/true);
+ return new ArrayQualifiedTypeReference(qname, dims, poss);
}
}
} else {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java
index 56d91f4..87a7d07 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java
@@ -17,6 +17,7 @@
package org.eclipse.objectteams.otdt.internal.core.compiler.util;
import org.eclipse.jdt.internal.compiler.CompilationResult.CheckPoint;
+import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.ArrayQualifiedTypeReference;
import org.eclipse.jdt.internal.compiler.ast.ArrayTypeReference;
import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
@@ -164,7 +165,7 @@
public AlienScopeQualifiedTypeReference(char[][] sources, long[] poss, Scope alienScope) {
super(sources, poss);
this.alienScope = alienScope;
- this.isGenerated = true; // allow qualified reference to role
+ this.bits |= ASTNode.IsGenerated; // allow qualified reference to role
}
public Scope getAlienScope() { return this.alienScope; }
@Override
@@ -204,7 +205,7 @@
public AlienScopeArrayQualifiedTypeReference(char[][] sources, long[] poss, int dim, Scope alienScope) {
super(sources, dim, poss);
this.alienScope = alienScope;
- this.isGenerated = true; // allow qualified reference to role
+ this.bits |= ASTNode.IsGenerated; // allow qualified reference to role
}
public Scope getAlienScope() { return this.alienScope; }
@Override
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTEquinoxBuilderTests.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTEquinoxBuilderTests.java
index 68825e9..2b9b25b 100644
--- a/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTEquinoxBuilderTests.java
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/src/org/eclipse/objectteams/otdt/test/builder/OTEquinoxBuilderTests.java
@@ -67,9 +67,9 @@
}
};
-// static {
-// TESTS_NAMES = new String[] { "testBaseImportTrac304"};
-// }
+ static {
+// TESTS_NAMES = new String[] { "testBug419987"};
+ }
public OTEquinoxBuilderTests(String name) {
super(name);
}
@@ -150,8 +150,8 @@
expectingNoProblemsFor(trac18b.getPath());
expectingOnlySpecificProblemsFor(trac18a.getPath(), new Problem[] {
getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 42, 70),
- getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 163, 175),
- getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 201, 205) // location of the base-ctor call.
+ getDecapsulationProblem(trac18a, "trac18b.actions.SampleAction", "trac18a/Team18.java", 163, 175)
+ // base-ctor call no longer flagged
});
}
/* trying to produce a broken and bogus error message a la Trac #154 (no success yet). */
@@ -380,6 +380,16 @@
new Problem[] {
getMissingAspectExportProblem(aea, "aea")});
}
+
+ public void testBug419987() throws CoreException, IOException {
+ IJavaProject aeb= fileManager.setUpJavaProject("Base419987");
+ env.addProject(aeb.getProject());
+ IJavaProject aea= fileManager.setUpJavaProject("Bug419987");
+ env.addProject(aea.getProject());
+ fullBuild();
+ expectingNoProblemsFor(aeb.getPath());
+ expectingNoProblemsFor(aea.getPath());
+ }
// ---------------- HELPERS: ---------------------------
private Problem getDecapsulationProblem(IJavaProject project, String baseclassName, String teamPath, int start, int end) {
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.project
new file mode 100644
index 0000000..0659ea7
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>Base419987</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.settings/org.eclipse.jdt.core.prefs b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0f8f6c5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.objectteams.otdt.compiler.option.pure_java=enabled
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..cba4876
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Bundle-ManifestVersion: 2
+Bundle-Name: Base
+Bundle-SymbolicName: Base419987
+Bundle-Version: 1.0.0.qualifier
+Export-Package: internal;x-internal:=true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/build.properties
new file mode 100644
index 0000000..b107977
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/build.properties
@@ -0,0 +1,3 @@
+source.. = src/
+bin.includes = META-INF/,\
+ .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/src/internal/RestrictedFoo.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/src/internal/RestrictedFoo.java
new file mode 100644
index 0000000..ff37c03
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Base419987/src/internal/RestrictedFoo.java
@@ -0,0 +1,5 @@
+package internal;
+
+public class RestrictedFoo {
+
+}
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/.classpath b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/.classpath
new file mode 100644
index 0000000..9b7e6c5
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="OTRE"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/.project b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/.project
new file mode 100644
index 0000000..8cf7b24
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>Bug419987</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.objectteams.otdt.builder.OTJBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.objectteams.otdt.OTJavaNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/META-INF/MANIFEST.MF b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..4233287
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/META-INF/MANIFEST.MF
@@ -0,0 +1,7 @@
+Bundle-ManifestVersion: 2
+Bundle-Name: Bug419987
+Bundle-SymbolicName: Bug419987
+Bundle-Version: 1.0.0.qualifier
+Export-Package: teams
+Require-Bundle: Base419987;bundle-version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/build.properties b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/build.properties
new file mode 100644
index 0000000..b107977
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/build.properties
@@ -0,0 +1,3 @@
+source.. = src/
+bin.includes = META-INF/,\
+ .
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/src/teams/Sub.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/src/teams/Sub.java
new file mode 100644
index 0000000..95a54bb
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/src/teams/Sub.java
@@ -0,0 +1,5 @@
+package teams;
+public team class Sub extends Super { // warning is here on "Super"
+ protected class RSub extends RSuper {
+ }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/src/teams/Super.java b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/src/teams/Super.java
new file mode 100644
index 0000000..c99c013
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.test.builder/workspace/Bug419987/src/teams/Super.java
@@ -0,0 +1,9 @@
+package teams;
+
+import base internal.RestrictedFoo;
+
+@SuppressWarnings("restriction")
+public team class Super {
+ protected class RSuper playedBy RestrictedFoo {
+ }
+}
\ No newline at end of file