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 193271 Details for
Bug 342671
ClassCastException: org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding cannot be cast to org.eclipse.jdt.internal.compiler.lookup.ArrayBinding
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
A new proposal
patch_342671_2.txt (text/plain), 17.57 KB, created by
Olivier Thomann
on 2011-04-14 11:55:24 EDT
(
hide
)
Description:
A new proposal
Filename:
MIME Type:
Creator:
Olivier Thomann
Created:
2011-04-14 11:55:24 EDT
Size:
17.57 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java,v >retrieving revision 1.63 >diff -u -r1.63 ParameterizedQualifiedTypeReference.java >--- compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java 1 Nov 2010 14:15:46 -0000 1.63 >+++ compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java 14 Apr 2011 15:52:16 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2010 IBM Corporation and others. >+ * Copyright (c) 2000, 2011 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -148,6 +148,7 @@ > } > } > } >+ createArrayType(scope); > return null; > } > >@@ -173,6 +174,7 @@ > } > } > } >+ createArrayType(scope); > return null; > } > ReferenceBinding currentType = (ReferenceBinding) this.resolvedType; >@@ -219,31 +221,32 @@ > } > } > if (argHasError) { >+ createArrayType(scope); > return null; > } > if (isClassScope) { > ((ClassScope) scope).superTypeReference = keep; >- if (((ClassScope) scope).detectHierarchyCycle(currentOriginal, this)) >+ if (((ClassScope) scope).detectHierarchyCycle(currentOriginal, this)) { >+ createArrayType(scope); > return null; >+ } > } > > TypeVariableBinding[] typeVariables = currentOriginal.typeVariables(); > if (typeVariables == Binding.NO_TYPE_VARIABLES) { // check generic > if (scope.compilerOptions().originalSourceLevel >= ClassFileConstants.JDK1_5) { // below 1.5, already reported as syntax error > scope.problemReporter().nonGenericTypeCannotBeParameterized(i, this, currentType, argTypes); >+ createArrayType(scope); > return null; > } > this.resolvedType = (qualifyingType != null && qualifyingType.isParameterizedType()) > ? scope.environment().createParameterizedType(currentOriginal, null, qualifyingType) > : currentType; >- if (this.dimensions > 0) { >- if (this.dimensions > 255) >- scope.problemReporter().tooManyDimensions(this); >- this.resolvedType = scope.createArrayType(this.resolvedType, this.dimensions); >- } >+ createArrayType(scope); > return this.resolvedType; > } else if (argLength != typeVariables.length) { // check arity > scope.problemReporter().incorrectArityForParameterizedType(this, currentType, argTypes, i); >+ createArrayType(scope); > return null; > } > // check parameterizing non-static member type of raw type >@@ -265,8 +268,10 @@ > } else { > ReferenceBinding currentOriginal = (ReferenceBinding)currentType.original(); > if (isClassScope) >- if (((ClassScope) scope).detectHierarchyCycle(currentOriginal, this)) >+ if (((ClassScope) scope).detectHierarchyCycle(currentOriginal, this)) { >+ createArrayType(scope); > return null; >+ } > if (currentOriginal.isGenericType()) { > if (typeIsConsistent && qualifyingType != null && qualifyingType.isParameterizedType()) { > scope.problemReporter().parameterizedMemberTypeMissingArguments(this, scope.environment().createParameterizedType(currentOriginal, null, qualifyingType), i); >@@ -283,13 +288,16 @@ > reportDeprecatedType(qualifyingType, scope, i); > this.resolvedType = qualifyingType; > } >+ createArrayType(scope); >+ return this.resolvedType; >+ } >+ private void createArrayType(Scope scope) { > // array type ? > if (this.dimensions > 0) { > if (this.dimensions > 255) > scope.problemReporter().tooManyDimensions(this); > this.resolvedType = scope.createArrayType(this.resolvedType, this.dimensions); > } >- return this.resolvedType; > } > > public StringBuffer printExpression(int indent, StringBuffer output) { >Index: compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java,v >retrieving revision 1.54 >diff -u -r1.54 ParameterizedSingleTypeReference.java >--- compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java 1 Nov 2010 14:15:46 -0000 1.54 >+++ compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java 14 Apr 2011 15:52:16 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2000, 2010 IBM Corporation and others. >+ * Copyright (c) 2000, 2011 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -105,7 +105,6 @@ > } > } > } >- boolean hasGenericError = false; > ReferenceBinding currentType; > this.bits |= ASTNode.DidResolve; > if (enclosingType == null) { >@@ -113,7 +112,6 @@ > if (this.resolvedType.isValidBinding()) { > currentType = (ReferenceBinding) this.resolvedType; > } else { >- hasGenericError = true; > reportInvalidType(scope); > switch (this.resolvedType.problemId()) { > case ProblemReasons.NotFound : >@@ -127,16 +125,17 @@ > //$FALL-THROUGH$ - unable to complete type binding, but still resolve type arguments > default : > boolean isClassScope = scope.kind == Scope.CLASS_SCOPE; >- int argLength = this.typeArguments.length; >- for (int i = 0; i < argLength; i++) { >- TypeReference typeArgument = this.typeArguments[i]; >- if (isClassScope) { >- typeArgument.resolveType((ClassScope) scope); >- } else { >- typeArgument.resolveType((BlockScope) scope, checkBounds); >+ int argLength = this.typeArguments.length; >+ for (int i = 0; i < argLength; i++) { >+ TypeReference typeArgument = this.typeArguments[i]; >+ if (isClassScope) { >+ typeArgument.resolveType((ClassScope) scope); >+ } else { >+ typeArgument.resolveType((BlockScope) scope, checkBounds); >+ } > } >- } >- return null; >+ createArrayType(scope); >+ return null; > } > // be resilient, still attempt resolving arguments > } >@@ -150,8 +149,8 @@ > } else { // resolving member type (relatively to enclosingType) > this.resolvedType = currentType = scope.getMemberType(this.token, enclosingType); > if (!this.resolvedType.isValidBinding()) { >- hasGenericError = true; > scope.problemReporter().invalidEnclosingType(this, currentType, enclosingType); >+ createArrayType(scope); > return null; > } > if (isTypeUseDeprecated(currentType, scope)) >@@ -163,34 +162,37 @@ > } > > // check generic and arity >- boolean isClassScope = scope.kind == Scope.CLASS_SCOPE; >- TypeReference keep = null; >- if (isClassScope) { >- keep = ((ClassScope) scope).superTypeReference; >- ((ClassScope) scope).superTypeReference = null; >- } >+ boolean isClassScope = scope.kind == Scope.CLASS_SCOPE; >+ TypeReference keep = null; >+ if (isClassScope) { >+ keep = ((ClassScope) scope).superTypeReference; >+ ((ClassScope) scope).superTypeReference = null; >+ } > int argLength = this.typeArguments.length; > TypeBinding[] argTypes = new TypeBinding[argLength]; > boolean argHasError = false; > ReferenceBinding currentOriginal = (ReferenceBinding)currentType.original(); > for (int i = 0; i < argLength; i++) { >- TypeReference typeArgument = this.typeArguments[i]; >- TypeBinding argType = isClassScope >- ? typeArgument.resolveTypeArgument((ClassScope) scope, currentOriginal, i) >- : typeArgument.resolveTypeArgument((BlockScope) scope, currentOriginal, i); >- if (argType == null) { >- argHasError = true; >- } else { >- argTypes[i] = argType; >- } >+ TypeReference typeArgument = this.typeArguments[i]; >+ TypeBinding argType = isClassScope >+ ? typeArgument.resolveTypeArgument((ClassScope) scope, currentOriginal, i) >+ : typeArgument.resolveTypeArgument((BlockScope) scope, currentOriginal, i); >+ if (argType == null) { >+ argHasError = true; >+ } else { >+ argTypes[i] = argType; >+ } > } > if (argHasError) { >+ createArrayType(scope); > return null; > } > if (isClassScope) { >- ((ClassScope) scope).superTypeReference = keep; >- if (((ClassScope) scope).detectHierarchyCycle(currentOriginal, this)) >+ ((ClassScope) scope).superTypeReference = keep; >+ if (((ClassScope) scope).detectHierarchyCycle(currentOriginal, this)) { >+ createArrayType(scope); > return null; >+ } > } > > TypeVariableBinding[] typeVariables = currentOriginal.typeVariables(); >@@ -200,6 +202,7 @@ > if (isCompliant15) { // below 1.5, already reported as syntax error > this.resolvedType = currentType; > scope.problemReporter().nonGenericTypeCannotBeParameterized(0, this, currentType, argTypes); >+ createArrayType(scope); > return null; > } > } >@@ -212,31 +215,33 @@ > scope.problemReporter().tooManyDimensions(this); > type = scope.createArrayType(type, this.dimensions); > } >- if (hasGenericError) >- return type; > return this.resolvedType = type; > } > // if missing generic type, and compliance >= 1.5, then will rebuild a parameterized binding > } else if (argLength != typeVariables.length) { // check arity > scope.problemReporter().incorrectArityForParameterizedType(this, currentType, argTypes); >+ createArrayType(scope); > return null; > } else if (!currentType.isStatic()) { > ReferenceBinding actualEnclosing = currentType.enclosingType(); > if (actualEnclosing != null && actualEnclosing.isRawType()){ > scope.problemReporter().rawMemberTypeCannotBeParameterized( > this, scope.environment().createRawType(currentOriginal, actualEnclosing), argTypes); >+ createArrayType(scope); > return null; > } > } > > ParameterizedTypeBinding parameterizedType = scope.environment().createParameterizedType(currentOriginal, argTypes, enclosingType); > // check argument type compatibility >- if (checkBounds) // otherwise will do it in Scope.connectTypeVariables() or generic method resolution >+ if (checkBounds) {// otherwise will do it in Scope.connectTypeVariables() or generic method resolution > parameterizedType.boundCheck(scope, this.typeArguments); >- else >+ } else { > scope.deferBoundCheck(this); >- if (isTypeUseDeprecated(parameterizedType, scope)) >+ } >+ if (isTypeUseDeprecated(parameterizedType, scope)) { > reportDeprecatedType(parameterizedType, scope); >+ } > > TypeBinding type = parameterizedType; > // array type ? >@@ -245,11 +250,16 @@ > scope.problemReporter().tooManyDimensions(this); > type = scope.createArrayType(type, this.dimensions); > } >- if (hasGenericError) { >- return type; >- } > return this.resolvedType = type; > } >+ private void createArrayType(Scope scope) { >+ if (this.dimensions > 0) { >+ if (this.dimensions > 255) { >+ scope.problemReporter().tooManyDimensions(this); >+ } >+ this.resolvedType = scope.createArrayType(this.resolvedType, this.dimensions); >+ } >+ } > > public StringBuffer printExpression(int indent, StringBuffer output){ > output.append(this.token); >Index: dom/org/eclipse/jdt/core/dom/ASTConverter.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java,v >retrieving revision 1.275 >diff -u -r1.275 ASTConverter.java >--- dom/org/eclipse/jdt/core/dom/ASTConverter.java 14 Mar 2011 16:46:53 -0000 1.275 >+++ dom/org/eclipse/jdt/core/dom/ASTConverter.java 14 Apr 2011 15:52:16 -0000 >@@ -3157,14 +3157,14 @@ > case AST.JLS3 : > if (typeArguments != null) { > int numberOfEnclosingType = 0; >- int startingIndex = 0; >- int endingIndex = 0; >+ int startingIndex = 0; >+ int endingIndex = 0; > for (int i = 0, max = typeArguments.length; i < max; i++) { > if (typeArguments[i] != null) { > numberOfEnclosingType++; > } else if (numberOfEnclosingType == 0) { >- endingIndex++; >- } >+ endingIndex++; >+ } > } > Name name = null; > if (endingIndex - startingIndex == 0) { >@@ -3189,10 +3189,10 @@ > simpleType.setSourceRange(start, end - start + 1); > ParameterizedType parameterizedType = new ParameterizedType(this.ast); > parameterizedType.setType(simpleType); >- if (this.resolveBindings) { >- recordNodes(simpleType, typeReference); >- recordNodes(parameterizedType, typeReference); >- } >+ if (this.resolveBindings) { >+ recordNodes(simpleType, typeReference); >+ recordNodes(parameterizedType, typeReference); >+ } > start = simpleType.getStartPosition(); > end = start + simpleType.getLength() - 1; > for (int i = 0, max = typeArguments[endingIndex].length; i < max; i++) { >@@ -3218,22 +3218,22 @@ > QualifiedType qualifiedType = new QualifiedType(this.ast); > qualifiedType.setQualifier(currentType); > qualifiedType.setName(simpleName); >- if (this.resolveBindings) { >- recordNodes(simpleName, typeReference); >- recordNodes(qualifiedType, typeReference); >- } >+ if (this.resolveBindings) { >+ recordNodes(simpleName, typeReference); >+ recordNodes(qualifiedType, typeReference); >+ } > start = currentType.getStartPosition(); > end = simpleName.getStartPosition() + simpleName.getLength() - 1; > qualifiedType.setSourceRange(start, end - start + 1); > indexOfEnclosingType++; > if (typeArguments[startingIndex] != null) { >- qualifiedType.index = indexOfEnclosingType; >+ qualifiedType.index = indexOfEnclosingType; > ParameterizedType parameterizedType2 = new ParameterizedType(this.ast); > parameterizedType2.setType(qualifiedType); >- parameterizedType2.index = indexOfEnclosingType; >- if (this.resolveBindings) { >- recordNodes(parameterizedType2, typeReference); >- } >+ parameterizedType2.index = indexOfEnclosingType; >+ if (this.resolveBindings) { >+ recordNodes(parameterizedType2, typeReference); >+ } > for (int i = 0, max = typeArguments[startingIndex].length; i < max; i++) { > final Type type2 = convertType(typeArguments[startingIndex][i]); > parameterizedType2.typeArguments().add(type2); >@@ -3245,7 +3245,7 @@ > currentType = parameterizedType2; > } else { > currentType = qualifiedType; >- qualifiedType.index = indexOfEnclosingType; >+ qualifiedType.index = indexOfEnclosingType; > } > startingIndex++; > } >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.173 >diff -u -r1.173 DefaultBindingResolver.java >--- dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java 13 Apr 2011 14:10:29 -0000 1.173 >+++ dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java 14 Apr 2011 15:52:16 -0000 >@@ -1523,11 +1523,8 @@ > return null; > } > ArrayType arrayType = (ArrayType) type; >- if (typeBinding.isArrayType()) { >- ArrayBinding arrayBinding = (ArrayBinding) typeBinding; >- return getTypeBinding(this.scope.createArrayType(arrayBinding.leafComponentType, arrayType.getDimensions())); >- } >- return getTypeBinding(this.scope.createArrayType(typeBinding, arrayType.getDimensions())); >+ ArrayBinding arrayBinding = (ArrayBinding) typeBinding; >+ return getTypeBinding(this.scope.createArrayType(arrayBinding.leafComponentType, arrayType.getDimensions())); > } > if (typeBinding.isArrayType()) { > typeBinding = ((ArrayBinding) typeBinding).leafComponentType; >@@ -1567,11 +1564,8 @@ > if (this.scope == null) { > return null; > } >- if (binding.isArrayType()) { >- ArrayBinding arrayBinding = (ArrayBinding) binding; >- return getTypeBinding(this.scope.createArrayType(arrayBinding.leafComponentType, arrayType.getDimensions())); >- } >- return getTypeBinding(this.scope.createArrayType(binding, arrayType.getDimensions())); >+ ArrayBinding arrayBinding = (ArrayBinding) binding; >+ return getTypeBinding(this.scope.createArrayType(arrayBinding.leafComponentType, arrayType.getDimensions())); > } else if (binding.isArrayType()) { > ArrayBinding arrayBinding = (ArrayBinding) binding; > return getTypeBinding(arrayBinding.leafComponentType);
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 342671
:
193126
|
193148
|
193157
|
193158
|
193271
|
193272
|
193439