# HG changeset patch # User Gilles Duboscq # Date 1398187418 -7200 # Node ID 98d45600222cc229988dabcdb5e9c0a3d0ed05f3 # Parent dfea125116429f340f1266c9f33a25b49814e4a0 Add ResolvedJavaMethod.isSynchronized diff -r dfea12511642 -r 98d45600222c graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaMethod.java --- a/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaMethod.java Tue Apr 22 13:51:16 2014 +0200 +++ b/graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaMethod.java Tue Apr 22 19:23:38 2014 +0200 @@ -128,6 +128,18 @@ } @Test + public void isSynchronizedTest() { + for (Map.Entry e : methods.entrySet()) { + ResolvedJavaMethod m = e.getValue(); + assertEquals(Modifier.isSynchronized(e.getKey().getModifiers()), m.isSynchronized()); + } + for (Map.Entry, ResolvedJavaMethod> e : constructors.entrySet()) { + ResolvedJavaMethod m = e.getValue(); + assertEquals(Modifier.isSynchronized(e.getKey().getModifiers()), m.isSynchronized()); + } + } + + @Test public void canBeStaticallyBoundTest() { for (Map.Entry e : methods.entrySet()) { ResolvedJavaMethod m = e.getValue(); diff -r dfea12511642 -r 98d45600222c graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java Tue Apr 22 13:51:16 2014 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java Tue Apr 22 19:23:38 2014 +0200 @@ -115,6 +115,8 @@ */ boolean canBeStaticallyBound(); + boolean isSynchronized(); + /** * Returns the list of exception handlers for this method. */ diff -r dfea12511642 -r 98d45600222c graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java --- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Tue Apr 22 13:51:16 2014 +0200 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Tue Apr 22 19:23:38 2014 +0200 @@ -23,7 +23,6 @@ package com.oracle.graal.baseline; import static com.oracle.graal.compiler.common.GraalOptions.*; -import static java.lang.reflect.Modifier.*; import java.util.*; @@ -106,7 +105,7 @@ } } - if (isSynchronized(method.getModifiers())) { + if (method.isSynchronized()) { throw GraalInternalError.unimplemented("Handle synchronized methods"); } diff -r dfea12511642 -r 98d45600222c graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Tue Apr 22 13:51:16 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Tue Apr 22 19:23:38 2014 +0200 @@ -487,6 +487,10 @@ return ((getModifiers() & mask) == Modifier.PUBLIC) && getDeclaringClass().isInterface(); } + public boolean isSynchronized() { + return Modifier.isSynchronized(getModifiers()); + } + @Override public Type[] getGenericParameterTypes() { if (isConstructor()) { diff -r dfea12511642 -r 98d45600222c graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Apr 22 13:51:16 2014 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Tue Apr 22 19:23:38 2014 +0200 @@ -28,7 +28,6 @@ import static com.oracle.graal.compiler.common.GraalOptions.*; import static java.lang.reflect.Modifier.*; -import java.lang.reflect.*; import java.util.*; import com.oracle.graal.api.code.*; @@ -220,7 +219,7 @@ liveness = blockMap.liveness; lastInstr = currentGraph.start(); - if (isSynchronized(method.getModifiers())) { + if (method.isSynchronized()) { // add a monitor enter to the start block currentGraph.start().setStateAfter(frameState.create(BytecodeFrame.BEFORE_BCI)); methodSynchronizedObject = synchronizedObject(frameState, method); @@ -290,7 +289,7 @@ unwindBlock = new ExceptionDispatchBlock(); unwindBlock.startBci = -1; unwindBlock.endBci = -1; - unwindBlock.deoptBci = Modifier.isSynchronized(method.getModifiers()) ? BytecodeFrame.UNWIND_BCI : BytecodeFrame.AFTER_EXCEPTION_BCI; + unwindBlock.deoptBci = method.isSynchronized() ? BytecodeFrame.UNWIND_BCI : BytecodeFrame.AFTER_EXCEPTION_BCI; unwindBlock.setId(Integer.MAX_VALUE); } return unwindBlock; @@ -1162,7 +1161,7 @@ } private void synchronizedEpilogue(int bci, ValueNode returnValue) { - if (Modifier.isSynchronized(method.getModifiers())) { + if (method.isSynchronized()) { MonitorExitNode monitorExit = genMonitorExit(methodSynchronizedObject, returnValue); if (returnValue != null) { frameState.push(returnValue.getKind(), returnValue);