Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java')
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
index b84237726..a8d5143bd 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
@@ -37,11 +37,13 @@ import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.AnnotatableType;
import org.eclipse.jdt.core.dom.Annotation;
import org.eclipse.jdt.core.dom.ArrayInitializer;
import org.eclipse.jdt.core.dom.ArrayType;
+import org.eclipse.jdt.core.dom.CalloutMappingDeclaration;
import org.eclipse.jdt.core.dom.CharacterLiteral;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.Dimension;
@@ -66,6 +68,7 @@ import org.eclipse.jdt.core.dom.SimpleType;
import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
import org.eclipse.jdt.core.dom.StringLiteral;
import org.eclipse.jdt.core.dom.Type;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.eclipse.jdt.core.dom.TypeLiteral;
import org.eclipse.jdt.core.dom.WildcardType;
import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
@@ -103,6 +106,7 @@ import org.eclipse.text.edits.TextEdit;
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public final class ImportRewrite {
+
/**
* Used to determine how a type will be used, so that unwanted annotations can be filtered,
* which is in particular relevant for avoiding redundant null annotations in the scope of {@code @NonNullByDefault}.
@@ -1171,6 +1175,11 @@ public final class ImportRewrite {
return addStaticImport(getRawQualifiedName(declaringType), binding.getName(), true, context);
}
} else if (binding instanceof IMethodBinding) {
+ //{ObjectTeams: don't import field that can only be accessed by callout (decapsulation):
+ if ( !Flags.isPublic(binding.getModifiers())
+ && isCalloutAccessed((IMethodBinding) binding, context))
+ return null;
+//SH}
ITypeBinding declaringType= ((IMethodBinding) binding).getDeclaringClass();
return addStaticImport(getRawQualifiedName(declaringType), binding.getName(), false, context);
}
@@ -1178,6 +1187,30 @@ public final class ImportRewrite {
throw new IllegalArgumentException("Binding must be a static field or method."); //$NON-NLS-1$
}
+//{ObjectTeams: try to map a method to the rhs of a callout binding
+ private boolean isCalloutAccessed(final IMethodBinding binding, ImportRewriteContext context) {
+ class ASTVisitorExtension extends ASTVisitor {
+ boolean found;
+ public boolean visit(org.eclipse.jdt.core.dom.MethodSpec node) {
+ if (node.getLocationInParent() == CalloutMappingDeclaration.BASE_MAPPING_ELEMENT_PROPERTY && node.resolveBinding() == binding)
+ this.found = true;
+ return false;
+ }
+ }
+
+ for (Object t : this.astRoot.types()) {
+ TypeDeclaration type = (TypeDeclaration) t;
+ if (type.isRole() || type.isTeam()) {
+ ASTVisitorExtension visitor = new ASTVisitorExtension();
+ type.accept(visitor);
+ if (visitor.found)
+ return true;
+ }
+ }
+ return false;
+ }
+// SH}
+
/**
* Adds a new static import to the rewriter's record and returns a name - single member name if
* import is successful, else qualified name.

Back to the top