*** empty log message ***
diff --git a/org.eclipse.jdt.core/changes.txt b/org.eclipse.jdt.core/changes.txt
index 6657468..4bc8100 100644
--- a/org.eclipse.jdt.core/changes.txt
+++ b/org.eclipse.jdt.core/changes.txt
@@ -118,7 +118,7 @@
 

 

 **********************************************************************************

-*** STABLE CONTENT (2.0 STREAM, v_202_01) ****************************************

+*** STABLE CONTENT (2.0 STREAM, v_203_02) ****************************************

 **********************************************************************************

   

   What's new in this drop

diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java
index 34d8c00..33e471d 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryMethod.java
@@ -153,6 +153,7 @@
 }

 /**

  * @see IMethod

+ * Look for source attachment information to retrieve the actual parameter names as stated in source.

  */

 public String[] getParameterNames() throws JavaModelException {

 

@@ -160,28 +161,25 @@
 

 		// force source mapping if not already done

 		IType type = (IType) getParent();

-		char[] source = getSourceMapper().findSource(type);

-		if (source != null){

-			getSourceMapper().mapSource(type, source);

-		}

-		ISourceRange sourceRange = getSourceRange();

-		if (sourceRange != null && sourceRange != SourceMapper.fgUnknownRange) {

-			IProblemFactory factory = new DefaultProblemFactory();

-			DecodeParametersNames decoder = new DecodeParametersNames();

-			SourceElementParser parser = new SourceElementParser(decoder, factory);

-			int start = sourceRange.getOffset();

-			int end = start + sourceRange.getLength();

-			parser.parseTypeMemberDeclarations(source, start, end);

-			fParameterNames = decoder.getParametersNames();

-			if (fParameterNames == null) {

-				IBinaryMethod info = (IBinaryMethod) getRawInfo();

-				int paramCount = Signature.getParameterCount(new String(info.getMethodDescriptor()));

-				fParameterNames = new String[paramCount];

-				for (int i = 0; i < paramCount; i++) {

-					fParameterNames[i] = "arg" + i; //$NON-NLS-1$

+		SourceMapper mapper = getSourceMapper();

+		if (mapper != null) {

+			char[] source = mapper.findSource(type);

+			if (source != null){

+				mapper.mapSource(type, source);

+				ISourceRange sourceRange = getSourceRange();

+				if (source != null & sourceRange != null && sourceRange != SourceMapper.fgUnknownRange) {

+					IProblemFactory factory = new DefaultProblemFactory();

+					DecodeParametersNames decoder = new DecodeParametersNames();

+					SourceElementParser parser = new SourceElementParser(decoder, factory);

+					int start = sourceRange.getOffset();

+					int end = start + sourceRange.getLength();

+					parser.parseTypeMemberDeclarations(source, start, end);

+					fParameterNames = decoder.getParametersNames();

 				}

 			}

-		} else {

+		}

+		// if still no parameter names, produce fake ones

+		if (fParameterNames == null) {

 			IBinaryMethod info = (IBinaryMethod) getRawInfo();

 			int paramCount = Signature.getParameterCount(new String(info.getMethodDescriptor()));

 			fParameterNames = new String[paramCount];