下面列出了org.eclipse.jdt.core.dom.IVariableBinding#getDeclaringMethod ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private IBinding getEnclosingDeclaration(ASTNode node) {
while (node != null) {
if (node instanceof AbstractTypeDeclaration) {
return ((AbstractTypeDeclaration) node).resolveBinding();
} else if (node instanceof AnonymousClassDeclaration) {
return ((AnonymousClassDeclaration) node).resolveBinding();
} else if (node instanceof MethodDeclaration) {
return ((MethodDeclaration) node).resolveBinding();
} else if (node instanceof FieldDeclaration) {
List<?> fragments = ((FieldDeclaration) node).fragments();
if (fragments.size() > 0) {
return ((VariableDeclarationFragment) fragments.get(0)).resolveBinding();
}
} else if (node instanceof VariableDeclarationFragment) {
IVariableBinding variableBinding = ((VariableDeclarationFragment) node).resolveBinding();
if (variableBinding.getDeclaringMethod() != null || variableBinding.getDeclaringClass() != null) {
return variableBinding;
// workaround for incomplete wiring of DOM bindings: keep searching when variableBinding is unparented
}
}
node = node.getParent();
}
return null;
}
private static boolean isVariableDefinedInContext(IBinding binding, ITypeBinding typeVariable) {
if (binding.getKind() == IBinding.VARIABLE) {
IVariableBinding var= (IVariableBinding) binding;
binding= var.getDeclaringMethod();
if (binding == null) {
binding= var.getDeclaringClass();
}
}
if (binding instanceof IMethodBinding) {
if (binding == typeVariable.getDeclaringMethod()) {
return true;
}
binding= ((IMethodBinding) binding).getDeclaringClass();
}
while (binding instanceof ITypeBinding) {
if (binding == typeVariable.getDeclaringClass()) {
return true;
}
if (Modifier.isStatic(binding.getModifiers())) {
break;
}
binding= ((ITypeBinding) binding).getDeclaringClass();
}
return false;
}
private static void getLocalVariableLabel(IVariableBinding binding, long flags, StringBuffer buffer) {
if (((flags & JavaElementLabels.F_PRE_TYPE_SIGNATURE) != 0)) {
getTypeLabel(binding.getType(), (flags & JavaElementLabels.T_TYPE_PARAMETERS), buffer);
buffer.append(' ');
}
if (((flags & JavaElementLabels.F_FULLY_QUALIFIED) != 0)) {
IMethodBinding declaringMethod= binding.getDeclaringMethod();
if (declaringMethod != null) {
getMethodLabel(declaringMethod, flags, buffer);
buffer.append('.');
}
}
buffer.append(binding.getName());
if (((flags & JavaElementLabels.F_APP_TYPE_SIGNATURE) != 0)) {
buffer.append(JavaElementLabels.DECL_STRING);
getTypeLabel(binding.getType(), (flags & JavaElementLabels.T_TYPE_PARAMETERS), buffer);
}
}
@Override
public Change createChange(IProgressMonitor pm) throws CoreException {
try {
pm.beginTask(RefactoringCoreMessages.InlineTempRefactoring_preview, 2);
final Map<String, String> arguments= new HashMap<String, String>();
String project= null;
IJavaProject javaProject= fCu.getJavaProject();
if (javaProject != null)
project= javaProject.getElementName();
final IVariableBinding binding= getVariableDeclaration().resolveBinding();
String text= null;
final IMethodBinding method= binding.getDeclaringMethod();
if (method != null)
text= BindingLabelProvider.getBindingLabel(method, JavaElementLabels.ALL_FULLY_QUALIFIED);
else
text= BasicElementLabels.getJavaElementName('{' + JavaElementLabels.ELLIPSIS_STRING + '}');
final String description= Messages.format(RefactoringCoreMessages.InlineTempRefactoring_descriptor_description_short, BasicElementLabels.getJavaElementName(binding.getName()));
final String header= Messages.format(RefactoringCoreMessages.InlineTempRefactoring_descriptor_description, new String[] { BindingLabelProvider.getBindingLabel(binding, JavaElementLabels.ALL_FULLY_QUALIFIED), text});
final JDTRefactoringDescriptorComment comment= new JDTRefactoringDescriptorComment(project, this, header);
comment.addSetting(Messages.format(RefactoringCoreMessages.InlineTempRefactoring_original_pattern, BindingLabelProvider.getBindingLabel(binding, JavaElementLabels.ALL_FULLY_QUALIFIED)));
final InlineLocalVariableDescriptor descriptor= RefactoringSignatureDescriptorFactory.createInlineLocalVariableDescriptor(project, description, comment.asString(), arguments, RefactoringDescriptor.NONE);
arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT, JavaRefactoringDescriptorUtil.elementToHandle(project, fCu));
arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_SELECTION, String.valueOf(fSelectionStart) + ' ' + String.valueOf(fSelectionLength));
CompilationUnitRewrite cuRewrite= new CompilationUnitRewrite(fCu, fASTRoot);
inlineTemp(cuRewrite);
removeTemp(cuRewrite);
final CompilationUnitChange result= cuRewrite.createChange(RefactoringCoreMessages.InlineTempRefactoring_inline, false, new SubProgressMonitor(pm, 1));
result.setDescriptor(new RefactoringChangeDescriptor(descriptor));
return result;
} finally {
pm.done();
}
}