View | Details | Raw Unified | Return to bug 162056
Collapse All | Expand All

(-)compiler/org/eclipse/jdt/internal/compiler/parser/RecoveredUnit.java (-1 / +8 lines)
Lines 48-59 Link Here
48
		type.typeDeclaration.declarationSourceEnd = 0; // reset position
48
		type.typeDeclaration.declarationSourceEnd = 0; // reset position
49
		type.typeDeclaration.bodyEnd = 0;
49
		type.typeDeclaration.bodyEnd = 0;
50
		
50
		
51
		if(start > 0 && start < end) {
51
		int kind = TypeDeclaration.kind(type.typeDeclaration.modifiers);
52
		if(start > 0 &&
53
				start < end && 
54
				kind != TypeDeclaration.INTERFACE_DECL &&
55
				kind != TypeDeclaration.ANNOTATION_TYPE_DECL) {
56
			// the } of the last type can be considered as the end of an initializer
52
			Initializer initializer = new Initializer(new Block(0), 0);
57
			Initializer initializer = new Initializer(new Block(0), 0);
53
			initializer.bodyStart = end;
58
			initializer.bodyStart = end;
54
			initializer.bodyEnd = end;
59
			initializer.bodyEnd = end;
55
			initializer.declarationSourceStart = end;
60
			initializer.declarationSourceStart = end;
56
			initializer.declarationSourceEnd = end;
61
			initializer.declarationSourceEnd = end;
62
			initializer.sourceStart = end;
63
			initializer.sourceEnd = end;
57
			type.add(initializer, bracketBalanceValue);
64
			type.add(initializer, bracketBalanceValue);
58
		}
65
		}
59
		
66
		
(-)src/org/eclipse/jdt/core/tests/compiler/parser/SourceElementParserTest.java (-6 / +1 lines)
Lines 4630-4636 Link Here
4630
			
4630
			
4631
	String expectedUnitToString = 
4631
	String expectedUnitToString = 
4632
		"public interface X {\n"
4632
		"public interface X {\n"
4633
		+ "\t{}\n"
4634
		+ "\tint foo() {}\n"
4633
		+ "\tint foo() {}\n"
4635
		+ "\tint x() {}\n"
4634
		+ "\tint x() {}\n"
4636
		+ "}";
4635
		+ "}";
Lines 4651-4661 Link Here
4651
	assertTrue("has no superinterfaces " , currentType.getInterfaceNames() == null);
4650
	assertTrue("has no superinterfaces " , currentType.getInterfaceNames() == null);
4652
4651
4653
	SourceField[] fields = currentType.getFields();
4652
	SourceField[] fields = currentType.getFields();
4654
	assertTrue(" invalid fields ", fields != null);
4653
	assertTrue(" invalid fields ", fields == null);
4655
	assertEquals(" invalid fields length ", 1, fields.length);
4656
4657
	assertEquals("Invalid declaration source start for initializer", 51, fields[0].getDeclarationSourceStart());
4658
	assertEquals("Invalid declaration source end for initializer", 51, fields[0].getDeclarationSourceEnd());
4659
4654
4660
	SourceMethod[] methods = currentType.getMethods();
4655
	SourceMethod[] methods = currentType.getMethods();
4661
	assertTrue(" invalid methods ", methods != null);
4656
	assertTrue(" invalid methods ", methods != null);
(-)src/org/eclipse/jdt/core/tests/compiler/parser/DietRecoveryTest.java (+141 lines)
Lines 7093-7096 Link Here
7093
		expectedFullUnitToString,
7093
		expectedFullUnitToString,
7094
		expectedCompletionDietUnitToString, testName);
7094
		expectedCompletionDietUnitToString, testName);
