Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 131006 Details for
Bug 270367
[DOM] NullPointerException in ParenthesizedExpression.resolveTypeBinding()
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix + regression test
patch_270367.txt (text/plain), 9.63 KB, created by
Olivier Thomann
on 2009-04-06 11:20:55 EDT
(
hide
)
Description:
Proposed fix + regression test
Filename:
MIME Type:
Creator:
Olivier Thomann
Created:
2009-04-06 11:20:55 EDT
Size:
9.63 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java,v >retrieving revision 1.166 >diff -u -r1.166 DefaultBindingResolver.java >--- dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java 16 Jul 2008 16:47:48 -0000 1.166 >+++ dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java 6 Apr 2009 15:21:02 -0000 >@@ -550,7 +550,7 @@ > */ > boolean resolveBoxing(Expression expression) { > org.eclipse.jdt.internal.compiler.ast.ASTNode node = (org.eclipse.jdt.internal.compiler.ast.ASTNode) this.newAstToOldAst.get(expression); >- if (node != null && (node instanceof org.eclipse.jdt.internal.compiler.ast.Expression)) { >+ if (node instanceof org.eclipse.jdt.internal.compiler.ast.Expression) { > org.eclipse.jdt.internal.compiler.ast.Expression compilerExpression = (org.eclipse.jdt.internal.compiler.ast.Expression) node; > return (compilerExpression.implicitConversion & TypeIds.BOXING) != 0; > } >@@ -562,7 +562,7 @@ > */ > boolean resolveUnboxing(Expression expression) { > org.eclipse.jdt.internal.compiler.ast.ASTNode node = (org.eclipse.jdt.internal.compiler.ast.ASTNode) this.newAstToOldAst.get(expression); >- if (node != null && (node instanceof org.eclipse.jdt.internal.compiler.ast.Expression)) { >+ if (node instanceof org.eclipse.jdt.internal.compiler.ast.Expression) { > org.eclipse.jdt.internal.compiler.ast.Expression compilerExpression = (org.eclipse.jdt.internal.compiler.ast.Expression) node; > return (compilerExpression.implicitConversion & TypeIds.UNBOXING) != 0; > } >@@ -574,7 +574,7 @@ > */ > Object resolveConstantExpressionValue(Expression expression) { > org.eclipse.jdt.internal.compiler.ast.ASTNode node = (org.eclipse.jdt.internal.compiler.ast.ASTNode) this.newAstToOldAst.get(expression); >- if (node != null && (node instanceof org.eclipse.jdt.internal.compiler.ast.Expression)) { >+ if (node instanceof org.eclipse.jdt.internal.compiler.ast.Expression) { > org.eclipse.jdt.internal.compiler.ast.Expression compilerExpression = (org.eclipse.jdt.internal.compiler.ast.Expression) node; > Constant constant = compilerExpression.constant; > if (constant != null && constant != Constant.NotAConstant) { >@@ -662,7 +662,7 @@ > if (typeBinding != null) { > return typeBinding; > } >- } else { >+ } else if (astNode instanceof AllocationExpression) { > // should be an AllocationExpression > AllocationExpression allocationExpression = (AllocationExpression) astNode; > return this.getTypeBinding(allocationExpression.resolvedType); >@@ -704,7 +704,10 @@ > case ASTNode.CHARACTER_LITERAL : > case ASTNode.NUMBER_LITERAL : > Literal literal = (Literal) this.newAstToOldAst.get(expression); >- return this.getTypeBinding(literal.literalType(null)); >+ if (literal != null) { >+ return this.getTypeBinding(literal.literalType(null)); >+ } >+ break; > case ASTNode.THIS_EXPRESSION : > ThisReference thisReference = (ThisReference) this.newAstToOldAst.get(expression); > BlockScope blockScope = (BlockScope) this.astNodesToBlockScope.get(expression); >@@ -1302,7 +1305,7 @@ > } > } > } >- } >+ } > } > } else if (node instanceof QualifiedSuperReference) { > QualifiedSuperReference qualifiedSuperReference = (QualifiedSuperReference) node; >@@ -1398,8 +1401,7 @@ > org.eclipse.jdt.internal.compiler.ast.Expression expression = (org.eclipse.jdt.internal.compiler.ast.Expression) this.newAstToOldAst.get(ref); > if (expression instanceof TypeReference) { > return getTypeBinding(expression.resolvedType); >- } >- else if (expression instanceof JavadocFieldReference) { >+ } else if (expression instanceof JavadocFieldReference) { > JavadocFieldReference fieldRef = (JavadocFieldReference) expression; > if (fieldRef.methodBinding != null) { > return getMethodBinding(fieldRef.methodBinding); >@@ -1415,7 +1417,10 @@ > */ > synchronized IMemberValuePairBinding resolveMemberValuePair(org.eclipse.jdt.core.dom.MemberValuePair memberValuePair) { > MemberValuePair valuePair = (MemberValuePair) this.newAstToOldAst.get(memberValuePair); >- return getMemberValuePairBinding(valuePair.compilerElementPair); >+ if (valuePair != null) { >+ return getMemberValuePairBinding(valuePair.compilerElementPair); >+ } >+ return null; > } > > /* (non-Javadoc) >@@ -1503,29 +1508,29 @@ > org.eclipse.jdt.internal.compiler.ast.ASTNode node = (org.eclipse.jdt.internal.compiler.ast.ASTNode) this.newAstToOldAst.get(type); > org.eclipse.jdt.internal.compiler.lookup.TypeBinding binding = null; > if (node != null) { >- if (node instanceof ParameterizedQualifiedTypeReference) { >+ if (node instanceof ParameterizedQualifiedTypeReference) { > ParameterizedQualifiedTypeReference typeReference = (ParameterizedQualifiedTypeReference) node; >- org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding = typeReference.resolvedType; >- int index; >- if (type.isQualifiedType()) { >- index = ((QualifiedType) type).index; >- } else if (type.isParameterizedType()) { >- index = ((ParameterizedType) type).index; >- } else { >- index = 1; >- } >- final int numberOfTypeArgumentsNotNull = getTypeArguments(typeReference); >- if (index != numberOfTypeArgumentsNotNull) { >- int i = numberOfTypeArgumentsNotNull; >- while (i != index) { >- typeBinding = typeBinding.enclosingType(); >- i --; >- } >- binding = typeBinding; >- } else { >+ org.eclipse.jdt.internal.compiler.lookup.TypeBinding typeBinding = typeReference.resolvedType; >+ int index; >+ if (type.isQualifiedType()) { >+ index = ((QualifiedType) type).index; >+ } else if (type.isParameterizedType()) { >+ index = ((ParameterizedType) type).index; >+ } else { >+ index = 1; >+ } >+ final int numberOfTypeArgumentsNotNull = getTypeArguments(typeReference); >+ if (index != numberOfTypeArgumentsNotNull) { >+ int i = numberOfTypeArgumentsNotNull; >+ while (i != index) { >+ typeBinding = typeBinding.enclosingType(); >+ i --; >+ } > binding = typeBinding; >- } >- } else if (node instanceof TypeReference) { >+ } else { >+ binding = typeBinding; >+ } >+ } else if (node instanceof TypeReference) { > TypeReference typeReference = (TypeReference) node; > binding = typeReference.resolvedType; > } else if (node instanceof SingleNameReference && ((SingleNameReference)node).isTypeReference()) { >#P org.eclipse.jdt.core.tests.model >Index: src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java,v >retrieving revision 1.281 >diff -u -r1.281 ASTConverter15Test.java >--- src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java 22 Jan 2009 11:22:52 -0000 1.281 >+++ src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java 6 Apr 2009 15:21:03 -0000 >@@ -46,7 +46,7 @@ > } > > static { >-// TESTS_NUMBERS = new int[] { 323 }; >+// TESTS_NUMBERS = new int[] { 324 }; > // TESTS_RANGE = new int[] { 308, -1 }; > // TESTS_NAMES = new String[] {"test0204"}; > } >@@ -10491,4 +10491,53 @@ > ); > assertNotNull("No node", buildAST(contents, this.workingCopy, false, true, true)); > } >+ >+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=270367 >+ public void test0324() throws JavaModelException { >+ String contents = "package test0324;\n" >+ + "public class X {\n" >+ + " public void someMethod() {\n" >+ + " int i = /*start*/(new Integer(getId())).intValue()/*end*/;\n" >+ + " }\n" >+ + " public String getId() {\n" >+ + " return null;\n" >+ + " }\n" >+ + "}"; >+ this.workingCopy = getWorkingCopy("/Converter15/src/test0324/X.java", contents, true/*resolve*/ >+ ); >+ MethodInvocation methodCall = (MethodInvocation) buildAST(contents, this.workingCopy, false, true, true); >+ ParenthesizedExpression intValueReceiver = (ParenthesizedExpression) methodCall.getExpression(); >+ ParenthesizedExpression newParenthesizedExpression = (ParenthesizedExpression) ASTNode.copySubtree( >+ intValueReceiver.getAST(), intValueReceiver); >+ replaceNodeInParent(methodCall, newParenthesizedExpression); >+ >+ // copied node >+ ClassInstanceCreation constructorCall = (ClassInstanceCreation) newParenthesizedExpression.getExpression(); >+ constructorCall.resolveTypeBinding(); >+ IMethodBinding constructorBinding = constructorCall.resolveConstructorBinding(); >+ assertNull("Not null constructor binding", constructorBinding); >+ >+ // original node >+ constructorCall = (ClassInstanceCreation) intValueReceiver.getExpression(); >+ constructorCall.resolveTypeBinding(); // This should not throw a NPE >+ constructorBinding = constructorCall.resolveConstructorBinding(); >+ assertNotNull("Null constructor binding", constructorBinding); >+ } >+ >+ // Utility method to replace "node" by "replacement" >+ private void replaceNodeInParent(Expression node, Expression replacement) { >+ StructuralPropertyDescriptor loc = node.getLocationInParent(); >+ if (loc.isChildProperty()) { >+ node.getParent().setStructuralProperty(loc, replacement); >+ } >+ else { >+ List l = (List) node.getParent().getStructuralProperty(loc); >+ for (int i = 0; i < l.size(); i++) { >+ if (node.equals(l.get(i))) { >+ l.set(i, replacement); >+ break; >+ } >+ } >+ } >+ } > } >\ No newline at end of file
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 270367
: 131006 |
135143