EclipseJDT ASTViewer Source Viewer

Home|eclipse_jdt_astviewer/src/org/eclipse/jdt/astview/views/ASTViewContentProvider.java
1/*******************************************************************************
2 * Copyright (c) 2000, 2017 IBM Corporation and others.
3 *
4 * This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License 2.0
6 * which accompanies this distribution, and is available at
7 * https://www.eclipse.org/legal/epl-2.0/
8 *
9 * SPDX-License-Identifier: EPL-2.0
10 *
11 * Contributors:
12 *     IBM Corporation - initial API and implementation
13 *******************************************************************************/
14
15package org.eclipse.jdt.astview.views;
16
17import java.util.ArrayList;
18import java.util.List;
19
20import org.eclipse.jdt.astview.ASTViewPlugin;
21
22import org.eclipse.jface.viewers.ITreeContentProvider;
23import org.eclipse.jface.viewers.Viewer;
24
25import org.eclipse.jdt.core.dom.ASTNode;
26import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
27import org.eclipse.jdt.core.dom.Annotation;
28import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
29import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
30import org.eclipse.jdt.core.dom.ClassInstanceCreation;
31import org.eclipse.jdt.core.dom.CompilationUnit;
32import org.eclipse.jdt.core.dom.ConstructorInvocation;
33import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
34import org.eclipse.jdt.core.dom.Expression;
35import org.eclipse.jdt.core.dom.FieldAccess;
36import org.eclipse.jdt.core.dom.IAnnotationBinding;
37import org.eclipse.jdt.core.dom.IBinding;
38import org.eclipse.jdt.core.dom.IMethodBinding;
39import org.eclipse.jdt.core.dom.ITypeBinding;
40import org.eclipse.jdt.core.dom.IVariableBinding;
41import org.eclipse.jdt.core.dom.ImportDeclaration;
42import org.eclipse.jdt.core.dom.LambdaExpression;
43import org.eclipse.jdt.core.dom.MemberRef;
44import org.eclipse.jdt.core.dom.MemberValuePair;
45import org.eclipse.jdt.core.dom.MethodDeclaration;
46import org.eclipse.jdt.core.dom.MethodInvocation;
47import org.eclipse.jdt.core.dom.MethodRef;
48import org.eclipse.jdt.core.dom.MethodReference;
49import org.eclipse.jdt.core.dom.ModuleDeclaration;
50import org.eclipse.jdt.core.dom.Name;
51import org.eclipse.jdt.core.dom.PackageDeclaration;
52import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
53import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
54import org.eclipse.jdt.core.dom.SuperFieldAccess;
55import org.eclipse.jdt.core.dom.SuperMethodInvocation;
56import org.eclipse.jdt.core.dom.Type;
57import org.eclipse.jdt.core.dom.TypeParameter;
58import org.eclipse.jdt.core.dom.VariableDeclaration;
59
60public class ASTViewContentProvider implements ITreeContentProvider {
61
62    @Override
63    public void inputChanged(Viewer vObject oldInputObject newInput) {
64    }
65
66    @Override
67    public void dispose() {
68    }
69
70    @Override
71    public Object[] getElements(Object parent) {
72        return getChildren(parent);
73    }
74
75    @Override
76    public Object getParent(Object child) {
77        if (child instanceof ASTNode) {
78            ASTNode node= (ASTNodechild;
79            ASTNode parentnode.getParent();
80            if (parent != null) {
81                StructuralPropertyDescriptor propnode.getLocationInParent();
82                return new NodeProperty(parentprop);
83            }
84        } else if (child instanceof ASTAttribute) {
85            return ((ASTAttributechild).getParent();
86        }
87        return null;
88    }
89
90    @Override
91    public Object[] getChildren(Object parent) {
92        if (parent instanceof ASTAttribute) {
93            return ((ASTAttributeparent).getChildren();
94        } else if (parent instanceof ASTNode) {
95            return getNodeChildren((ASTNodeparent);
96        }
97        return new Object[0];
98    }
99
100    private Object[] getNodeChildren(ASTNode node) {
101        ArrayList<Objectres= new ArrayList<>();
102
103        if (node instanceof Expression) {
104            Expression expression= (Expressionnode;
105            ITypeBinding expressionTypeBindingexpression.resolveTypeBinding();
106            res.add(createExpressionTypeBinding(nodeexpressionTypeBinding));
107
108            // expressions:
109            if (expression instanceof Name) {
110                IBinding binding= ((Nameexpression).resolveBinding();
111                if (binding != expressionTypeBinding)
112                    res.add(createBinding(expressionbinding));
113            } else if (expression instanceof MethodInvocation) {
114                MethodInvocation methodInvocation= (MethodInvocationexpression;
115                IMethodBinding bindingmethodInvocation.resolveMethodBinding();
116                res.add(createBinding(expressionbinding));
117                String inferredString.valueOf(methodInvocation.isResolvedTypeInferredFromExpectedType());
118                res.add(new GeneralAttribute(expression"ResolvedTypeInferredFromExpectedType"inferred)); //$NON-NLS-1$
119            } else if (expression instanceof SuperMethodInvocation) {
120                SuperMethodInvocation superMethodInvocation= (SuperMethodInvocationexpression;
121                IMethodBinding bindingsuperMethodInvocation.resolveMethodBinding();
122                res.add(createBinding(expressionbinding));
123                String inferredString.valueOf(superMethodInvocation.isResolvedTypeInferredFromExpectedType());
124                res.add(new GeneralAttribute(expression"ResolvedTypeInferredFromExpectedType"inferred)); //$NON-NLS-1$
125            } else if (expression instanceof ClassInstanceCreation) {
126                ClassInstanceCreation classInstanceCreation= (ClassInstanceCreationexpression;
127                IMethodBinding bindingclassInstanceCreation.resolveConstructorBinding();
128                res.add(createBinding(expressionbinding));
129                String inferredString.valueOf(classInstanceCreation.isResolvedTypeInferredFromExpectedType());
130                res.add(new GeneralAttribute(expression"ResolvedTypeInferredFromExpectedType"inferred)); //$NON-NLS-1$
131            } else if (expression instanceof FieldAccess) {
132                IVariableBinding binding= ((FieldAccessexpression).resolveFieldBinding();
133                res.add(createBinding(expressionbinding));
134            } else if (expression instanceof SuperFieldAccess) {
135                IVariableBinding binding= ((SuperFieldAccessexpression).resolveFieldBinding();
136                res.add(createBinding(expressionbinding));
137            } else if (expression instanceof Annotation) {
138                IAnnotationBinding binding= ((Annotationexpression).resolveAnnotationBinding();
139                res.add(createBinding(expressionbinding));
140            } else if (expression instanceof LambdaExpression) {
141                ASTAttribute bindingAttribute;
142                try {
143                    IMethodBinding binding= ((LambdaExpressionexpression).resolveMethodBinding();
144                    bindingAttributecreateBinding(expressionbinding);
145                } catch (RuntimeException e) {
146                    bindingAttribute= new Error(res">binding: Error: " + e.getMessage(), e);
147                    ASTViewPlugin.log("Exception thrown in LambdaExpression#resolveMethodBinding() for \"" + expression + "\""e);
148                }
149                res.add(bindingAttribute);
150            } else if (expression instanceof MethodReference) {
151                IMethodBinding binding= ((MethodReferenceexpression).resolveMethodBinding();
152                res.add(createBinding(expressionbinding));
153            }
154            // Expression attributes:
155            res.add(new GeneralAttribute(expression"Boxing: " + expression.resolveBoxing() + "; Unboxing: " + expression.resolveUnboxing())); //$NON-NLS-1$ //$NON-NLS-2$
156            res.add(new GeneralAttribute(expression"ConstantExpressionValue"expression.resolveConstantExpressionValue())); //$NON-NLS-1$
157
158        // references:
159        } else if (node instanceof ConstructorInvocation) {
160            IMethodBinding binding= ((ConstructorInvocationnode).resolveConstructorBinding();
161            res.add(createBinding(nodebinding));
162        } else if (node instanceof SuperConstructorInvocation) {
163            IMethodBinding binding= ((SuperConstructorInvocationnode).resolveConstructorBinding();
164            res.add(createBinding(nodebinding));
165        } else if (node instanceof MethodRef) {
166            IBinding binding= ((MethodRefnode).resolveBinding();
167            res.add(createBinding(nodebinding));
168        } else if (node instanceof MemberRef) {
169            IBinding binding= ((MemberRefnode).resolveBinding();
170            res.add(createBinding(nodebinding));
171        } else if (node instanceof Type) {
172            IBinding binding= ((Typenode).resolveBinding();
173            res.add(createBinding(nodebinding));
174
175        // declarations:
176        } else if (node instanceof AbstractTypeDeclaration) {
177            IBinding binding= ((AbstractTypeDeclarationnode).resolveBinding();
178            res.add(createBinding(nodebinding));
179        } else if (node instanceof AnnotationTypeMemberDeclaration) {
180            IBinding binding= ((AnnotationTypeMemberDeclarationnode).resolveBinding();
181            res.add(createBinding(nodebinding));
182        } else if (node instanceof EnumConstantDeclaration) {
183            IBinding binding= ((EnumConstantDeclarationnode).resolveVariable();
184            res.add(createBinding(nodebinding));
185            IBinding binding2= ((EnumConstantDeclarationnode).resolveConstructorBinding();
186            res.add(createBinding(nodebinding2));
187        } else if (node instanceof MethodDeclaration) {
188            IBinding binding= ((MethodDeclarationnode).resolveBinding();
189            res.add(createBinding(nodebinding));
190        } else if (node instanceof VariableDeclaration) {
191            IBinding binding= ((VariableDeclarationnode).resolveBinding();
192            res.add(createBinding(nodebinding));
193        } else if (node instanceof AnonymousClassDeclaration) {
194            IBinding binding= ((AnonymousClassDeclarationnode).resolveBinding();
195            res.add(createBinding(nodebinding));
196        } else if (node instanceof ImportDeclaration) {
197            IBinding binding= ((ImportDeclarationnode).resolveBinding();
198            res.add(createBinding(nodebinding));
199        } else if (node instanceof PackageDeclaration) {
200            IBinding binding= ((PackageDeclarationnode).resolveBinding();
201            res.add(createBinding(nodebinding));
202        } else if (node instanceof TypeParameter) {
203            IBinding binding= ((TypeParameternode).resolveBinding();
204            res.add(createBinding(nodebinding));
205        } else if (node instanceof MemberValuePair) {
206            IBinding binding= ((MemberValuePairnode).resolveMemberValuePairBinding();
207            res.add(createBinding(nodebinding));
208        } else if (node instanceof ModuleDeclaration) {
209            IBinding binding= ((ModuleDeclarationnode).resolveBinding();
210            res.add(createBinding(nodebinding));
211        }
212
213
214
215        List<StructuralPropertyDescriptorlistnode.structuralPropertiesForType();
216        for (StructuralPropertyDescriptor curr : list) {
217            res.add(new NodeProperty(nodecurr));
218        }
219
220        if (node instanceof CompilationUnit) {
221            CompilationUnit root= (CompilationUnitnode;
222            res.add(new JavaElement(rootroot.getJavaElement()));
223            res.add(new CommentsProperty(root));
224            res.add(new ProblemsProperty(root));
225            res.add(new SettingsProperty(root));
226            res.add(new WellKnownTypesProperty(root));
227        }
228
229        return res.toArray();
230    }
231
232    private Binding createBinding(ASTNode parentIBinding binding) {
233        String labelBinding.getBindingLabel(binding);
234        return new Binding(parentlabelbindingtrue);
235    }
236
237    private Object createExpressionTypeBinding(ASTNode parentITypeBinding binding) {
238        String label"> (Expression) type binding"//$NON-NLS-1$
239        return new Binding(parentlabelbindingtrue);
240    }
241
242    @Override
243    public boolean hasChildren(Object parent) {
244        return getChildren(parent).length > 0;
245    }
246}
247
MembersX
ASTViewContentProvider:getNodeChildren:Block:Block:Block:superMethodInvocation
ASTViewContentProvider:createBinding
ASTViewContentProvider:getParent:Block:Block:parent
ASTViewContentProvider:createExpressionTypeBinding:Block:label
ASTViewContentProvider:createExpressionTypeBinding
ASTViewContentProvider:getNodeChildren:Block:Block:Block:Block:binding
ASTViewContentProvider:getNodeChildren
ASTViewContentProvider:getNodeChildren:Block:Block:root
ASTViewContentProvider:getNodeChildren:Block:Block:binding2
ASTViewContentProvider:getChildren
ASTViewContentProvider:inputChanged
ASTViewContentProvider:getNodeChildren:Block:Block:Block:binding
ASTViewContentProvider:getParent:Block:Block:Block:prop
ASTViewContentProvider:getParent
ASTViewContentProvider:createBinding:Block:label
ASTViewContentProvider:getElements
ASTViewContentProvider:dispose
ASTViewContentProvider:getParent:Block:Block:node
ASTViewContentProvider:getNodeChildren:Block:Block:binding
ASTViewContentProvider:getNodeChildren:Block:Block:Block:classInstanceCreation
ASTViewContentProvider:getNodeChildren:Block:Block:Block:inferred
ASTViewContentProvider:getNodeChildren:Block:list
ASTViewContentProvider:getNodeChildren:Block:res
ASTViewContentProvider:getNodeChildren:Block:Block:Block:methodInvocation
ASTViewContentProvider:getNodeChildren:Block:Block:expressionTypeBinding
ASTViewContentProvider:hasChildren
ASTViewContentProvider:getNodeChildren:Block:Block:expression
ASTViewContentProvider:getNodeChildren:Block:Block:Block:bindingAttribute
Members
X