### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java,v retrieving revision 1.140 diff -u -r1.140 SourceTypeBinding.java --- compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java 30 Oct 2006 10:56:45 -0000 1.140 +++ compiler/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java 9 Nov 2006 20:23:58 -0000 @@ -1361,7 +1361,7 @@ methodDecl.scope.problemReporter().argumentTypeCannotBeVoid(this, methodDecl, arg); foundArgProblem = true; } else if (parameterType.isArrayType() && ((ArrayBinding) parameterType).leafComponentType == TypeBinding.VOID) { - methodDecl.scope.problemReporter().argumentTypeCannotBeVoidArray(this, methodDecl, arg); + methodDecl.scope.problemReporter().argumentTypeCannotBeVoidArray(arg); foundArgProblem = true; } else { TypeBinding leafType = parameterType.leafComponentType(); @@ -1386,7 +1386,7 @@ if (methodType == null) { foundReturnTypeProblem = true; } else if (methodType.isArrayType() && ((ArrayBinding) methodType).leafComponentType == TypeBinding.VOID) { - methodDecl.scope.problemReporter().returnTypeCannotBeVoidArray(this, (MethodDeclaration) methodDecl); + methodDecl.scope.problemReporter().returnTypeCannotBeVoidArray((MethodDeclaration) methodDecl); foundReturnTypeProblem = true; } else { method.returnType = methodType; Index: compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties,v retrieving revision 1.211 diff -u -r1.211 messages.properties --- compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties 19 Oct 2006 08:19:53 -0000 1.211 +++ compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties 9 Nov 2006 20:24:00 -0000 @@ -39,8 +39,8 @@ 50 = {0} cannot be resolved 51 = The local variable {0} may not have been initialized 52 = void is an invalid type for the variable {0} -53 = An array of void is an invalid type for the variable {0} -54 = An array of void is an invalid type +###[obsolete] 53 = An array of void is an invalid type for the variable {0} +54 = void[] is an invalid type 55 = Duplicate local variable {0} 56 = Duplicate parameter {0} 57 = The final local variable {0} may already have been assigned @@ -286,8 +286,8 @@ 362 = The abstract method {1} in type {0} can only set a visibility modifier, one of public or protected 363 = The abstract method {1} in type {0} can only be defined by an abstract class 364 = void is an invalid type for the parameter {1} of the method {0} -365 = An array of void is an invalid type for the parameter {1} of the method {0} -366 = An array of void is an invalid return type for the method {0} +###[obsolete] 365 = An array of void is an invalid type for the parameter {1} of the method {0} +###[obsolete] 366 = An array of void is an invalid return type for the method {0} 367 = The native method {1} cannot also be declared strictfp 368 = Duplicate modifier for parameter {0} Index: compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java,v retrieving revision 1.325 diff -u -r1.325 ProblemReporter.java --- compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 19 Oct 2006 08:19:34 -0000 1.325 +++ compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 9 Nov 2006 20:24:00 -0000 @@ -635,14 +635,13 @@ methodDecl.sourceStart, methodDecl.sourceEnd); } -public void argumentTypeCannotBeVoidArray(SourceTypeBinding type, AbstractMethodDeclaration methodDecl, Argument arg) { - String[] arguments = new String[] {new String(methodDecl.selector), new String(arg.name)}; +public void argumentTypeCannotBeVoidArray(Argument arg) { this.handle( - IProblem.ArgumentTypeCannotBeVoidArray, - arguments, - arguments, - methodDecl.sourceStart, - methodDecl.sourceEnd); + IProblem.CannotAllocateVoidArray, + NoArgument, + NoArgument, + arg.type.sourceStart, + arg.type.sourceEnd); } public void arrayConstantsOnlyInArrayInitializers(int sourceStart, int sourceEnd) { this.handle( @@ -5356,14 +5355,13 @@ arrayRef.sourceStart, arrayRef.sourceEnd); } -public void returnTypeCannotBeVoidArray(SourceTypeBinding type, MethodDeclaration methodDecl) { - String[] arguments = new String[] {new String(methodDecl.selector)}; +public void returnTypeCannotBeVoidArray(MethodDeclaration methodDecl) { this.handle( - IProblem.ReturnTypeCannotBeVoidArray, - arguments, - arguments, - methodDecl.sourceStart, - methodDecl.sourceEnd); + IProblem.CannotAllocateVoidArray, + NoArgument, + NoArgument, + methodDecl.returnType.sourceStart, + methodDecl.returnType.sourceEnd); } public void scannerError(Parser parser, String errorTokenName) { Scanner scanner = parser.scanner; @@ -6414,13 +6412,12 @@ varDecl.sourceEnd); } public void variableTypeCannotBeVoidArray(AbstractVariableDeclaration varDecl) { - String[] arguments = new String[] {new String(varDecl.name)}; this.handle( - IProblem.VariableTypeCannotBeVoidArray, - arguments, - arguments, - varDecl.sourceStart, - varDecl.sourceEnd); + IProblem.CannotAllocateVoidArray, + NoArgument, + NoArgument, + varDecl.type.sourceStart, + varDecl.type.sourceEnd); } public void visibilityConflict(MethodBinding currentMethod, MethodBinding inheritedMethod) { this.handle( Index: compiler/org/eclipse/jdt/core/compiler/IProblem.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java,v retrieving revision 1.182 diff -u -r1.182 IProblem.java --- compiler/org/eclipse/jdt/core/compiler/IProblem.java 19 Oct 2006 08:19:30 -0000 1.182 +++ compiler/org/eclipse/jdt/core/compiler/IProblem.java 9 Nov 2006 20:23:57 -0000 @@ -288,6 +288,7 @@ int UndefinedName = Internal + FieldRelated + 50; int UninitializedLocalVariable = Internal + 51; int VariableTypeCannotBeVoid = Internal + 52; + /** @deprecated - problem is no longer generated, use {@link #CannotAllocateVoidArray} instead */ int VariableTypeCannotBeVoidArray = Internal + 53; int CannotAllocateVoidArray = Internal + 54; // local variables @@ -447,7 +448,7 @@ int SuperfluousSemicolon = Internal + 180; /** @since 3.0 */ int UnnecessaryCast = Internal + TypeRelated + 181; - /** @deprecated - no longer generated, simply treated as UnnecessaryCast + /** @deprecated - no longer generated, use {@link #UnnecessaryCast} instead * @since 3.0 */ int UnnecessaryArgumentCast = Internal + TypeRelated + 182; /** @since 3.0 */ @@ -597,26 +598,26 @@ /** @since 3.1 */ int ObjectMustBeClass = Internal + 330; - /** @deprecated - problem is no longer generated, UndefinedType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #UndefinedType} instead */ int SuperclassNotFound = TypeRelated + 329 + ProblemReasons.NotFound; // TypeRelated + 330 - /** @deprecated - problem is no longer generated, NotVisibleType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #NotVisibleType} instead */ int SuperclassNotVisible = TypeRelated + 329 + ProblemReasons.NotVisible; // TypeRelated + 331 - /** @deprecated - problem is no longer generated, use AmbiguousType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #AmbiguousType} instead */ int SuperclassAmbiguous = TypeRelated + 329 + ProblemReasons.Ambiguous; // TypeRelated + 332 - /** @deprecated - problem is no longer generated, use InternalTypeNameProvided is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InternalTypeNameProvided} instead */ int SuperclassInternalNameProvided = TypeRelated + 329 + ProblemReasons.InternalNameProvided; // TypeRelated + 333 - /** @deprecated - problem is no longer generated, use InheritedTypeHidesEnclosingName is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InheritedTypeHidesEnclosingName} instead */ int SuperclassInheritedNameHidesEnclosingName = TypeRelated + 329 + ProblemReasons.InheritedNameHidesEnclosingName; // TypeRelated + 334 - /** @deprecated - problem is no longer generated, UndefinedType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #UndefinedType} instead */ int InterfaceNotFound = TypeRelated + 334 + ProblemReasons.NotFound; // TypeRelated + 335 - /** @deprecated - problem is no longer generated, NotVisibleType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #NotVisibleType} instead */ int InterfaceNotVisible = TypeRelated + 334 + ProblemReasons.NotVisible; // TypeRelated + 336 - /** @deprecated - problem is no longer generated, use AmbiguousType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #AmbiguousType} instead */ int InterfaceAmbiguous = TypeRelated + 334 + ProblemReasons.Ambiguous; // TypeRelated + 337 - /** @deprecated - problem is no longer generated, use InternalTypeNameProvided is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InternalTypeNameProvided} instead */ int InterfaceInternalNameProvided = TypeRelated + 334 + ProblemReasons.InternalNameProvided; // TypeRelated + 338 - /** @deprecated - problem is no longer generated, use InheritedTypeHidesEnclosingName is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InheritedTypeHidesEnclosingName} instead */ int InterfaceInheritedNameHidesEnclosingName = TypeRelated + 334 + ProblemReasons.InheritedNameHidesEnclosingName; // TypeRelated + 339 // field related problems @@ -628,15 +629,15 @@ int IllegalModifierCombinationFinalVolatileForField = FieldRelated + 345; int UnexpectedStaticModifierForField = FieldRelated + 346; - /** @deprecated - problem is no longer generated, UndefinedType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #UndefinedType} instead */ int FieldTypeNotFound = FieldRelated + 349 + ProblemReasons.NotFound; // FieldRelated + 350 - /** @deprecated - problem is no longer generated, NotVisibleType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #NotVisibleType} instead */ int FieldTypeNotVisible = FieldRelated + 349 + ProblemReasons.NotVisible; // FieldRelated + 351 - /** @deprecated - problem is no longer generated, use AmbiguousType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #AmbiguousType} instead */ int FieldTypeAmbiguous = FieldRelated + 349 + ProblemReasons.Ambiguous; // FieldRelated + 352 - /** @deprecated - problem is no longer generated, use InternalTypeNameProvided is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InternalTypeNameProvided} instead */ int FieldTypeInternalNameProvided = FieldRelated + 349 + ProblemReasons.InternalNameProvided; // FieldRelated + 353 - /** @deprecated - problem is no longer generated, use InheritedTypeHidesEnclosingName is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InheritedTypeHidesEnclosingName} instead */ int FieldTypeInheritedNameHidesEnclosingName = FieldRelated + 349 + ProblemReasons.InheritedNameHidesEnclosingName; // FieldRelated + 354 // method related problems @@ -650,42 +651,44 @@ int IllegalAbstractModifierCombinationForMethod = MethodRelated + 362; int AbstractMethodInAbstractClass = MethodRelated + 363; int ArgumentTypeCannotBeVoid = MethodRelated + 364; + /** @deprecated - problem is no longer generated, use {@link #CannotAllocateVoidArray} instead */ int ArgumentTypeCannotBeVoidArray = MethodRelated + 365; + /** @deprecated - problem is no longer generated, use {@link #CannotAllocateVoidArray} instead */ int ReturnTypeCannotBeVoidArray = MethodRelated + 366; int NativeMethodsCannotBeStrictfp = MethodRelated + 367; int DuplicateModifierForArgument = MethodRelated + 368; - /** @deprecated - problem is no longer generated, UndefinedType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #UndefinedType} instead */ int ArgumentTypeNotFound = MethodRelated + 369 + ProblemReasons.NotFound; // MethodRelated + 370 - /** @deprecated - problem is no longer generated, NotVisibleType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #NotVisibleType} instead */ int ArgumentTypeNotVisible = MethodRelated + 369 + ProblemReasons.NotVisible; // MethodRelated + 371 - /** @deprecated - problem is no longer generated, use AmbiguousType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #AmbiguousType} instead */ int ArgumentTypeAmbiguous = MethodRelated + 369 + ProblemReasons.Ambiguous; // MethodRelated + 372 - /** @deprecated - problem is no longer generated, use InternalTypeNameProvided is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InternalTypeNameProvided} instead */ int ArgumentTypeInternalNameProvided = MethodRelated + 369 + ProblemReasons.InternalNameProvided; // MethodRelated + 373 - /** @deprecated - problem is no longer generated, use InheritedTypeHidesEnclosingName is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InheritedTypeHidesEnclosingName} instead */ int ArgumentTypeInheritedNameHidesEnclosingName = MethodRelated + 369 + ProblemReasons.InheritedNameHidesEnclosingName; // MethodRelated + 374 - /** @deprecated - problem is no longer generated, UndefinedType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #UndefinedType} instead */ int ExceptionTypeNotFound = MethodRelated + 374 + ProblemReasons.NotFound; // MethodRelated + 375 - /** @deprecated - problem is no longer generated, NotVisibleType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #NotVisibleType} instead */ int ExceptionTypeNotVisible = MethodRelated + 374 + ProblemReasons.NotVisible; // MethodRelated + 376 - /** @deprecated - problem is no longer generated, use AmbiguousType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #AmbiguousType} instead */ int ExceptionTypeAmbiguous = MethodRelated + 374 + ProblemReasons.Ambiguous; // MethodRelated + 377 - /** @deprecated - problem is no longer generated, use InternalTypeNameProvided is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InternalTypeNameProvided} instead */ int ExceptionTypeInternalNameProvided = MethodRelated + 374 + ProblemReasons.InternalNameProvided; // MethodRelated + 378 - /** @deprecated - problem is no longer generated, use InheritedTypeHidesEnclosingName is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InheritedTypeHidesEnclosingName} instead */ int ExceptionTypeInheritedNameHidesEnclosingName = MethodRelated + 374 + ProblemReasons.InheritedNameHidesEnclosingName; // MethodRelated + 379 - /** @deprecated - problem is no longer generated, UndefinedType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #UndefinedType} instead */ int ReturnTypeNotFound = MethodRelated + 379 + ProblemReasons.NotFound; // MethodRelated + 380 - /** @deprecated - problem is no longer generated, NotVisibleType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #NotVisibleType} instead */ int ReturnTypeNotVisible = MethodRelated + 379 + ProblemReasons.NotVisible; // MethodRelated + 381 - /** @deprecated - problem is no longer generated, use AmbiguousType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #AmbiguousType} instead */ int ReturnTypeAmbiguous = MethodRelated + 379 + ProblemReasons.Ambiguous; // MethodRelated + 382 - /** @deprecated - problem is no longer generated, use InternalTypeNameProvided is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InternalTypeNameProvided} instead */ int ReturnTypeInternalNameProvided = MethodRelated + 379 + ProblemReasons.InternalNameProvided; // MethodRelated + 383 - /** @deprecated - problem is no longer generated, use InheritedTypeHidesEnclosingName is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InheritedTypeHidesEnclosingName} instead */ int ReturnTypeInheritedNameHidesEnclosingName = MethodRelated + 379 + ProblemReasons.InheritedNameHidesEnclosingName; // MethodRelated + 384 // import related problems @@ -695,13 +698,13 @@ int UnusedImport = ImportRelated + 388; int ImportNotFound = ImportRelated + 389 + ProblemReasons.NotFound; // ImportRelated + 390 - /** @deprecated - problem is no longer generated, NotVisibleType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #NotVisibleType} instead */ int ImportNotVisible = ImportRelated + 389 + ProblemReasons.NotVisible; // ImportRelated + 391 - /** @deprecated - problem is no longer generated, use AmbiguousType is used instead */ + /** @deprecated - problem is no longer generated, use {@link #AmbiguousType} instead */ int ImportAmbiguous = ImportRelated + 389 + ProblemReasons.Ambiguous; // ImportRelated + 392 - /** @deprecated - problem is no longer generated, use InternalTypeNameProvided is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InternalTypeNameProvided} instead */ int ImportInternalNameProvided = ImportRelated + 389 + ProblemReasons.InternalNameProvided; // ImportRelated + 393 - /** @deprecated - problem is no longer generated, use InheritedTypeHidesEnclosingName is used instead */ + /** @deprecated - problem is no longer generated, use {@link #InheritedTypeHidesEnclosingName} instead */ int ImportInheritedNameHidesEnclosingName = ImportRelated + 389 + ProblemReasons.InheritedNameHidesEnclosingName; // ImportRelated + 394 /** @since 3.1 */ Index: compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java,v retrieving revision 1.53 diff -u -r1.53 Argument.java --- compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java 28 Oct 2006 04:11:27 -0000 1.53 +++ compiler/org/eclipse/jdt/internal/compiler/ast/Argument.java 9 Nov 2006 20:23:57 -0000 @@ -108,7 +108,11 @@ if (exceptionType.isTypeVariable()) { scope.problemReporter().invalidTypeVariableAsException(exceptionType, this); return null; - } + } + if (exceptionType.isArrayType() && ((ArrayBinding) exceptionType).leafComponentType == TypeBinding.VOID) { + scope.problemReporter().variableTypeCannotBeVoidArray(this); + return null; + } if (exceptionType.findSuperTypeErasingTo(TypeIds.T_JavaLangThrowable, true) == null) { scope.problemReporter().cannotThrowType(this.type, exceptionType); return null; Index: compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java,v retrieving revision 1.34 diff -u -r1.34 TypeReference.java --- compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java 13 Oct 2006 19:20:45 -0000 1.34 +++ compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java 9 Nov 2006 20:23:57 -0000 @@ -128,12 +128,17 @@ return this.resolvedType.isValidBinding() ? this.resolvedType : null; // already reported error TypeBinding type = this.resolvedType = getTypeBinding(scope); - if (this.resolvedType == null) + if (type == null) return null; // detected cycle while resolving hierarchy - if (!this.resolvedType.isValidBinding()) { + if (!type.isValidBinding()) { reportInvalidType(scope); return null; } + if (type.isArrayType() && ((ArrayBinding) type).leafComponentType == TypeBinding.VOID) { + scope.problemReporter().cannotAllocateVoidArray(this); + return null; + } + if (isTypeUseDeprecated(type, scope)) reportDeprecatedType(scope); @@ -152,12 +157,16 @@ return this.resolvedType.isValidBinding() ? this.resolvedType : null; // already reported error TypeBinding type = this.resolvedType = getTypeBinding(scope); - if (this.resolvedType == null) + if (type == null) return null; // detected cycle while resolving hierarchy - if (!this.resolvedType.isValidBinding()) { + if (!type.isValidBinding()) { reportInvalidType(scope); return null; } + if (type.isArrayType() && ((ArrayBinding) type).leafComponentType == TypeBinding.VOID) { + scope.problemReporter().cannotAllocateVoidArray(this); + return null; + } if (isTypeUseDeprecated(type, scope)) reportDeprecatedType(scope);