diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java index 95fff9a..a442d36 100644 --- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java +++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ConstantChecks.java @@ -13,15 +13,18 @@ import org.eclipse.core.runtime.Assert; import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; import org.eclipse.jdt.core.dom.FieldAccess; import org.eclipse.jdt.core.dom.IBinding; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.IVariableBinding; +import org.eclipse.jdt.core.dom.LambdaExpression; import org.eclipse.jdt.core.dom.MethodInvocation; import org.eclipse.jdt.core.dom.Modifier; import org.eclipse.jdt.core.dom.Name; import org.eclipse.jdt.core.dom.QualifiedName; +import org.eclipse.jdt.core.dom.ReturnStatement; import org.eclipse.jdt.core.dom.SimpleName; import org.eclipse.jdt.core.dom.SuperFieldAccess; import org.eclipse.jdt.core.dom.SuperMethodInvocation; @@ -35,7 +38,9 @@ private final IExpressionFragment fExpression; protected boolean fResult= true; - + protected boolean anonymous= false; + protected boolean lambda= false; + public ExpressionChecker(IExpressionFragment ex) { fExpression= ex; } @@ -95,6 +100,23 @@ return false; //Do not descend further } + @Override + public boolean visit(AnonymousClassDeclaration node) { + anonymous = true; + return true; + } + + @Override + public boolean visit(LambdaExpression node) { + lambda = true; + return true; + } + + @Override + public boolean visit(ReturnStatement node) { + return true; + } + private boolean checkName(Name name) { IBinding binding= name.resolveBinding(); if (binding == null) @@ -102,6 +124,9 @@ scenarios which may have been deemed unacceptable in the presence of semantic information will be admitted. */ + if (anonymous || lambda) { + return true; + } // If name represents a member: if (binding instanceof IVariableBinding || binding instanceof IMethodBinding) return isMemberReferenceValidInClassInitialization(name);