7095
}
7095
}
7096
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=162056
7097
public void test118() {
7098
	String s = 
7099
		"interface Irrelevant {}\n"+
7100
		"interface I {\n"+
7101
		"	Object foo(Number n);\n"+
7102
		"}\n"+
7103
		"interface J extends I {\n"+
7104
		"	String foo(Number n);\n"+
7105
		"}\n"+
7106
		"interface K {\n"+
7107
		"	Object foo(Number n);\n"+
7108
		"}\n"+
7109
		"public class  {\n"+
7110
		"	void foo() {\n"+
7111
		"\n"+
7112
		"	}\n"+
7113
		"} \n";
7114
		
7115
	String expectedDietUnitToString = 
7116
		"interface Irrelevant {\n" + 
7117
		"}\n" + 
7118
		"interface I {\n" + 
7119
		"  Object foo(Number n);\n" + 
7120
		"}\n" + 
7121
		"interface J extends I {\n" + 
7122
		"  String foo(Number n);\n" + 
7123
		"}\n" + 
7124
		"interface K {\n" + 
7125
		"  Object foo(Number n);\n" + 
7126
		"  void foo() {\n" + 
7127
		"  }\n" + 
7128
		"}\n";
7129
7130
	String expectedDietPlusBodyUnitToString = 
7131
		"interface Irrelevant {\n" + 
7132
		"}\n" + 
7133
		"interface I {\n" + 
7134
		"  Object foo(Number n);\n" + 
7135
		"}\n" + 
7136
		"interface J extends I {\n" + 
7137
		"  String foo(Number n);\n" + 
7138
		"}\n" + 
7139
		"interface K {\n" + 
7140
		"  Object foo(Number n);\n" + 
7141
		"  void foo() {\n" + 
7142
		"  }\n" + 
7143
		"}\n";
7144
	
7145
	String expectedDietPlusBodyPlusStatementsRecoveryUnitToString =
7146
		expectedDietPlusBodyUnitToString;
7147
	
7148
	String expectedFullUnitToString = expectedDietUnitToString;
7149
	
7150
	String expectedCompletionDietUnitToString = 
7151
		expectedDietUnitToString;
7152
	
7153
	String testName = "test foreach toString";
7154
	checkParse(
7155
		s.toCharArray(),
7156
		expectedDietUnitToString,
7157
		expectedDietPlusBodyUnitToString,
7158
		expectedDietPlusBodyPlusStatementsRecoveryUnitToString,		
7159
		expectedFullUnitToString,
7160
		expectedCompletionDietUnitToString, testName);
7161
}
7162
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=162056
7163
public void test119() {
7164
	String s = 
7165
		"interface Irrelevant {}\n"+
7166
		"interface I {\n"+
7167
		"	Object foo(Number n);\n"+
7168
		"}\n"+
7169
		"interface J extends I {\n"+
7170
		"	String foo(Number n);\n"+
7171
		"}\n"+
7172
		"abstract class K {\n"+
7173
		"	abstract Object foo(Number n);\n"+
7174
		"}\n"+
7175
		"public class  {\n"+
7176
		"	void foo() {\n"+
7177
		"\n"+
7178
		"	}\n"+
7179
		"} \n";
7180
		
7181
	String expectedDietUnitToString = 
7182
		"interface Irrelevant {\n" + 
7183
		"}\n" + 
7184
		"interface I {\n" + 
7185
		"  Object foo(Number n);\n" + 
7186
		"}\n" + 
7187
		"interface J extends I {\n" + 
7188
		"  String foo(Number n);\n" + 
7189
		"}\n" + 
7190
		"abstract class K {\n" + 
7191
		"  {\n" + 
7192
		"  }\n" + 
7193
		"  K() {\n" + 
7194
		"  }\n" + 
7195
		"  abstract Object foo(Number n);\n" + 
7196
		"  void foo() {\n" + 
7197
		"  }\n" + 
7198
		"}\n";
7199
7200
	String expectedDietPlusBodyUnitToString = 
7201
		"interface Irrelevant {\n" + 
7202
		"}\n" + 
7203
		"interface I {\n" + 
7204
		"  Object foo(Number n);\n" + 
7205
		"}\n" + 
7206
		"interface J extends I {\n" + 
7207
		"  String foo(Number n);\n" + 
7208
		"}\n" + 
7209
		"abstract class K {\n" + 
7210
		"  {\n" + 
7211
		"  }\n" + 
7212
		"  K() {\n" + 
7213
		"    super();\n" + 
7214
		"  }\n" + 
7215
		"  abstract Object foo(Number n);\n" + 
7216
		"  void foo() {\n" + 
7217
		"  }\n" + 
7218
		"}\n";
7219
	
7220
	String expectedDietPlusBodyPlusStatementsRecoveryUnitToString =
7221
		expectedDietPlusBodyUnitToString;
7222
	
7223
	String expectedFullUnitToString = expectedDietUnitToString;
7224
	
7225
	String expectedCompletionDietUnitToString = 
7226
		expectedDietUnitToString;
7227
	
7228
	String testName = "test foreach toString";
7229
	checkParse(
7230
		s.toCharArray(),
7231
		expectedDietUnitToString,
7232
		expectedDietPlusBodyUnitToString,
7233
		expectedDietPlusBodyPlusStatementsRecoveryUnitToString,		
7234
		expectedFullUnitToString,
7235
		expectedCompletionDietUnitToString, testName);
7236
}
7096
}
7237
}

Return to bug 162056