*** empty log message ***
diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html
index b7f6902..fc80751 100644
--- a/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -17,7 +17,9 @@
<h3>
Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9492">9492</a>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9813">9813</a>
+VerifyError with Inner Class having private constructor
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9492">9492</a>
Walkback while searching
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9837">9837</a>
Inconsistent behavior when compiling from source or using binaries for constant expressions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
index 40ea716..f401064 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java
@@ -62,14 +62,13 @@
LocalTypeBinding localType = (LocalTypeBinding) allocatedType;
localType.constantPoolName(codeStream.classFile.outerMostEnclosingClassFile().computeConstantPoolName(localType));
}
- if (syntheticAccessor == null) {
- codeStream.new_(allocatedType);
- if (valueRequired) {
- codeStream.dup();
- }
- // better highlight for allocation: display the type individually
- codeStream.recordPositionsFrom(pc, type.sourceStart);
+ codeStream.new_(allocatedType);
+ if (valueRequired) {
+ codeStream.dup();
}
+ // better highlight for allocation: display the type individually
+ codeStream.recordPositionsFrom(pc, type.sourceStart);
+
// handling innerclass instance allocation
if (allocatedType.isNestedType()) { // make sure its name is computed before arguments, since may be necessary for argument emulation
codeStream.generateSyntheticArgumentValues(currentScope, allocatedType, enclosingInstance(), this);
@@ -84,7 +83,11 @@
if (syntheticAccessor == null) {
codeStream.invokespecial(binding);
} else {
- codeStream.invokestatic(syntheticAccessor);
+ // synthetic accessor got some extra arguments appended to its signature, which need values
+ for (int i = 0, max = syntheticAccessor.parameters.length - binding.parameters.length; i < max; i++) {
+ codeStream.aconst_null();
+ }
+ codeStream.invokespecial(syntheticAccessor);
}
codeStream.recordPositionsFrom(pc, this.sourceStart);
if (anonymousType != null) {